From ceaff54863bc9e8034a5f869d7c7d2b1405e0d0b Mon Sep 17 00:00:00 2001 From: luoweijian <1329394916@qq.com> Date: Fri, 7 Aug 2026 17:59:53 +0800 Subject: [PATCH] commit --- .../API参考文档/API参考文档.md | 97 ++- .../zh/content/开发指南/开发规范.md | 183 +++++- .../zh/content/数据模型/数据模型.md | 271 +++++---- .../安全架构设计/安全架构设计.md | 144 +++-- .../zh/content/认证服务/认证服务.md | 160 ++++- .qoder/repowiki/zh/content/部署指南.md | 161 +++-- .../zh/content/配置指南/配置指南.md | 221 ++++++- .../基础框架模块(crm-base).md | 572 +++++++++++++----- .../项目概览/模块说明/模块说明.md | 266 +++++++- .../repowiki/zh/meta/repowiki-metadata.json | 2 +- crm-app/target/classes/application.yml | 2 +- .../com/crm/app/CrmAppApplication.class | Bin 924 -> 0 bytes .../compile/default-compile/inputFiles.lst | 1 + .../advice/GlobalExceptionHandlerAdvice.class | Bin 12245 -> 12354 bytes .../com/crm/base/config/CorsConfig.class | Bin 1573 -> 1573 bytes .../com/crm/base/config/CrmSqlInjector.class | Bin 1186 -> 1186 bytes .../crm/base/config/CustomIdGenerator.class | Bin 1699 -> 1686 bytes .../InsertBatchOnDuplicateKeyUpdate.class | Bin 5408 -> 5366 bytes .../com/crm/base/config/JacksonConfig.class | Bin 4044 -> 4018 bytes .../com/crm/base/config/Knife4jConfig.class | Bin 2288 -> 2300 bytes .../base/config/MetaObjectFillHandler.class | Bin 3263 -> 3250 bytes .../crm/base/config/MybatisPlusConfig.class | Bin 2686 -> 2638 bytes .../com/crm/base/config/RedisConfig.class | Bin 2017 -> 2017 bytes .../base/config/ScheduledTaskProperties.class | Bin 2164 -> 2168 bytes .../crm/base/config/SnowflakeIdWorker.class | Bin 2710 -> 2762 bytes .../crm/base/config/SnowflakeProperties.class | Bin 2300 -> 2304 bytes .../crm/base/constant/CommonConstants.class | Bin 581 -> 581 bytes .../com/crm/base/domain/dto/BaseDTO.class | Bin 5400 -> 5411 bytes .../crm/base/domain/entity/BaseEntity.class | Bin 6436 -> 6439 bytes .../crm/base/domain/entity/OwnedEntity.class | Bin 3087 -> 3180 bytes .../crm/base/domain/enums/HasValueEnum.class | Bin 555 -> 555 bytes .../crm/base/domain/enums/StatusEnum.class | Bin 1736 -> 1708 bytes .../exception/BusinessErrorException.class | Bin 1167 -> 1167 bytes .../exception/MissingParameterException.class | Bin 965 -> 965 bytes .../exception/PermissionErrorException.class | Bin 1099 -> 1099 bytes .../exception/ResourceNotExistException.class | Bin 966 -> 966 bytes .../com/crm/base/domain/param/BaseParam.class | Bin 4467 -> 4542 bytes .../crm/base/domain/result/PageResult.class | Bin 5923 -> 5923 bytes .../com/crm/base/domain/result/Result.class | Bin 5102 -> 5122 bytes .../base/domain/result/ResultCodeEnum.class | Bin 3675 -> 3618 bytes .../com/crm/base/filter/TraceIdFilter.class | Bin 1891 -> 1883 bytes .../com/crm/base/mapper/CrmBaseMapper.class | Bin 518 -> 518 bytes .../com/crm/base/security/DataOwnership.class | Bin 1613 -> 1440 bytes .../crm/base/security/DataScopeHelper.class | Bin 4643 -> 4716 bytes .../crm/base/security/DataScopeLevel.class | Bin 2402 -> 2470 bytes .../crm/base/security/DataVisibility.class | Bin 3513 -> 3817 bytes .../base/security/DataVisibilityContext.class | Bin 1626 -> 1642 bytes .../com/crm/base/security/SecurityUtils.class | Bin 1945 -> 1957 bytes .../base/security/VisibilityScope$Kind.class | Bin 1431 -> 1423 bytes .../crm/base/security/VisibilityScope.class | Bin 2188 -> 2212 bytes .../com/crm/base/service/IBaseService.class | Bin 3321 -> 3321 bytes .../base/service/impl/BaseServiceImpl.class | Bin 1791 -> 1801 bytes .../com/crm/base/utils/AssertUtils.class | Bin 2213 -> 2213 bytes .../com/crm/base/utils/BeanCopyUtils.class | Bin 2627 -> 2629 bytes .../com/crm/base/utils/EnumUtils.class | Bin 1974 -> 2023 bytes .../com/crm/base/utils/ExcelUtil.class | Bin 4411 -> 4427 bytes .../com/crm/base/utils/PageConverter.class | Bin 2794 -> 2806 bytes .../com/crm/base/utils/ServletUtils.class | Bin 1967 -> 1967 bytes .../com/crm/base/utils/TreeUtils.class | Bin 4012 -> 4129 bytes ...m.crm.base.security.DataVisibilityTest.xml | 30 +- ...m.crm.base.security.DataVisibilityTest.txt | 2 +- .../base/security/DataVisibilityTest.class | Bin 8936 -> 8862 bytes mcp_call.py | 72 +++ 63 files changed, 1730 insertions(+), 454 deletions(-) delete mode 100644 crm-app/target/classes/com/crm/app/CrmAppApplication.class create mode 100644 mcp_call.py diff --git a/.qoder/repowiki/zh/content/API参考文档/API参考文档.md b/.qoder/repowiki/zh/content/API参考文档/API参考文档.md index f9bbc26..a352a8c 100644 --- a/.qoder/repowiki/zh/content/API参考文档/API参考文档.md +++ b/.qoder/repowiki/zh/content/API参考文档/API参考文档.md @@ -31,10 +31,21 @@ - [UploadSession.java](file://crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java) - [FileInfoDTO.java](file://crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java) - [FileDownloadDTO.java](file://crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java) +- [ThumbnailDTO.java](file://crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java) +- [ThumbnailPlaceholderService.java](file://crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) - [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) - [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) +## 更新摘要 +**变更内容** +- 新增缩略图获取API端点 `/api/file/thumbnail` 的详细文档 +- 添加缩略图生成功能的完整说明 +- 更新文件服务模块的API清单 +- 补充缩略图相关的错误处理和状态码说明 + ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) @@ -55,7 +66,7 @@ - crm-app:应用启动入口与全局配置 - crm-auth:认证鉴权与系统管理(用户、角色、菜单、部门) - crm-base:通用基础能力(统一响应、异常处理、安全上下文、分页等) -- crm-file:文件服务(分片上传、断点续传、预览、下载) +- crm-file:文件服务(分片上传、断点续传、预览、下载、缩略图生成) ```mermaid graph TB @@ -69,7 +80,7 @@ subgraph "基础能力" BASE["crm-base
通用组件/异常/结果封装"] end subgraph "文件服务" -FILE["crm-file
文件上传/下载/预览"] +FILE["crm-file
文件上传/下载/预览/缩略图"] end APP --> AUTH APP --> FILE @@ -92,8 +103,10 @@ FILE --> BASE - 安全上下文 LoginUser/AuthLoginUser:当前登录用户信息与权限范围 - TokenService:JWT签发、解析、刷新与黑名单管理 - JwtAuthenticationFilter:请求级JWT校验与上下文注入 -- FileApi/FileApiImpl:文件上传下载、分片、预览、清理等能力抽象与实现 +- FileApi/FileApiImpl:文件上传下载、分片、预览、清理、缩略图生成等能力抽象与实现 - FileInfoService:文件元数据持久化与查询 +- ThumbnailGenerationTask:异步缩略图生成任务 +- ThumbnailPlaceholderService:动态生成文件类型占位图 章节来源 - [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) @@ -105,9 +118,11 @@ FILE --> BASE - [FileApi.java](file://crm-file/src/main/java/com/crm/file/api/FileApi.java) - [FileApiImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java) - [FileInfoService.java](file://crm-file/src/main/java/com/crm/file/service/IFileInfoService.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailPlaceholderService.java](file://crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java) ## 架构总览 -整体调用链路:客户端通过HTTP访问Controller,Controller调用Service完成业务逻辑,Service通过Mapper访问数据库或调用外部存储(如MinIO)。认证流程由Spring Security过滤器链拦截,基于JWT进行鉴权;权限控制通过注解与数据权限拦截器实现。 +整体调用链路:客户端通过HTTP访问Controller,Controller调用Service完成业务逻辑,Service通过Mapper访问数据库或调用外部存储(如MinIO)。认证流程由Spring Security过滤器链拦截,基于JWT进行鉴权;权限控制通过注解与数据权限拦截器实现。缩略图功能采用异步生成+同步兜底的策略,确保用户体验。 ```mermaid sequenceDiagram @@ -115,22 +130,35 @@ participant Client as "客户端" participant AuthF as "JwtAuthenticationFilter" participant Controller as "Controller" participant Service as "Service" +participant Task as "ThumbnailGenerationTask" participant DB as "数据库/对象存储" Client->>AuthF : "携带Authorization : Bearer " AuthF->>AuthF : "校验签名/过期时间" AuthF-->>Client : "未通过则返回401" AuthF->>Controller : "通过则注入登录用户上下文" Controller->>Service : "执行业务方法" +alt 缩略图请求 +Service->>Task : "检查缩略图状态" +alt 需要生成 +Task->>DB : "异步生成缩略图" +Service-->>Client : "返回占位图或等待" +else 已有缩略图 +Service->>DB : "读取缩略图" +Service-->>Client : "返回缩略图" +end +else 其他操作 Service->>DB : "读写数据/文件元信息" DB-->>Service : "返回结果" Service-->>Controller : "业务结果" Controller-->>Client : "统一Result包装响应" +end ``` 图表来源 - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) ## 详细组件分析 @@ -241,6 +269,20 @@ JwtAuthenticationFilter --> TokenService : "校验" - 响应:HTML预览页面或重定向到在线预览地址 - 状态码:200成功;404文件不存在;403无权限 +- **新增:缩略图获取** + - 缩略图:GET /api/file/thumbnail + - 请求参数:fileId(必填,文件ID) + - 响应:二进制图片流(image/jpeg或image/png) + - 状态码:200成功(已就绪或占位图);202接受(正在生成中) + - 缓存控制:根据缩略图状态自动设置Cache-Control头 + - cacheable=true:max-age=86400(强缓存1天) + - cacheable=false:no-cache(不缓存) + - 功能特性: + - 智能状态检测:READY直接返回缩略图,PENDING触发异步生成 + - 同步兜底:首次请求时尝试同步生成,避免长时间等待 + - 占位图降级:UNSUPPORTED/FAILED/读取失败时返回动态占位图 + - 分布式锁:防止并发重复生成,提高性能 + - 文件元数据管理 - 列表:GET /file/list - 查询参数:page、size、keyword、type、ownerId等 @@ -283,6 +325,10 @@ Error --> End - [UploadSession.java](file://crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java) - [FileInfoDTO.java](file://crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java) - [FileDownloadDTO.java](file://crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java) +- [ThumbnailDTO.java](file://crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailPlaceholderService.java](file://crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) - [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) - [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) @@ -309,6 +355,7 @@ Error --> End - 控制器依赖服务接口,服务实现依赖数据访问与外部存储 - 认证过滤器依赖TokenService进行JWT校验 - 文件服务依赖MinIO配置与属性配置 +- 缩略图功能依赖ThumbnailGenerationTask进行异步生成 - 统一异常处理贯穿各模块 ```mermaid @@ -320,8 +367,10 @@ FC["FileController"] --> FApi["FileApi"] FApi --> FImpl["FileApiImpl"] FImpl --> FInfoSvc["IFileInfoService"] FInfoSvc --> FInfoImpl["FileInfoServiceImpl"] +FImpl --> TGT["ThumbnailGenerationTask"] Tok --> Sec["JwtAuthenticationFilter"] FImpl --> Minio["MinIO(外部存储)"] +TGT --> Minio ``` 图表来源 @@ -335,6 +384,7 @@ FImpl --> Minio["MinIO(外部存储)"] - [FileApiImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java) - [FileInfoService.java](file://crm-file/src/main/java/com/crm/file/service/IFileInfoService.java) - [FileInfoServiceImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) - [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) 章节来源 @@ -343,6 +393,7 @@ FImpl --> Minio["MinIO(外部存储)"] - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [FileApiImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) - [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) ## 性能考虑 @@ -356,6 +407,12 @@ FImpl --> Minio["MinIO(外部存储)"] - 分页查询 - 使用合理的page/size,避免大偏移量查询 - 对常用查询条件建立索引 +- **缩略图优化** + - 异步生成:上传完成后后台异步生成,不阻塞主流程 + - 分布式锁:防止并发重复生成,提高系统稳定性 + - 智能缓存:根据状态设置合适的缓存策略,减少重复请求 + - 占位图降级:生成失败或类型不支持时快速返回占位图 + - 同步兜底:首次请求时尝试同步生成,提升用户体验 ## 故障排查指南 - 401 未认证 @@ -370,15 +427,21 @@ FImpl --> Minio["MinIO(外部存储)"] - 调整服务端最大文件大小配置 - 400 参数校验失败 - 检查必填字段、格式与长度限制 +- **缩略图相关问题** + - 202 Accepted:缩略图正在生成中,稍后重试即可 + - 占位图显示:文件类型不支持或生成失败,属于正常降级 + - 缓存问题:检查Cache-Control头设置是否符合预期 + - 生成超时:检查缩略图生成任务的执行时间和重试配置 章节来源 - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) ## 结论 -本文档从架构到接口细节全面梳理了CRM后端的认证鉴权、系统管理与文件服务三大模块的API规范。通过统一的响应与异常处理、严格的权限控制与健壮的分片上传机制,为前端提供了稳定可靠的集成基础。建议在前端集成时严格遵循参数校验与错误处理规范,并结合测试用例验证关键流程。 +本文档从架构到接口细节全面梳理了CRM后端的认证鉴权、系统管理与文件服务三大模块的API规范。通过统一的响应与异常处理、严格的权限控制与健壮的分片上传机制,为前端提供了稳定可靠的集成基础。**新增的缩略图功能**进一步增强了文件处理能力,支持多种文件类型的缩略图生成,具备智能缓存控制和完善的降级机制。建议在前端集成时严格遵循参数校验与错误处理规范,并结合测试用例验证关键流程。 ## 附录 @@ -409,6 +472,11 @@ FImpl --> Minio["MinIO(外部存储)"] - 响应:二进制流 - GET /file/preview/{fileId} - 响应:HTML预览或重定向 + - **GET /api/file/thumbnail?fileId={fileId}** + - 请求参数:fileId(必填) + - 响应:二进制图片流(image/jpeg或image/png) + - 状态码:200成功;202接受(生成中) + - 缓存头:Cache-Control根据状态自动设置 - GET /file/list?page=1&size=10&keyword=... - 响应:Result~PageResult~FileInfoDTO~ @@ -429,6 +497,10 @@ FImpl --> Minio["MinIO(外部存储)"] - 分页查询 - page>=1,size<=100(可配置) - keyword:模糊匹配,长度<=100 +- **缩略图请求** + - fileId:必填,必须是有效的文件ID + - 支持的文件类型:图片、PDF、Office文档等(取决于渲染器配置) + - 缓存策略:自动生成,无需手动控制 ### 接口测试用例(示例) - 登录成功 @@ -443,6 +515,13 @@ FImpl --> Minio["MinIO(外部存储)"] - 权限不足 - 步骤:使用低权限token访问/system/role/* - 期望:code=403,message提示权限不足 +- **缩略图测试** + - 已就绪文件:GET /api/file/thumbnail?fileId={ready_file_id} + - 期望:200状态码,返回image/jpeg缩略图,Cache-Control: max-age=86400 + - 生成中文件:GET /api/file/thumbnail?fileId={pending_file_id} + - 期望:可能返回202状态码,Cache-Control: no-cache,稍后重试 + - 不支持类型:GET /api/file/thumbnail?fileId={unsupported_file_id} + - 期望:200状态码,返回image/png占位图,Cache-Control: no-cache ### 常见问题解答 - Q:如何获取并保存token? @@ -452,4 +531,10 @@ FImpl --> Minio["MinIO(外部存储)"] - Q:分片上传失败如何恢复? - A:记录已上传的分片序号,合并前校验MD5,缺失分片继续上传 - Q:如何限制文件类型与大小? - - A:在FileProperties中配置允许的类型与大小上限,并在前端做二次校验 \ No newline at end of file + - A:在FileProperties中配置允许的类型与大小上限,并在前端做二次校验 +- **Q:缩略图加载慢怎么办?** + - A:首次请求会触发异步生成,后续请求会命中缓存;如果持续慢,检查缩略图生成任务的执行情况和MinIO性能 +- **Q:为什么有些文件没有缩略图?** + - A:可能是文件类型不支持,或者缩略图生成失败;系统会自动返回占位图作为降级处理 +- **Q:如何优化缩略图的缓存效果?** + - A:系统已自动设置合适的Cache-Control头;对于已就绪的缩略图会设置1天的强缓存,对于生成中的文件使用no-cache \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/开发指南/开发规范.md b/.qoder/repowiki/zh/content/开发指南/开发规范.md index 8330d47..0d1e579 100644 --- a/.qoder/repowiki/zh/content/开发指南/开发规范.md +++ b/.qoder/repowiki/zh/content/开发指南/开发规范.md @@ -58,9 +58,25 @@ - [FileApiImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java) - [KkFileViewClient.java](file://crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java) - [OrphanChunkCleanupTask.java](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) +- [UserListDTO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java) +- [RoleDetailVO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java) +- [UserStatsVO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java) - [pom.xml](file://pom.xml) +## 更新摘要 +**变更内容** +- 更新了数据传输对象设计规范章节,增加了DictGroupVO和DictItemVO的实践案例 +- 完善了DTO设计模式说明,展示了如何避免直接暴露实体内部结构 +- 增强了BaseDTO设计原则的实际应用示例 +- 补充了VO与Entity分离的最佳实践指导 + ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) @@ -82,6 +98,7 @@ - crm-base:基础能力(通用实体、DTO/Param/Result、安全上下文、数据权限、异常、工具类、MyBatis Plus 配置) - crm-auth:认证授权与系统管理(用户、角色、菜单、部门、第三方登录等) - crm-file:文件服务(上传、分片、预览、清理任务等) +- crm-dict:数据字典服务(分组、项管理、引用计数等) ```mermaid graph TB @@ -91,14 +108,17 @@ end subgraph "业务域" AUTH["crm-auth
认证与系统管理"] FILE["crm-file
文件服务"] +DICT["crm-dict
数据字典服务"] end subgraph "基础能力" BASE["crm-base
通用实体/DTO/Param/Result
安全上下文/异常/工具/配置"] end APP --> AUTH APP --> FILE +APP --> DICT AUTH --> BASE FILE --> BASE +DICT --> BASE ``` **图示来源** @@ -194,7 +214,7 @@ AuthCtrl-->>Client : "登录成功响应" - 使用方式:所有持久化实体继承 BaseEntity;配合元数据填充处理器自动设置审计字段 - 复杂度:O(1) 字段赋值,填充发生在插入/更新前 - OwnedEntity - - 职责:在 BaseEntity 基础上增加“数据所有者”字段,用于数据隔离与权限过滤 + - 职责:在 BaseEntity 基础上增加"数据所有者"字段,用于数据隔离与权限过滤 - 使用方式:需要数据归属控制的实体继承 OwnedEntity;结合 DataOwnership/DataScope 注解与上下文进行行级过滤 - 注意:避免在批量操作中遗漏数据所有者,确保上下文正确设置 @@ -221,12 +241,17 @@ BaseEntity <|-- OwnedEntity : "继承" - [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) ### 数据传输对象设计(DTO、Param、Result) + +**更新** 数据传输对象设计规范得到实践验证,通过 DictGroupVO 和 DictItemVO 的重构展示了如何避免直接暴露实体内部结构,遵循了 BaseDTO 的设计原则。 + - BaseDTO - 用途:作为通用 DTO 基类,承载接口返回数据或跨层传输数据 - 建议:仅包含必要字段,避免直接暴露实体内部结构 + - 特性:支持 Entity 到 DTO 的自动转换,包含序列化支持和状态字段 - BaseParam - 用途:作为通用请求参数基类,承载入参校验与封装 - 建议:与表单/查询参数一一对应,必要时使用分组校验 + - 特性:内置分页参数、关键字搜索、排序功能 - Result/PageResult - 用途:统一 API 响应包装,包含状态码、消息、数据体;PageResult 扩展分页信息 - 建议:保持响应结构一致,便于前端解析与错误处理 @@ -234,37 +259,106 @@ BaseEntity <|-- OwnedEntity : "继承" - ResultCodeEnum:统一错误码定义,避免硬编码 - 业务枚举:集中定义于 domain/enums 包下,保证一致性 +#### 实践案例:DictGroupVO 和 DictItemVO + +DictGroupVO 和 DictItemVO 是数据传输对象设计规范的优秀实践案例: + +**DictGroupVO** - 字典分组视图对象 +- 独立字段设计:不继承实体,只暴露前端需要的业务字段 +- 排除敏感字段:不包含审计字段(creatorId/updaterId/updateTime/deleted)和软删内部字段(deleteKey) +- 业务增强字段:包含 itemCount(分组下未删除的字典项数量) +- 适用场景:分页列表展示 + +**DictItemVO** - 字典项视图对象 +- 独立字段设计:不继承实体,只暴露前端需要的业务字段 +- 排除敏感字段:不包含审计字段和软删内部字段 +- 业务增强字段:包含 groupName(所属分组名称)、isDefault(是否为分组默认项)、referenced(是否被业务引用)、effectiveSelectable(是否有效可选) +- 实时数据:referenced 字段读取实时引用计数,不进入缓存 +- 适用场景:分页列表展示 + ```mermaid classDiagram -class BaseDTO { -+通用DTO字段 +class BaseEntity { ++id : Long ++creatorId : String ++createTime : LocalDateTime ++updaterId : String ++updateTime : LocalDateTime ++deleted : Boolean } -class BaseParam { -+通用参数字段 -+校验规则 +class DictGroup { ++name : String ++code : String ++sortNo : Integer ++status : Integer ++description : String ++builtin : Boolean ++deleteKey : Long } -class Result { -+状态码 -+消息 -+数据体 +class DictItem { ++groupId : Long ++name : String ++code : String ++value : String ++sortNo : Integer ++status : Integer ++description : String ++builtin : Boolean ++deleteKey : Long } -class PageResult { -+分页信息 -+数据列表 +class DictGroupVO { ++id : Long ++name : String ++code : String ++sortNo : Integer ++status : Integer ++description : String ++builtin : Boolean ++createTime : LocalDateTime ++itemCount : Long } -class ResultCodeEnum { -+错误码定义 +class DictItemVO { ++id : Long ++groupId : Long ++name : String ++code : String ++value : String ++sortNo : Integer ++status : Integer ++description : String ++builtin : Boolean ++createTime : LocalDateTime ++groupName : String ++isDefault : Boolean ++referenced : Boolean ++effectiveSelectable : Boolean } -Result --> ResultCodeEnum : "引用" -PageResult --> Result : "扩展" +BaseEntity <|-- DictGroup : "继承" +BaseEntity <|-- DictItem : "继承" +DictGroup --> DictGroupVO : "转换为" +DictItem --> DictItemVO : "转换为" ``` **图示来源** -- [BaseDTO.java](file://crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java) -- [BaseParam.java](file://crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java) -- [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) -- [PageResult.java](file://crm-base/src/main/java/com/crm/base/domain/result/PageResult.java) -- [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java) +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) + +#### DTO 转换机制 + +服务层使用 toDTO 方法进行实体到 DTO 的转换: + +```java +// DictGroupServiceImpl 中的使用示例 +PageResult result = new PageResult<>(page) + .convert(g -> g.toDTO(DictGroupVO::new)); + +// DictItemServiceImpl 中的使用示例 +PageResult result = new PageResult<>(page) + .convert(i -> i.toDTO(DictItemVO::new)); +``` **章节来源** - [BaseDTO.java](file://crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java) @@ -272,6 +366,10 @@ PageResult --> Result : "扩展" - [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) - [PageResult.java](file://crm-base/src/main/java/com/crm/base/domain/result/PageResult.java) - [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) ### 认证与鉴权流程 - 登录流程 @@ -389,17 +487,19 @@ ExecQuery --> Return["返回受控结果"] - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) ## 依赖分析 -模块间依赖关系清晰,遵循“上层依赖下层”的原则: -- crm-app 依赖 crm-auth 与 crm-file -- crm-auth 与 crm-file 均依赖 crm-base +模块间依赖关系清晰,遵循"上层依赖下层"的原则: +- crm-app 依赖 crm-auth、crm-file 与 crm-dict +- crm-auth、crm-file 与 crm-dict 均依赖 crm-base - 各模块内按 controller -> service -> mapper 分层依赖 ```mermaid graph LR APP["crm-app"] --> AUTH["crm-auth"] APP --> FILE["crm-file"] +APP --> DICT["crm-dict"] AUTH --> BASE["crm-base"] FILE --> BASE +DICT --> BASE ``` **图示来源** @@ -414,8 +514,7 @@ FILE --> BASE - 数据权限:尽量将数据权限条件下推到 SQL 层,减少内存过滤 - 缓存与限流:对热点数据(如部门树、菜单)考虑引入缓存;对外部调用(如第三方登录、文件预览)增加超时与重试策略 - 分页查询:合理使用分页,避免一次性加载大量数据 - -[本节为通用指导,不直接分析具体文件] +- DTO 优化:通过独立的 VO 对象减少数据传输量,避免暴露不必要的实体字段 ## 故障排查指南 - 全局异常处理 @@ -438,7 +537,7 @@ FILE --> BASE - [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java) ## 结论 -本规范从代码风格、命名约定、包结构到实体与 DTO 设计、异常与日志、Git 工作流与代码审查,提供了完整的开发标准。遵循这些规范有助于提升代码质量、降低协作成本,并为后续扩展与维护奠定基础。 +本规范从代码风格、命名约定、包结构到实体与 DTO 设计、异常与日志、Git 工作流与代码审查,提供了完整的开发标准。通过 DictGroupVO 和 DictItemVO 的实践案例,进一步验证了数据传输对象设计规范的有效性。遵循这些规范有助于提升代码质量、降低协作成本,并为后续扩展与维护奠定基础。 ## 附录 @@ -471,10 +570,28 @@ FILE --> BASE - 字段注释完整,便于文档生成与理解 ### DTO、Param、Result 设计模式 -- DTO:面向接口输出,精简字段,避免泄露内部结构 -- Param:面向输入,严格校验,必要时使用分组校验 -- Result/PageResult:统一响应格式,便于前端解析 -- 枚举:集中定义,避免魔法值 + +**更新** 数据传输对象设计模式的实践验证: + +- **DTO 设计原则** + - 面向接口输出,精简字段,避免泄露内部结构 + - 独立字段设计,不直接继承实体,按需组合业务字段 + - 排除敏感字段(审计字段、软删字段等) + - 支持 Entity 到 DTO 的自动转换 + +- **实践案例** + - DictGroupVO:仅包含前端需要的分组展示字段和业务增强字段 + - DictItemVO:包含字典项基本信息和运行时计算的业务字段 + - UserListDTO:反范式组装,后端批量填充关联数据 + +- **Param 设计原则** + - 面向输入,严格校验,必要时使用分组校验 + - 继承 BaseParam 获得通用分页和搜索功能 + +- **Result 设计原则** + - 统一响应格式,便于前端解析 + - PageResult 扩展分页信息 + - 枚举:集中定义,避免魔法值 ### 异常处理规范 - 自定义异常分类:业务异常、参数异常、权限异常、资源不存在异常 @@ -494,7 +611,7 @@ FILE --> BASE ### Git 提交信息规范 - 格式:(): - type:feat、fix、docs、style、refactor、test、chore -- scope:模块或功能范围(如 auth、file、base) +- scope:模块或功能范围(如 auth、file、base、dict) - subject:简洁明了,不超过 50 字符 ### 分支管理策略 diff --git a/.qoder/repowiki/zh/content/数据模型/数据模型.md b/.qoder/repowiki/zh/content/数据模型/数据模型.md index b8b1353..ce1badc 100644 --- a/.qoder/repowiki/zh/content/数据模型/数据模型.md +++ b/.qoder/repowiki/zh/content/数据模型/数据模型.md @@ -1,3 +1,5 @@ +现在我已经收集了足够的信息来更新数据模型文档。基于分析,FileInfo实体确实新增了thumbnail_status和thumbnail_retry_count两个字段,用于跟踪缩略图生成状态和重试次数。让我更新文档: + # 数据模型 @@ -11,6 +13,11 @@ - [SysUserDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java) - [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java) - [FileInfo.java](file://crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) +- [ThumbnailDTO.java](file://crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java) +- [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) - [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) - [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java) - [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java) @@ -33,12 +40,11 @@ ## 更新摘要 **变更内容** -- 增强了角色管理系统的验证规则和约束条件 -- 新增数据范围限制(1-4范围),排除自定义数据范围(CUSTOM=5) -- 实现内置角色保护机制,防止删除和修改内置角色编码 -- 强化角色编码唯一性校验,支持跨ID的唯一性检查 -- 新增VALID_DATA_SCOPE_VALUES集合用于API操作的数据范围验证 -- 完善角色管理的错误码定义和业务异常处理 +- FileInfo实体新增缩略图状态跟踪机制,包含thumbnail_status和thumbnail_retry_count两个新字段 +- 实现完整的缩略图生命周期管理,支持PENDING、READY、FAILED、UNSUPPORTED四种状态 +- 添加缩略图生成失败重试机制,支持配置化重试次数限制 +- 新增缩略图异步生成任务和定时重试任务 +- 完善文件元数据结构,增强文件预览和缩略图功能 ## 目录 1. [简介](#简介) @@ -55,13 +61,13 @@ ## 简介 本文件为 CRM 后端的数据模型文档,面向数据库管理员与后端开发者。内容覆盖用户、角色、菜单、部门、身份认证、文件等核心实体的字段定义、数据类型、约束与业务含义;提供实体关系图(ER)与类图;说明主键策略、外键关联、索引设计、数据完整性约束;给出数据字典、枚举值定义、默认值设置;并补充数据迁移策略、版本兼容性与备份恢复方案。 -**更新** 本次更新重点反映了角色管理系统的增强功能,包括新的验证规则、数据范围限制、内置角色保护机制和角色编码唯一性强制校验。 +**更新** 本次更新重点反映了文件模块的缩略图功能增强,包括FileInfo实体的新字段、缩略图状态机、重试机制和异步处理流程。 ## 项目结构 本项目采用多模块架构: - crm-base:基础能力(通用实体、配置、工具、异常、分页、结果封装等) - crm-auth:认证授权与系统管理(用户、角色、菜单、部门、权限、数据范围等) -- crm-file:文件服务(上传、分片、预览、清理任务等) +- crm-file:文件服务(上传、分片、预览、清理任务、缩略图等) - crm-app:应用启动入口与全局配置 ```mermaid @@ -73,7 +79,7 @@ subgraph "认证授权" auth["crm-auth
用户/角色/菜单/部门/权限"] end subgraph "文件服务" -file["crm-file
文件元数据/分片/预览"] +file["crm-file
文件元数据/分片/预览/缩略图"] end subgraph "应用" app["crm-app
启动与配置"] @@ -187,13 +193,14 @@ datetime update_time } FILE_INFO { bigint id PK -string bucket +string original_name string object_key -string file_name long file_size -string mime_type -string md5 -int status +string content_type +string biz_domain +string file_hash +string thumbnail_status +int thumbnail_retry_count bigint create_by bigint update_by datetime create_time @@ -265,7 +272,7 @@ SYS_DEPT ||--o{ SYS_USER_DEPT : "包含" - [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java) - [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java) -### 角色实体(SysRole)- **已更新** +### 角色实体(SysRole) - 字段与类型 - 主键:id(bigint,雪花ID) - 角色名称:roleName(varchar(50),非空) @@ -283,13 +290,6 @@ SYS_DEPT ||--o{ SYS_USER_DEPT : "包含" - 权限集合的载体,与菜单进行多对多关联 - 支持数据范围控制(本人、本部门、本部门及子部门、全部数据) - 内置角色保护机制,防止误删和编码修改 -- **新增验证规则** - - dataScope必须在1-4范围内,禁止使用CUSTOM(5) - - 内置角色(builtin=true)禁止删除和修改roleCode - - 创建角色时不允许设置builtin=true - - roleCode必须全局唯一(跨ID检查) - -**更新** 角色实体新增了builtin字段和增强的验证规则,包括数据范围限制和内置角色保护机制。 **章节来源** - [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java) @@ -377,26 +377,43 @@ SYS_DEPT ||--o{ SYS_USER_DEPT : "包含" - [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java) - [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java) -### 文件元数据(FileInfo) +### 文件元数据(FileInfo)- **已更新** - 字段与类型 - 主键:id(bigint) - - 存储桶:bucket(varchar) - - 对象键:objectKey(varchar,唯一) - - 文件名:fileName(varchar) - - 大小:fileSize(bigint) - - MIME类型:mimeType(varchar) - - 哈希:md5(varchar) - - 状态:status(int,参考 StatusEnum) + - 原始文件名:originalName(varchar(255)) + - 对象键:objectKey(varchar(500),唯一) + - 文件大小:fileSize(bigint) + - MIME类型:contentType(varchar(255)) + - 业务域:bizDomain(varchar(64)) + - 文件哈希:fileHash(varchar(64),秒传占位字段) + - **缩略图状态:thumbnailStatus(varchar(16),默认'PENDING')** + - **缩略图重试计数:thumbnailRetryCount(int,默认0)** - 审计字段:createBy、updateBy、createTime、updateTime - 约束与索引 - 主键:id - 唯一索引:objectKey - - 建议索引:md5(去重校验)、status(过滤查询) + - 建议索引:md5(去重校验)、status(过滤查询)、biz_domain(业务域查询) - 业务含义 - 记录文件在对象存储中的元数据,支撑上传、下载、预览与生命周期管理 + - **新增缩略图状态跟踪机制,支持异步生成和失败重试** +- **缩略图状态机** + - PENDING:待生成(初始状态) + - READY:已生成成功 + - FAILED:重试耗尽后失败 + - UNSUPPORTED:文件类型不支持缩略图生成 +- **重试机制** + - 支持配置化重试次数限制(默认3次) + - 失败时自动递增重试计数 + - 达到重试上限后标记为FAILED + - 定时任务可重置FAILED状态重新尝试 + +**更新** FileInfo实体新增了thumbnail_status和thumbnail_retry_count两个字段,实现了完整的缩略图生命周期管理和失败重试机制。 **章节来源** - [FileInfo.java](file://crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) ### 类图(实体与基类关系) ```mermaid @@ -459,13 +476,14 @@ class AuthIdentity { } class FileInfo { +long id -+string bucket ++string originalName +string objectKey -+string fileName +long fileSize -+string mimeType -+string md5 -+int status ++string contentType ++string bizDomain ++string fileHash ++string thumbnailStatus ++int thumbnailRetryCount } class SysUserRole { +long id @@ -517,10 +535,11 @@ OwnedEntity <|-- FileInfo - 数据完整性 - 逻辑删除由 CrmSqlInjector 启用,避免物理删除导致关联断裂 - 审计字段由 MetaObjectFillHandler 统一填充,确保一致性 -- **角色管理验证依赖** - - VALID_DATA_SCOPE_VALUES集合用于数据范围验证 - - 内置角色保护机制确保系统稳定性 - - 角色编码唯一性校验防止数据冲突 +- **缩略图状态管理依赖** + - FileConstants定义缩略图状态常量(PENDING、READY、FAILED、UNSUPPORTED) + - ThumbnailGenerationTask负责异步生成和状态转换 + - ThumbnailRetryTask定时扫描FAILED状态并重试 + - FileProperties配置缩略图生成参数和重试策略 ```mermaid graph LR @@ -531,8 +550,9 @@ AuthUser -- "N:M" --> SysDept SysMenu -- "自引用" --> SysMenu SysDept -- "自引用" --> SysDept FileInfo -- "独立" --> "*" -SysRoleServiceImpl -- "验证规则" --> DataScopeEnum -SysRoleServiceImpl -- "内置保护" --> SysRole +ThumbnailGenerationTask -- "状态管理" --> FileInfo +ThumbnailRetryTask -- "定时重试" --> FileInfo +FileConstants -- "状态常量" --> FileInfo ``` **图表来源** @@ -542,8 +562,9 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java) - [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java) - [FileInfo.java](file://crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java) -- [SysRoleServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java) -- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) **章节来源** - [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java) @@ -558,12 +579,12 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - 大文件元数据(FileInfo)建议按状态分区或归档,保持热数据表轻量 - 批量操作使用 InsertBatchOnDuplicateKeyUpdate 减少往返次数 - 合理索引:唯一索引优先,普通索引按需添加,避免过度索引影响写入 -- **角色管理性能优化** - - 角色编码唯一性检查使用LambdaQueryWrapper优化查询性能 - - 祖先节点补全采用批量查询+内存映射,避免逐节点查库 - - 事务保护确保级联操作的原子性 - -[本节为通用指导,不直接分析具体文件] +- **缩略图性能优化** + - 异步生成避免阻塞上传链路 + - Redis分布式锁防止重复生成 + - 失败重试机制提高成功率 + - 定时任务批量处理失败记录 + - 配置化超时和重试参数适应不同场景 ## 故障排查指南 - ID重复或生成失败 @@ -576,11 +597,11 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - 检查 CrmSqlInjector 是否启用,@TableLogic 注解是否正确 - 唯一约束冲突 - 核对业务唯一字段(username、roleCode、menuCode、deptCode、objectKey)的输入校验 -- **角色管理相关故障** - - 数据范围验证失败:检查dataScope是否在1-4范围内 - - 内置角色保护错误:确认角色builtin标志位设置 - - 角色编码重复:检查是否存在相同roleCode的其他角色 - - 级联删除失败:确认事务配置和关联表完整性 +- **缩略图相关故障** + - 状态卡住:检查ThumbnailGenerationTask执行日志和Redis锁状态 + - 重试不生效:确认retryLimit配置和ThumbnailRetryTask调度 + - 生成失败:查看渲染引擎(LibreOffice等)可用性和配置 + - 内存溢出:调整缩略图尺寸配置和JVM堆大小 **章节来源** - [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java) @@ -588,13 +609,13 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) - [CrmSqlInjector.java](file://crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java) - [SysRoleServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) ## 结论 本数据模型以雪花ID为主键,结合 MyBatis-Plus 的自动填充与SQL增强,实现了统一的审计、逻辑删除与批量操作能力。用户、角色、菜单、部门、身份与文件等核心实体通过明确的关联表与索引设计,满足权限控制、组织架构与文件管理的业务需求。 -**更新** 角色管理系统的增强功能显著提升了数据完整性和系统安全性,包括严格的数据范围验证、内置角色保护机制和角色编码唯一性强制校验。这些改进确保了系统在面对恶意操作和误操作时的鲁棒性,为后续的业务发展奠定了坚实的基础。建议在后续演进中持续完善索引与缓存策略,保障性能与可维护性。 - -[本节为总结性内容,不直接分析具体文件] +**更新** 文件模块的缩略图功能显著增强了系统的文件处理能力,包括完整的状态机管理、异步处理机制和失败重试策略。这些改进确保了文件预览功能的稳定性和可靠性,为用户提供了更好的体验。建议在后续演进中持续监控缩略图生成性能和资源使用情况,优化配置参数以适应不同的业务场景。 ## 附录 @@ -607,7 +628,7 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - phone:手机,可选唯一 - status:状态(参考 StatusEnum) - 审计字段:create_by、update_by、create_time、update_time -- 角色(SysRole)- **已更新** +- 角色(SysRole) - id:主键,雪花ID - roleName:角色名称,非空 - roleCode:角色编码,唯一,非空 @@ -645,18 +666,19 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - openId、unionId:第三方标识 - status:状态(参考 StatusEnum) - 审计字段:同上 -- 文件(FileInfo) +- 文件(FileInfo)- **已更新** - id:主键,雪花ID - - bucket:存储桶 + - originalName:原始文件名 - objectKey:对象键,唯一 - - fileName:文件名 - fileSize:文件大小 - - mimeType:MIME类型 - - md5:文件哈希 - - status:状态(参考 StatusEnum) + - contentType:MIME类型 + - bizDomain:业务域 + - fileHash:文件哈希(秒传占位) + - **thumbnailStatus:缩略图状态(PENDING/READY/FAILED/UNSUPPORTED),默认PENDING** + - **thumbnailRetryCount:缩略图重试计数,默认0** - 审计字段:同上 -**更新** 角色实体新增了builtin字段和数据范围验证规则。 +**更新** FileInfo实体新增了缩略图状态和重试计数字段,支持完整的缩略图生命周期管理。 **章节来源** - [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java) @@ -671,33 +693,31 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - HasValueEnum:通用布尔值(是/否) - MenuTypeEnum:菜单类型(如目录、菜单、按钮) - IdentityTypeEnum:身份类型(如手机号、邮箱、第三方账号) -- **DataScopeEnum**:数据范围枚举 - - SELF(1):仅本人 - - DEPT(2):本部门 - - DEPT_AND_CHILD(3):本部门及子部门 - - ALL(4):全部数据 - - CUSTOM(5):自定义(API操作禁止使用) +- **缩略图状态常量(FileConstants)** + - THUMBNAIL_STATUS_PENDING = "PENDING":待生成 + - THUMBNAIL_STATUS_READY = "READY":已生成 + - THUMBNAIL_STATUS_FAILED = "FAILED":重试耗尽 + - THUMBNAIL_STATUS_UNSUPPORTED = "UNSUPPORTED":不支持 -**更新** 数据范围枚举新增了CUSTOM选项,但在API操作中通过VALID_DATA_SCOPE_VALUES集合排除。 +**更新** 新增了缩略图状态常量定义,完善了文件模块的状态管理。 **章节来源** - [StatusEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java) - [HasValueEnum.java](file://crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java) - [MenuTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java) - [IdentityTypeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java) -- [DataScopeEnum.java](file://crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) ### 默认值与填充策略 - 主键:雪花ID(CustomIdGenerator + SnowflakeIdWorker) - 审计字段:create_by、update_by、create_time、update_time(MetaObjectFillHandler) - 逻辑删除:enabled(CrmSqlInjector) - 批量插入去重:InsertBatchOnDuplicateKeyUpdate -- **角色默认值** - - dataScope:默认1(仅本人) - - sort:默认0 - - builtin:默认false +- **缩略图默认值** + - thumbnailStatus:默认'PENDING' + - thumbnailRetryCount:默认0 -**更新** 角色实体新增了builtin字段的默认值策略。 +**更新** 新增了缩略图字段的默认值策略,确保数据一致性。 **章节来源** - [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java) @@ -705,38 +725,57 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) - [CrmSqlInjector.java](file://crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java) - [InsertBatchOnDuplicateKeyUpdate.java](file://crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java) -- [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java) +- [FileInfo.java](file://crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java) -### 角色管理验证规则 - **新增章节** -- **数据范围验证** - - 允许的dataScope值:1-4(SELF、DEPT、DEPT_AND_CHILD、ALL) - - 禁止的值:5(CUSTOM) - - 验证方式:VALID_DATA_SCOPE_VALUES集合检查 -- **内置角色保护** - - 禁止通过接口创建builtin=true的角色 - - 禁止删除builtin=true的角色 - - 禁止修改builtin=true角色的roleCode -- **角色编码唯一性** - - 全局唯一性检查(跨ID) - - 保存时查询数据库验证 -- **参数校验** - - roleName和roleCode非空校验 - - dataScope范围校验 - - 内置角色标志位校验 +### 缩略图状态机 - **新增章节** +- **状态转换规则** + - PENDING → READY:缩略图生成成功 + - PENDING → FAILED:重试次数耗尽 + - PENDING → UNSUPPORTED:文件类型不支持 + - FAILED → PENDING:定时任务重置重试 +- **状态初始化** + - 上传时根据文件类型判断:支持的类型设为PENDING,不支持的设为UNSUPPORTED + - 通过ThumbnailGenerationTask.assignInitialStatus()方法设置 +- **状态查询优化** + - 支持按状态过滤查询 + - 建议为thumbnail_status字段建立索引 +- **并发控制** + - 使用Redis分布式锁防止重复生成 + - 锁TTL大于最慢渲染时间 **章节来源** -- [SysRoleServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java) -- [AuthConstants.java](file://crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) + +### 缩略图重试机制 - **新增章节** +- **重试策略** + - 配置化重试次数(默认3次) + - 每次失败递增retry_count + - 达到上限后标记FAILED +- **自动重试** + - 定时任务每天凌晨4点扫描FAILED记录 + - 重置状态为PENDING并重试计数归零 + - 重新提交异步生成任务 +- **错误处理** + - 渲染异常捕获并记录日志 + - 不影响其他文件的缩略图生成 + - 任务自身异常不影响下次执行 + +**章节来源** +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) +- [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) ### 数据迁移策略与版本兼容性 - 使用数据库迁移工具(如 Flyway/Liquibase)管理DDL变更,确保环境一致性 - 新增字段时提供默认值与向后兼容的查询逻辑 - 修改唯一约束前评估历史数据,必要时先清洗再变更 - 灰度发布:先在测试环境验证,再逐步上线生产 -- **角色管理迁移注意事项** - - 新增builtin字段需设置默认值false - - 现有角色数据无需特殊处理 - - API端点迁移从SystemController到RoleController +- **缩略图功能迁移注意事项** + - 新增thumbnail_status字段需设置默认值'PENDING' + - 新增thumbnail_retry_count字段需设置默认值0 + - 现有文件数据无需特殊处理,首次访问时触发缩略图生成 + - 建议为新字段建立适当的索引以提升查询性能 [本节为通用指导,不直接分析具体文件] @@ -745,9 +784,27 @@ SysRoleServiceImpl -- "内置保护" --> SysRole - 关键表(用户、角色、菜单、部门、文件元数据)提高备份频率 - 恢复演练:定期执行恢复演练,验证备份有效性 - 灾难恢复:制定RTO/RPO目标,明确恢复流程与责任人 -- **角色管理数据保护** - - 重点关注sys_role表的builtin字段数据 - - 角色权限分配数据(sys_role_menu)的完整性保护 - - 用户角色关联数据(sys_user_role)的一致性维护 +- **缩略图数据保护** + - 重点关注crn_file_info表的缩略图状态字段 + - MinIO中thumbnails目录的缩略图文件备份 + - Redis中缩略图分布式锁的临时数据无需持久化 + +[本节为通用指导,不直接分析具体文件] -[本节为通用指导,不直接分析具体文件] \ No newline at end of file +### 缩略图配置参数 - **新增章节** +- **基本配置** + - width:缩略图宽度(默认200px) + - maxHeight:最大高度(默认400px) + - format:输出格式(默认jpeg) +- **同步等待配置** + - syncWaitTimeout:同步兜底等待超时(默认10秒) + - lockTtl:分布式锁TTL(默认150秒) +- **重试配置** + - retryLimit:最大重试次数(默认3次) + - retryCron:失败重试cron表达式(默认每天凌晨4点) +- **渲染引擎配置** + - libreofficePath:LibreOffice可执行文件路径 + - officeConvertTimeout:单次转换超时(默认120秒) + +**章节来源** +- [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/架构设计/安全架构设计/安全架构设计.md b/.qoder/repowiki/zh/content/架构设计/安全架构设计/安全架构设计.md index 8f69b1d..377f6bb 100644 --- a/.qoder/repowiki/zh/content/架构设计/安全架构设计/安全架构设计.md +++ b/.qoder/repowiki/zh/content/架构设计/安全架构设计/安全架构设计.md @@ -18,8 +18,19 @@ - [AuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java) - [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) - [Application.yml](file://crm-app/src/main/resources/application.yml) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java)
+## 更新摘要 +**变更内容** +- 新增审计字段防篡改机制说明,强调客户端传入的审计字段必须显式清空 +- 增强字典模块数据完整性保护,防止恶意用户伪造创建时间、创建人等审计信息 +- 完善MyBatis-Plus自动填充机制与安全边界说明 +- 补充服务层审计字段处理的最佳实践 + ## 目录 1. [引言](#引言) 2. [项目结构](#项目结构) @@ -38,12 +49,14 @@ - RBAC权限模型与数据权限控制(DataScope) - SecurityConfig配置类、JwtAuthenticationFilter过滤器链、TokenService令牌管理服务 - 第三方登录集成(钉钉)与密码加密策略、会话管理 +- **新增:审计字段防篡改机制与数据完整性保护** - 关键流程图与权限判断逻辑图 ## 项目结构 安全相关代码主要分布在以下模块: - crm-auth:认证授权、RBAC、数据权限拦截器、第三方登录客户端 -- crm-base:通用安全上下文、数据可见性工具、注解定义 +- crm-base:通用安全上下文、数据可见性工具、注解定义、审计字段自动填充 +- crm-dict:字典管理模块,包含增强的审计字段保护机制 - crm-app:应用入口与全局配置(如application.yml) ```mermaid @@ -68,6 +81,13 @@ ANNO_DSCOPE["DataScope注解"] DSCOPE_CTX["DataVisibilityContext"] DSCOPE_HELPER["DataScopeHelper"] LOGIN_USER["LoginUser"] +META_FILL["MetaObjectFillHandler"] +BASE_ENTITY["BaseEntity"] +end +subgraph "字典模块(crm-dict)" +DICT_GROUP_SVC["DictGroupServiceImpl"] +DICT_ITEM_SVC["DictItemServiceImpl"] +AUDIT_PROTECT["审计字段保护机制"] end APP --> SEC_CFG APP --> YML @@ -78,9 +98,12 @@ DSCOPE_INT --> DSCOPE_CTX DSCOPE_INT --> DSCOPE_HELPER DING --> TP_FACTORY AUTH_SVC --> DING +META_FILL --> BASE_ENTITY +DICT_GROUP_SVC --> AUDIT_PROTECT +DICT_ITEM_SVC --> AUDIT_PROTECT ``` -图表来源 +**图表来源** - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) @@ -96,22 +119,10 @@ AUTH_SVC --> DING - [AuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java) - [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) - [Application.yml](file://crm-app/src/main/resources/application.yml) - -章节来源 -- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) -- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) -- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) -- [DataScope.java](file://crm-base/src/main/java/com/crm/base/annotation/DataScope.java) -- [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) -- [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java) -- [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) -- [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) -- [LoginUser.java](file://crm-base/src/main/java/com/crm/base/security/LoginUser.java) -- [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java) -- [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java) -- [AuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java) -- [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) -- [Application.yml](file://crm-app/src/main/resources/application.yml) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) ## 核心组件 - SecurityConfig:统一安全配置,注册过滤器链、跨域、白名单、鉴权规则等 @@ -120,8 +131,10 @@ AUTH_SVC --> DING - DataScope注解与拦截器:在SQL层面注入数据范围条件,实现行级数据权限 - 第三方登录客户端:以钉钉为例,封装OAuth流程与用户信息映射 - LoginUser与上下文:承载当前登录用户、角色、权限、数据可见范围 +- **新增:MetaObjectFillHandler审计字段自动填充处理器** +- **新增:BaseEntity实体基类,定义标准审计字段结构** -章节来源 +**章节来源** - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) @@ -130,9 +143,11 @@ AUTH_SVC --> DING - [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java) - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [LoginUser.java](file://crm-base/src/main/java/com/crm/base/security/LoginUser.java) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) ## 架构总览 -下图展示认证授权主流程与数据权限拦截的关键交互。 +下图展示认证授权主流程与数据权限拦截的关键交互,以及新增的审计字段保护机制。 ```mermaid sequenceDiagram @@ -142,6 +157,7 @@ participant Filter as "JwtAuthenticationFilter" participant TokenSvc as "TokenService" participant SecCfg as "SecurityConfig" participant DScopeInt as "DataScopeInterceptor" +participant MetaFill as "MetaObjectFillHandler" participant DB as "数据库" Client->>AuthCtl : "POST /auth/login (用户名/密码或第三方code)" AuthCtl->>TokenSvc : "签发JWT(含用户、角色、权限、数据范围)" @@ -154,15 +170,20 @@ Filter->>SecCfg : "按白名单/路径规则放行或继续鉴权" SecCfg-->>Filter : "决定是否进入业务方法" Filter->>DScopeInt : "进入数据权限拦截" DScopeInt->>DB : "根据DataScope注解注入WHERE条件" +Note over MetaFill,DB : 审计字段保护机制
客户端传入的createTime/creatorId/updaterId被显式清空 +Client->>AuthCtl : "保存字典分组/项" +AuthCtl->>MetaFill : "调用save操作" +MetaFill->>DB : "仅填充null值的审计字段" DB-->>Client : "返回受限数据集" ``` -图表来源 +**图表来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) ## 详细组件分析 @@ -188,13 +209,13 @@ Allow --> End Deny --> End ``` -图表来源 +**图表来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) -章节来源 +**章节来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) @@ -234,20 +255,50 @@ DataScopeInterceptor --> DataScopeHelper : "生成条件" DataScopeInterceptor --> DataScopeTables : "表字段映射" ``` -图表来源 +**图表来源** - [DataScope.java](file://crm-base/src/main/java/com/crm/base/annotation/DataScope.java) - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) - [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java) - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) -章节来源 +**章节来源** - [DataScope.java](file://crm-base/src/main/java/com/crm/base/annotation/DataScope.java) - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) - [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java) - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) +### 审计字段防篡改机制 +**新增功能**:为防止客户端伪造审计信息,系统在字典模块中实现了严格的审计字段保护机制。 + +- **审计字段定义**:BaseEntity定义了标准的审计字段(createTime、createTime、updaterId、updateTime) +- **自动填充机制**:MetaObjectFillHandler使用strictInsertFill和strictUpdateFill,仅填充null值 +- **客户端输入防护**:在DictGroupServiceImpl和DictItemServiceImpl中,显式将客户端传入的审计字段设置为null +- **安全边界**:确保只有服务端能够设置审计信息,防止恶意用户伪造创建时间、创建人等敏感信息 + +```mermaid +flowchart TD +ClientReq["客户端请求"] --> ClearAudit["清空审计字段
createTime=null
creatorId=null
updaterId=null
updateTime=null"] +ClearAudit --> ServiceLayer["服务层处理"] +ServiceLayer --> MyBatisFill["MyBatis-Plus自动填充"] +MyBatisFill --> StrictFill["strictInsertFill/strictUpdateFill
仅填充null值"] +StrictFill --> ServerAudit["服务端设置审计信息
createTime=当前时间
creatorId=当前用户ID"] +ServerAudit --> Database["持久化到数据库"] +``` + +**图表来源** +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) + +**章节来源** +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) + ### 第三方登录集成(钉钉) - DingTalkAuthClient封装钉钉OAuth2流程,获取access_token与用户信息 - ThirdPartyAuthClientFactory统一管理第三方登录客户端实例 @@ -274,7 +325,7 @@ Token-->>AuthCtl : "token" AuthCtl-->>Client : "响应{token}" ``` -图表来源 +**图表来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java) - [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java) @@ -283,7 +334,7 @@ AuthCtl-->>Client : "响应{token}" - [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) -章节来源 +**章节来源** - [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java) - [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java) - [ThirdPartyUserInfo.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java) @@ -296,16 +347,19 @@ AuthCtl-->>Client : "响应{token}" - 密码加密:建议采用强哈希算法(如BCrypt),避免明文存储;在用户注册/修改密码时进行加盐哈希 - 会话管理:无状态JWT为主,必要时结合Redis记录黑名单或刷新令牌;登出时将token加入黑名单或失效缓存 - 安全配置:通过SecurityConfig启用CSRF防护、CORS策略、最小化暴露端点 +- **新增:审计字段安全**:通过严格的服务端审计字段控制,确保数据完整性和可追溯性 -章节来源 +**章节来源** - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [Application.yml](file://crm-app/src/main/resources/application.yml) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) ## 依赖关系分析 - 认证链路:AuthController依赖TokenService与第三方客户端;JwtAuthenticationFilter依赖TokenService与SecurityConfig - 数据权限:DataScopeInterceptor依赖DataScope注解、DataVisibilityContext、DataScopeHelper与DataScopeTables - 第三方登录:AuthController通过工厂模式获取具体第三方客户端,再交由服务层处理用户绑定 +- **新增:审计字段依赖**:MetaObjectFillHandler依赖SecurityUtils获取当前用户信息,BaseEntity定义标准审计字段结构 ```mermaid graph LR @@ -318,9 +372,12 @@ DScopeInt["DataScopeInterceptor"] --> DSCOPE["DataScope注解"] DScopeInt --> Ctx["DataVisibilityContext"] DScopeInt --> Helper["DataScopeHelper"] DScopeInt --> Tbls["DataScopeTables"] +MetaFill["MetaObjectFillHandler"] --> SecUtils["SecurityUtils"] +MetaFill --> BaseEntity["BaseEntity"] +DictSvc["DictServiceImpl"] --> MetaFill ``` -图表来源 +**图表来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java) @@ -332,8 +389,10 @@ DScopeInt --> Tbls["DataScopeTables"] - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) - [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) -章节来源 +**章节来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java) @@ -345,14 +404,15 @@ DScopeInt --> Tbls["DataScopeTables"] - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) - [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) ## 性能考虑 - JWT无状态校验:减少服务端会话存储压力,适合水平扩展 - 数据权限SQL注入:尽量使用预编译与索引优化,避免全表扫描 - 第三方登录限流:对钉钉回调接口做速率限制与重试退避 - 缓存热点数据:菜单、角色、权限、部门树可缓存以提升鉴权速度 - -[本节为通用指导,不直接分析具体文件] +- **新增:审计字段性能**:strictInsertFill/strictUpdateFill仅在null值时填充,避免不必要的数据库操作 ## 故障排查指南 - 认证失败 @@ -367,8 +427,12 @@ DScopeInt --> Tbls["DataScopeTables"] - 第三方登录问题 - 校验钉钉回调地址与密钥配置 - 检查ThirdPartyUserInfo映射字段是否完整 +- **新增:审计字段问题** + - 检查MetaObjectFillHandler是否正确配置 + - 确认业务代码是否显式清空了客户端传入的审计字段 + - 验证BaseEntity中的审计字段注解配置 -章节来源 +**章节来源** - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) @@ -376,20 +440,24 @@ DScopeInt --> Tbls["DataScopeTables"] - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java) - [ThirdPartyUserInfo.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java) +- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) ## 结论 -本安全架构以JWT为核心,结合RBAC与DataScope数据权限,形成“身份认证—权限校验—数据隔离”的闭环。通过统一的SecurityConfig与过滤器链,保证安全策略的可配置性与可扩展性;通过第三方登录工厂与上下文工具,提升集成效率与可维护性。建议在后续迭代中持续完善令牌刷新、审计日志与动态权限下发能力。 - -[本节为总结性内容,不直接分析具体文件] +本安全架构以JWT为核心,结合RBAC与DataScope数据权限,形成"身份认证—权限校验—数据隔离"的闭环。通过统一的SecurityConfig与过滤器链,保证安全策略的可配置性与可扩展性;通过第三方登录工厂与上下文工具,提升集成效率与可维护性。**新增的审计字段防篡改机制进一步增强了数据完整性保护,确保所有审计信息的真实性和不可伪造性**。建议在后续迭代中持续完善令牌刷新、审计日志与动态权限下发能力。 ## 附录 - 术语说明 - JWT:JSON Web Token,用于无状态身份传递 - RBAC:基于角色的访问控制 - DataScope:数据范围注解,限定查询数据的可见范围 + - **新增:审计字段**:记录数据创建和修改的时间、用户等元数据 - 最佳实践 - 敏感操作二次确认与审计 - 最小权限原则与接口级鉴权 - 定期轮换密钥与审查第三方接入 - -[本节为补充信息,不直接分析具体文件] \ No newline at end of file + - **新增:在服务层显式清空客户端传入的审计字段,确保数据安全** +- **新增:审计字段安全规范** + - 所有继承BaseEntity的实体都受审计字段保护 + - 业务代码不得直接设置createTime、creatorId、updaterId、updateTime字段 + - 使用MyBatis-Plus的strictInsertFill和strictUpdateFill机制进行安全填充 \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/认证服务/认证服务.md b/.qoder/repowiki/zh/content/认证服务/认证服务.md index 34edb71..3226d2c 100644 --- a/.qoder/repowiki/zh/content/认证服务/认证服务.md +++ b/.qoder/repowiki/zh/content/认证服务/认证服务.md @@ -4,6 +4,7 @@ **本文引用的文件** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) - [application.yml](file://crm-auth/src/main/resources/application.yml) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) @@ -11,6 +12,7 @@ - [DataInitializer.java](file://crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java) - [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java) - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) - [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java) - [LoginParam.java](file://crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java) - [LoginResultDTO.java](file://crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java) @@ -87,6 +89,13 @@ - [TreeUtils.java](file://crm-base/src/main/java/com/crm/base/utils/TreeUtils.java) +## 更新摘要 +**变更内容** +- 新增调试令牌端点章节,详细介绍DebugTokenController功能 +- 更新安全配置章节,说明verify profile和三层护栏机制 +- 新增验证环境专用配置说明 +- 更新部署指南,包含verify profile的使用说明 + ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) @@ -102,9 +111,11 @@ ## 简介 本技术文档围绕认证服务的用户认证、授权管理、权限控制等核心能力展开,涵盖JWT令牌机制、RBAC角色权限模型、数据权限控制、第三方登录集成等特性。同时提供用户管理、角色管理、菜单权限、部门管理等业务功能的API接口说明与使用示例,并解释安全过滤器链、异常处理、会话管理等安全机制,最后给出完整的配置指南与最佳实践建议。 +**重要更新**:新增了验证环境专用的调试令牌端点,用于在验证环境中快速生成JWT令牌进行接口调试,该功能通过@Profile("verify")严格限制仅在验证环境激活。 + ## 项目结构 认证服务由应用启动模块与认证功能模块组成: -- crm-app:应用入口与全局配置 +- crm-app:应用入口与全局配置(包含verify profile专用配置) - crm-auth:认证与权限核心实现(控制器、服务、安全、领域模型、枚举、参数与DTO) - crm-base:通用基础能力(异常、结果封装、安全上下文、数据可见性、工具类、配置等) @@ -112,12 +123,14 @@ graph TB subgraph "应用层" App["CrmAppApplication
应用启动"] +VerifyCfg["application-verify.yml
验证环境配置"] end subgraph "认证模块(crm-auth)" AuthApp["AuthApplication
认证应用启动"] SecCfg["SecurityConfig
安全配置"] PermCfg["PermissionConfig
权限配置"] CtlAuth["AuthController
认证接口"] +CtlDebug["DebugTokenController
调试令牌接口"] CtlSys["SystemController
系统接口"] SvcAuth["AuthServiceImpl
认证服务"] SvcUser["AuthUserServiceImpl
用户服务"] @@ -139,10 +152,13 @@ Jackson["JacksonConfig
序列化配置"] Snow["SnowflakeIdWorker
雪花ID生成"] end App --> AuthApp +App --> VerifyCfg AuthApp --> SecCfg SecCfg --> JwtF JwtF --> TokS CtlAuth --> SvcAuth +CtlDebug --> SvcUser +CtlDebug --> TokS CtlSys --> SvcUser CtlSys --> SvcRole CtlSys --> SvcMenu @@ -162,8 +178,10 @@ SvcDept --> SecCtx **图表来源** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) @@ -185,6 +203,7 @@ SvcDept --> SecCtx **章节来源** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) - [application.yml](file://crm-auth/src/main/resources/application.yml) @@ -200,6 +219,8 @@ SvcDept --> SecCtx - ISysRoleService/SysRoleServiceImpl:角色CRUD、角色-用户关联 - ISysMenuService/SysMenuServiceImpl:菜单树、按钮权限、角色-菜单关联 - ISysDeptService/SysDeptServiceImpl:部门树、用户-部门关联 +- **调试令牌端点** + - DebugTokenController:验证环境专用的JWT令牌生成接口,通过@Profile("verify")严格限制 - 数据权限控制 - DataScopeInterceptor:基于注解的数据范围注入SQL片段 - DataScopeHelper/DataVisibilityContext:数据可见性上下文与计算 @@ -228,6 +249,7 @@ SvcDept --> SecCtx - [SysMenuServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java) - [ISysDeptService.java](file://crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java) - [SysDeptServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) @@ -248,7 +270,7 @@ SvcDept --> SecCtx ## 架构总览 认证服务采用分层架构与模块化设计: -- 表现层:控制器暴露REST API +- 表现层:控制器暴露REST API(包括调试令牌端点) - 服务层:业务编排与领域逻辑 - 安全层:过滤器链、令牌服务、权限校验、数据范围拦截 - 数据层:MyBatis Plus映射与数据库交互 @@ -258,7 +280,8 @@ SvcDept --> SecCtx sequenceDiagram participant Client as "客户端" participant Filter as "JwtAuthenticationFilter" -participant Controller as "AuthController" +participant DebugCtl as "DebugTokenController" +participant AuthCtl as "AuthController" participant Service as "AuthServiceImpl" participant Token as "TokenService" participant DB as "数据库" @@ -266,19 +289,28 @@ participant Cache as "Redis" Client->>Filter : "携带Authorization请求" Filter->>Filter : "解析JWT并校验签名" Filter-->>Client : "未通过则拒绝访问" -Client->>Controller : "POST /auth/login" -Controller->>Service : "login(LoginParam)" +Note over DebugCtl : verify profile激活时可用 +Client->>DebugCtl : "POST /api/auth/debug/token?userId=xxx" +DebugCtl->>DB : "查询用户信息" +DB-->>DebugCtl : "用户实体" +DebugCtl->>Token : "生成JWT(复用正式登录逻辑)" +Token->>Cache : "写入会话/黑名单(可选)" +Token-->>DebugCtl : "返回token" +DebugCtl-->>Client : "200 OK {token}" +Client->>AuthCtl : "POST /auth/login" +AuthCtl->>Service : "login(LoginParam)" Service->>DB : "查询用户与身份" DB-->>Service : "用户实体与角色/菜单" Service->>Token : "生成JWT(含用户、角色、权限)" Token->>Cache : "写入会话/黑名单(可选)" Token-->>Service : "返回token" -Service-->>Controller : "LoginResultDTO" -Controller-->>Client : "200 OK {token, userInfo}" +Service-->>AuthCtl : "LoginResultDTO" +AuthCtl-->>Client : "200 OK {token, userInfo}" ``` **图表来源** - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) @@ -290,6 +322,9 @@ Controller-->>Client : "200 OK {token, userInfo}" - JwtAuthenticationFilter:从请求头提取JWT,调用TokenService完成校验与上下文填充 - TokenService:负责JWT的创建、解析、续期、撤销;支持将令牌或黑名单存入Redis - 数据范围拦截器:在方法执行前注入数据范围条件,影响后续SQL +- **verify profile配置**:通过AuthProperties.ignoreUrls配置额外放行路径,支持动态配置 + +**更新**:新增了verify profile专用的安全配置机制,允许在验证环境中动态添加放行路径。 ```mermaid classDiagram @@ -313,7 +348,13 @@ class DataScopeInterceptor { +preHandle(request,response,handler) +buildScopeCondition() } +class AuthProperties { ++String[] ignoreUrls ++Jwt jwt ++DingTalk dingtalk +} SecurityConfig --> JwtAuthenticationFilter : "注册" +SecurityConfig --> AuthProperties : "读取配置" JwtAuthenticationFilter --> TokenService : "校验令牌" SecurityConfig --> DataScopeInterceptor : "注册" ``` @@ -323,18 +364,60 @@ SecurityConfig --> DataScopeInterceptor : "注册" - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) +- [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java) **章节来源** - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) +- [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java) + +### 调试令牌端点(验证环境专用) +**新增功能**:DebugTokenController是专门为验证环境设计的调试接口,允许通过userId直接生成JWT令牌,绕过正常的登录流程。 + +**核心特性**: +- **严格的环境隔离**:通过@Profile("verify")确保仅在验证环境激活 +- **三层安全防护**: + 1. @Profile("verify") - Bean级别的条件注册 + 2. application-verify.yml中的ignore-urls配置 - URL级别的放行 + 3. 启动期WARN日志 - 审计追踪 +- **功能复用**:完全复用TokenService.createToken方法,生成的令牌与正常登录完全一致 +- **安全警告**:启动时打印明显的警告日志,提醒开发者这是后门接口 + +```mermaid +flowchart TD +Start(["应用启动"]) --> CheckProfile{"verify profile激活?"} +CheckProfile --> |否| Skip["跳过DebugTokenController注册"] +CheckProfile --> |是| Register["注册DebugTokenController"] +Register --> WarnLog["打印启动警告日志"] +WarnLog --> Ready["接口就绪"] +Ready --> Request["接收POST /api/auth/debug/token?userId=xxx"] +Request --> ValidateUser["验证userId存在"] +ValidateUser --> |不存在| Error["返回错误"] +ValidateUser --> |存在| BuildUser["构建AuthLoginUser"] +BuildUser --> GenToken["调用TokenService.createToken"] +GenToken --> LogAudit["记录审计日志"] +LogAudit --> Return["返回JWT令牌"] +Error --> End(["结束"]) +Return --> End +Skip --> End +``` + +**图表来源** +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) + +**章节来源** +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) ### 认证流程与JWT令牌机制 - 登录流程:验证用户名/密码或第三方凭证,加载用户、角色、菜单权限,生成JWT并返回 - 令牌内容:包含用户标识、角色集合、权限点集合、过期时间等 - 令牌校验:过滤器自动解析并填充安全上下文,后续接口无需重复鉴权 - 令牌刷新与注销:支持刷新过期令牌、主动注销使令牌失效 +- **调试令牌生成**:验证环境下可通过userId直接生成标准JWT令牌 ```mermaid flowchart TD @@ -567,6 +650,7 @@ SysCtl-->>Admin : "Result>" - 控制器依赖服务层,服务层依赖领域模型与Mapper - 安全过滤器依赖令牌服务与安全上下文 - 数据范围拦截器依赖数据可见性上下文 + - **调试令牌端点依赖用户服务和令牌服务** - 模块间依赖 - crm-auth依赖crm-base提供的异常、结果、安全上下文、工具类与配置 - crm-app作为应用入口聚合各模块 @@ -579,12 +663,15 @@ Svc --> Mapper["数据访问层"] Filter["安全过滤器"] --> Token["令牌服务"] Filter --> Ctx["安全上下文"] Intc["数据范围拦截器"] --> Vis["数据可见性"] +DebugCtl["调试令牌控制器"] --> UserSvc["用户服务"] +DebugCtl --> Token AuthMod["crm-auth"] --> BaseMod["crm-base"] AppMod["crm-app"] --> AuthMod ``` **图表来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) - [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) @@ -593,6 +680,7 @@ AppMod["crm-app"] --> AuthMod **章节来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) - [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) @@ -614,24 +702,31 @@ AppMod["crm-app"] --> AuthMod - 权限不足:确认用户是否具备所需角色与菜单权限 - 数据不可见:检查@DataScope注解与用户所属部门/角色数据范围 - 令牌无效:检查Authorization头格式、令牌是否过期或被注销 + - **调试令牌接口404**:检查verify profile是否正确激活 - 日志与追踪 - 使用TraceIdFilter贯穿请求链路,便于定位问题 - 全局异常处理器统一捕获并返回结构化错误信息 + - **调试令牌接口会打印WARN日志**,可用于验证profile激活状态 - 调试建议 - 开启Knife4j接口文档,快速验证接口行为 - 检查Redis中令牌与黑名单状态 - 查看数据库关联表(用户-角色、角色-菜单、用户-部门)一致性 + - **验证环境检查**:确认application-verify.yml配置正确 **章节来源** - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java) - [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) - [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java) ## 结论 认证服务以JWT为核心,结合RBAC与数据权限控制,提供了完整的安全体系。通过模块化设计与清晰的分层架构,实现了用户认证、授权管理、权限控制与第三方登录集成的统一方案。配合统一的异常处理、结果封装与缓存策略,具备良好的可扩展性与可维护性。 +**重要更新**:新增的调试令牌端点为验证环境提供了极大的便利性,通过严格的@Profile("verify")机制确保了生产环境的安全性。这一设计体现了在开发便利性与生产安全性之间的平衡考虑。 + [本节为总结性内容,不直接分析具体文件] ## 附录 @@ -639,6 +734,7 @@ AppMod["crm-app"] --> AuthMod ### 配置指南 - 应用配置 - application.yml:设置端口、数据库、Redis、JWT密钥与过期时间等 + - **application-verify.yml**:验证环境专用配置,包含调试令牌接口的放行规则 - AuthProperties:认证相关自定义配置项 - 安全配置 - SecurityConfig:配置白名单、鉴权规则、跨域、异常处理器 @@ -649,8 +745,11 @@ AppMod["crm-app"] --> AuthMod - JacksonConfig:日期、空值序列化策略 - SnowflakeIdWorker:分布式ID生成策略 +**更新**:新增了application-verify.yml配置文件,用于验证环境的特殊配置。 + **章节来源** - [application.yml](file://crm-app/src/main/resources/application.yml) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [application.yml](file://crm-auth/src/main/resources/application.yml) - [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) @@ -664,6 +763,7 @@ AppMod["crm-app"] --> AuthMod - 令牌安全 - 使用强密钥与合理的过期时间 - 敏感操作二次校验(如密码修改、支付) + - **严禁在生产环境激活verify profile** - 权限设计 - 最小权限原则,按需分配角色与菜单 - 数据范围粒度适中,避免过度复杂 @@ -673,5 +773,49 @@ AppMod["crm-app"] --> AuthMod - 监控与审计 - 记录登录、登出、权限变更等关键事件 - 使用TraceId串联日志,便于问题定位 + - **调试令牌接口使用需记录审计日志** +- **验证环境管理** + - 确保CI/CD流程不会在生产环境激活verify profile + - 定期检查verify profile的配置安全性 + - 使用环境变量隔离不同环境的配置 + +**更新**:新增了验证环境管理的相关最佳实践建议。 + +[本节为通用指导,不直接分析具体文件] + +### 验证环境使用说明 +**新增章节**:详细说明验证环境专用调试令牌端点的使用方法。 + +#### 环境准备 +1. 确保docker-compose配置中包含verify profile +2. 确认application-verify.yml已正确配置 +3. 验证Spring Boot应用以verify profile启动 + +#### 使用步骤 +1. **获取用户ID**:从数据库中查询现有用户的ID + ```bash + docker compose exec mysql mysql -uroot -pverify123 -e "SELECT id, username FROM crm.crm_auth_user LIMIT 5;" + ``` + +2. **调用调试接口**:使用userId获取JWT令牌 + ```bash + curl -X POST 'http://localhost:8080/api/auth/debug/token?userId=<用户ID>' + ``` + +3. **使用令牌**:将返回的JWT放入Authorization头进行其他接口调用 + ```bash + curl -X GET 'http://localhost:8080/api/file/upload' \ + -H "Authorization: Bearer " + ``` + +#### 安全注意事项 +- **仅限验证环境使用**:该接口绝对不能在生产环境激活 +- **审计日志**:每次调用都会记录WARN级别的审计日志 +- **令牌有效性**:生成的JWT与正常登录产生的令牌完全一致 +- **配置隔离**:通过@Profile("verify")确保端点只在验证环境可用 -[本节为通用指导,不直接分析具体文件] \ No newline at end of file +**章节来源** +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) +- [deploy-verify.md](file://docs/deploy-verify.md) +- [0014-verify-profile-debug-token-endpoint.md](file://docs/adr/0014-verify-profile-debug-token-endpoint.md) \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/部署指南.md b/.qoder/repowiki/zh/content/部署指南.md index aac94f6..f89ccb0 100644 --- a/.qoder/repowiki/zh/content/部署指南.md +++ b/.qoder/repowiki/zh/content/部署指南.md @@ -7,8 +7,13 @@ - [crm-auth/pom.xml](file://crm-auth/pom.xml) - [crm-base/pom.xml](file://crm-base/pom.xml) - [crm-file/pom.xml](file://crm-file/pom.xml) +- [Dockerfile](file://Dockerfile) +- [docker-compose.yml](file://docker-compose.yml) +- [.dockerignore](file://.dockerignore) +- [settings.xml](file://settings.xml) - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) +- [crm-app/src/main/resources/application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [crm-auth/src/main/java/com/crm/auth/AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) - [crm-auth/src/main/resources/application.yml](file://crm-auth/src/main/resources/application.yml) - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) @@ -25,6 +30,14 @@ - [crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java) +## 更新摘要 +**所做更改** +- 新增完整的Docker容器化部署支持章节 +- 添加docker-compose一键部署配置说明 +- 更新配置文件管理部分,包含verify环境配置 +- 增强Docker镜像构建和优化说明 +- 添加容器编排和服务依赖管理指导 + ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) @@ -41,7 +54,7 @@ 本指南面向运维与交付团队,提供CRM后端系统的完整部署与运维手册。内容覆盖: - 环境准备与依赖服务安装(MySQL、Redis、MinIO) - 多模块构建与打包 -- Docker容器化部署 +- **新增** Docker容器化部署(含docker-compose一键启动) - Kubernetes集群部署 - 传统服务器部署 - 配置文件管理、数据库初始化与服务启动顺序 @@ -82,13 +95,13 @@ FILE --> REDIS FILE --> MINIO ``` -图表来源 +**图表来源** - [pom.xml:1-200](file://pom.xml#L1-L200) - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java:1-50](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java#L1-L50) - [crm-auth/src/main/java/com/crm/auth/AuthApplication.java:1-50](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java#L1-L50) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java#L1-L80) -章节来源 +**章节来源** - [pom.xml:1-200](file://pom.xml#L1-L200) - [crm-app/pom.xml:1-100](file://crm-app/pom.xml#L1-L100) - [crm-auth/pom.xml:1-100](file://crm-auth/pom.xml#L1-L100) @@ -105,7 +118,7 @@ FILE --> MINIO - Redis:会话、缓存、分布式锁、限流等 - MinIO:对象存储,用于文件与附件存储 -章节来源 +**章节来源** - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java:1-50](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java#L1-L50) - [crm-auth/src/main/java/com/crm/auth/AuthApplication.java:1-50](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java#L1-L50) - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java:1-80](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java#L1-L80) @@ -127,7 +140,7 @@ FileSrv --> Cache FileSrv --> OSS["MinIO"] ``` -图表来源 +**图表来源** - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java:1-120](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java#L1-L120) - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java:1-120](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java#L1-L120) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java#L1-L80) @@ -170,13 +183,13 @@ A->>D : "业务查询(可选)" A-->>C : "响应" ``` -图表来源 +**图表来源** - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java:1-120](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java#L1-L120) - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java:1-120](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java#L1-L120) - [crm-auth/src/main/java/com/crm/auth/security/TokenService.java:1-120](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java#L1-L120) - [crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java:1-120](file://crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java#L1-L120) -章节来源 +**章节来源** - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java:1-120](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java#L1-L120) - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java:1-120](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java#L1-L120) - [crm-auth/src/main/java/com/crm/auth/security/TokenService.java:1-120](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java#L1-L120) @@ -211,12 +224,12 @@ SaveMeta --> Done(["结束"]) Wait --> Done ``` -图表来源 +**图表来源** - [crm-file/src/main/java/com/crm/file/config/FileProperties.java:1-80](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java#L1-L80) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java#L1-L80) - [crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java:1-80](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java#L1-L80) -章节来源 +**章节来源** - [crm-file/src/main/java/com/crm/file/config/FileProperties.java:1-80](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java#L1-L80) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java#L1-L80) - [crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java:1-80](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java#L1-L80) @@ -231,7 +244,7 @@ Wait --> Done - 作用 - 为各业务模块提供统一的配置、工具与安全能力 -章节来源 +**章节来源** - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java:1-80](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java#L1-L80) - [crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java:1-80](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java#L1-L80) - [crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java:1-80](file://crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java#L1-L80) @@ -262,14 +275,14 @@ FILE --> REDIS FILE --> MINIO["MinIO"] ``` -图表来源 +**图表来源** - [pom.xml:1-200](file://pom.xml#L1-L200) - [crm-app/pom.xml:1-100](file://crm-app/pom.xml#L1-L100) - [crm-auth/pom.xml:1-100](file://crm-auth/pom.xml#L1-L100) - [crm-base/pom.xml:1-100](file://crm-base/pom.xml#L1-L100) - [crm-file/pom.xml:1-100](file://crm-file/pom.xml#L1-L100) -章节来源 +**章节来源** - [pom.xml:1-200](file://pom.xml#L1-L200) ## 性能与容量规划 @@ -288,8 +301,6 @@ FILE --> MINIO["MinIO"] - 无状态服务多副本部署 - 会话与缓存一致性保障 -[本节为通用指导,不直接引用具体文件] - ## 故障排查指南 - 常见问题定位 - 认证失败:检查JWT密钥、Redis连通性、过滤器链配置 @@ -304,15 +315,13 @@ FILE --> MINIO["MinIO"] - 灰度发布与快速回滚 - 数据快照与增量备份 -章节来源 +**章节来源** - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java:1-120](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java#L1-L120) - [crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java:1-80](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java#L1-L80) ## 结论 通过模块化设计与清晰的依赖边界,结合容器化与Kubernetes编排,可实现高可用、易扩展的CRM后端部署。配合完善的监控、日志与备份策略,能够保障生产环境的稳定性与可恢复性。 -[本节为总结性内容,不直接引用具体文件] - ## 附录 ### 一、环境准备与依赖服务安装 @@ -324,7 +333,7 @@ FILE --> MINIO["MinIO"] - Redis:设置密码、最大内存、持久化策略 - MinIO:创建桶、访问密钥、网络可达性 -章节来源 +**章节来源** - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java:1-80](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java#L1-L80) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java#L1-L80) @@ -335,7 +344,7 @@ FILE --> MINIO["MinIO"] - 构建优化 - 并行构建、跳过测试、依赖缓存 -章节来源 +**章节来源** - [pom.xml:1-200](file://pom.xml#L1-L200) - [crm-app/pom.xml:1-100](file://crm-app/pom.xml#L1-L100) - [crm-auth/pom.xml:1-100](file://crm-auth/pom.xml#L1-L100) @@ -346,14 +355,17 @@ FILE --> MINIO["MinIO"] - 配置分层 - 应用级application.yml - 环境级配置(dev/test/prod) + - **新增** verify专用配置文件(application-verify.yml) - 外部化配置(环境变量、配置中心) - 关键配置项 - 数据库连接、Redis连接、MinIO端点与凭据 - JWT密钥、跨域、接口文档开关 - 文件分片大小、超时、重试策略 + - **新增** verify环境下的调试接口白名单配置 -章节来源 -- [crm-app/src/main/resources/application.yml:1-200](file://crm-app/src/main/resources/application.yml#L1-L200) +**章节来源** +- [crm-app/src/main/resources/application.yml:1-76](file://crm-app/src/main/resources/application.yml#L1-L76) +- [crm-app/src/main/resources/application-verify.yml:1-13](file://crm-app/src/main/resources/application-verify.yml#L1-L13) - [crm-auth/src/main/resources/application.yml:1-200](file://crm-auth/src/main/resources/application.yml#L1-L200) - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java:1-120](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java#L1-L120) - [crm-file/src/main/java/com/crm/file/config/FileProperties.java:1-80](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java#L1-L80) @@ -367,22 +379,66 @@ FILE --> MINIO["MinIO"] - 再启动crm-auth与crm-file - 最后启动crm-app(若作为聚合入口) -章节来源 +**章节来源** - [crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java:1-120](file://crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java#L1-L120) - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java:1-50](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java#L1-L50) - [crm-auth/src/main/java/com/crm/auth/AuthApplication.java:1-50](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java#L1-L50) -### 五、Docker容器化部署 -- 镜像构建 +### 五、Docker容器化部署(新增) +- **镜像构建** - 使用多阶段构建减小镜像体积 - - 将JAR包与外部配置分离 -- 容器编排 - - 定义环境变量、挂载卷(日志、配置) - - 健康检查与资源限制 -- 示例流程 - - 构建镜像 → 推送仓库 → 拉取运行 → 验证健康 + - 第一阶段:Maven编译打包(基于maven:3.9-eclipse-temurin-17) + - 第二阶段:运行环境(基于eclipse-temurin:17-jre + LibreOffice headless) + - 包含LibreOffice headless用于Office文档缩略图生成 + - 预装中文字体支持CJK渲染 +- **容器编排** + - docker-compose.yml定义完整服务栈 + - 自动拉起MySQL、Redis、MinIO和CRM应用 + - 健康检查确保服务依赖正确启动顺序 + - 数据卷持久化存储 +- **环境变量配置** + - 通过环境变量注入中间件连接信息 + - SPRING_PROFILES_ACTIVE=verify激活验证环境 + - 数据库、Redis、MinIO连接参数配置 +- **构建优化** + - .dockerignore排除不必要的文件 + - Maven依赖缓存利用Docker层缓存 + - 阿里云Maven镜像加速依赖下载 + +**新增** Docker部署架构图: + +```mermaid +graph TB +subgraph "Docker Compose 服务栈" +MYSQL["MySQL 8.4.8
端口: 13306"] +REDIS["Redis 7 Alpine
端口: 6379"] +MINIO["MinIO
控制台: 9001"] +MINIO_INIT["MinIO初始化
创建bucket"] +CRM_APP["CRM应用
端口: 8080
verify profile"] +end +MYSQL -.健康检查.-> CRM_APP +REDIS -.健康检查.-> CRM_APP +MINIO -.健康检查.-> MINIO_INIT +MINIO_INIT -.健康检查.-> CRM_APP +subgraph "数据持久化" +MYSQL_DATA["mysql-data"] +REDIS_DATA["redis-data"] +MINIO_DATA["minio-data"] +end +MYSQL --- MYSQL_DATA +REDIS --- REDIS_DATA +MINIO --- MINIO_DATA +``` + +**图表来源** +- [docker-compose.yml:1-100](file://docker-compose.yml#L1-L100) +- [Dockerfile:1-27](file://Dockerfile#L1-L27) -[本节为通用指导,不直接引用具体文件] +**章节来源** +- [Dockerfile:1-27](file://Dockerfile#L1-L27) +- [docker-compose.yml:1-100](file://docker-compose.yml#L1-L100) +- [.dockerignore:1-14](file://.dockerignore#L1-L14) +- [settings.xml:1-14](file://settings.xml#L1-L14) ### 六、Kubernetes集群部署 - 部署清单 @@ -396,8 +452,6 @@ FILE --> MINIO["MinIO"] - 日志落盘与远端收集 - 文件服务对接MinIO PVC或外部存储 -[本节为通用指导,不直接引用具体文件] - ### 七、传统服务器部署 - 进程管理 - 使用systemd或supervisor管理服务生命周期 @@ -406,8 +460,6 @@ FILE --> MINIO["MinIO"] - 日志轮转 - logrotate配置,保留策略与压缩 -[本节为通用指导,不直接引用具体文件] - ### 八、生产环境优化配置 - JVM调优 - 堆大小、GC选择、元空间、线程栈大小 @@ -418,8 +470,6 @@ FILE --> MINIO["MinIO"] - 文件服务优化 - MinIO节点横向扩展、分片大小与并发限制 -[本节为通用指导,不直接引用具体文件] - ### 九、监控告警设置 - 指标采集 - JVM、GC、线程、连接池、QPS、延迟 @@ -429,8 +479,6 @@ FILE --> MINIO["MinIO"] - 可视化 - 仪表盘与告警通知渠道 -[本节为通用指导,不直接引用具体文件] - ### 十、日志收集方案 - 应用日志 - 结构化输出、TraceId贯穿、分级输出 @@ -439,8 +487,6 @@ FILE --> MINIO["MinIO"] - 日志策略 - 保留周期、脱敏、采样与压缩 -[本节为通用指导,不直接引用具体文件] - ### 十一、备份恢复策略 - 数据库备份 - 全量+增量、异地备份、加密与校验 @@ -449,8 +495,6 @@ FILE --> MINIO["MinIO"] - 恢复演练 - 定期演练恢复流程,验证RTO/RPO -[本节为通用指导,不直接引用具体文件] - ### 十二、负载均衡、SSL证书与域名绑定 - 负载均衡 - Nginx/Ingress分发、健康检查、权重与灰度 @@ -459,4 +503,33 @@ FILE --> MINIO["MinIO"] - 域名绑定 - DNS解析、CDN加速、WAF防护 -[本节为通用指导,不直接引用具体文件] \ No newline at end of file +### 十三、Docker部署快速开始(新增) +- **前置条件** + - Docker Engine ≥ 20.10 + - Docker Compose ≥ 2.x + - 至少6GB可用磁盘空间(LibreOffice镜像约1.5GB) + - 网络连接(拉取Maven依赖和Docker镜像) +- **一键启动** + ```bash + # 首次构建并启动所有服务 + docker compose up -d --build + + # 查看应用日志 + docker compose logs -f crm-app + + # 停止并清理所有资源 + docker compose down -v + ``` +- **服务访问** + - CRM应用:http://localhost:8080 + - MinIO控制台:http://localhost:9001(minioadmin/minioadmin) + - MySQL:localhost:13306(root/verify123) +- **验证环境特性** + - verify profile启用了调试token接口 + - 支持免鉴权访问缩略图接口 + - 自动创建数据库表和MinIO bucket + +**章节来源** +- [docker-compose.yml:1-100](file://docker-compose.yml#L1-L100) +- [docs/deploy-verify.md:1-168](file://docs/deploy-verify.md#L1-L168) +- [crm-app/src/main/resources/application-verify.yml:1-13](file://crm-app/src/main/resources/application-verify.yml#L1-L13) \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/配置指南/配置指南.md b/.qoder/repowiki/zh/content/配置指南/配置指南.md index d572c72..36507f6 100644 --- a/.qoder/repowiki/zh/content/配置指南/配置指南.md +++ b/.qoder/repowiki/zh/content/配置指南/配置指南.md @@ -3,7 +3,7 @@ **本文引用的文件** - [application.yml](file://crm-app/src/main/resources/application.yml) -- [application.yml](file://crm-auth/src/main/resources/application.yml) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) @@ -24,8 +24,22 @@ - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [SchedulingConfig.java](file://crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) +- [ImageThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java) +- [OfficeThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java) +- [PdfThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) +## 更新摘要 +**变更内容** +- 新增缩略图配置类 FileProperties.Thumbnail,包含完整的缩略图生成配置选项 +- 新增 application-verify.yml 验证环境配置文件,支持调试和测试场景 +- 完善缩略图渲染器配置(图片、PDF、Office文档) +- 增强定时任务配置(缩略图生成、失败重试) +- 扩展环境变量覆盖机制 + ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) @@ -43,7 +57,9 @@ - 所有关键配置项的含义、默认值、环境变量覆盖方式 - 动态配置更新机制(如适用) - 数据库连接、Redis 缓存、MinIO 文件存储、JWT 安全、日志级别等核心配置 -- 不同环境的配置模板(开发、测试、生产) +- **新增:缩略图生成配置(尺寸、格式、重试策略、LibreOffice路径)** +- **新增:验证环境专用配置(调试接口、权限豁免)** +- 不同环境的配置模板(开发、测试、生产、验证) - 配置验证规则、热更新机制、最佳实践、性能调优参数与故障排查 ## 项目结构 @@ -51,7 +67,7 @@ - crm-app:应用启动入口与全局应用配置 - crm-auth:认证授权与安全相关配置 - crm-base:公共基础配置(Redis、Jackson、MyBatis-Plus、跨域、接口文档等) -- crm-file:文件服务(MinIO、分片上传、定时清理任务) +- crm-file:文件服务(MinIO、分片上传、缩略图生成、定时清理任务) ```mermaid graph TB @@ -62,16 +78,19 @@ FILE["crm-file
文件服务"] end subgraph "基础能力" BASE["crm-base
通用配置与工具"] +THUMB["缩略图系统
渲染器+任务调度"] end APP --> AUTH APP --> FILE AUTH --> BASE FILE --> BASE +FILE --> THUMB ``` **图表来源** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) +- [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) **章节来源** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) @@ -82,6 +101,7 @@ FILE --> BASE - 数据访问:MyBatis-Plus 配置、元对象填充、自定义 ID 生成器 - 缓存:Redis 客户端配置与序列化策略 - 文件存储:MinIO 客户端与文件属性绑定 +- **缩略图系统:缩略图生成配置、渲染器、异步任务、失败重试** - 安全:Spring Security + JWT 过滤器与令牌服务 - 调度:任务调度开关与属性 - 接口文档:Knife4j 配置 @@ -90,28 +110,20 @@ FILE --> BASE **章节来源** - [application.yml](file://crm-app/src/main/resources/application.yml) -- [application.yml](file://crm-auth/src/main/resources/application.yml) -- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) -- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) -- [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) -- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) -- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) -- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) -- [SchedulingConfig.java](file://crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java) -- [ScheduledTaskProperties.java](file://crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java) -- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java) -- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java) -- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) ## 架构总览 -下图展示了配置加载与运行时依赖关系:应用启动时读取 application.yml,注入各配置类;业务组件通过 @ConfigurationProperties 或 @Value 获取配置;安全、缓存、文件、调度等子系统按配置初始化。 +下图展示了配置加载与运行时依赖关系:应用启动时读取 application.yml,注入各配置类;业务组件通过 @ConfigurationProperties 或 @Value 获取配置;安全、缓存、文件、调度、缩略图等子系统按配置初始化。 ```mermaid graph LR YML["application.yml
配置文件"] --> BOOT["Spring Boot 容器"] BOOT --> PROPS_AUTH["AuthProperties
认证属性"] BOOT --> PROPS_FILE["FileProperties
文件属性"] +BOOT --> PROPS_THUMB["Thumbnail
缩略图配置"] BOOT --> CFG_BASE["Base 配置集合
Redis/MyBatis-Plus/Jackson/CORS/Knife4j"] BOOT --> CFG_SEC["SecurityConfig
安全配置"] BOOT --> CFG_MINIO["MinioConfig
MinIO 客户端"] @@ -121,29 +133,29 @@ FILTER --> TOKEN["TokenService
令牌服务"] CFG_MINIO --> FILE_SVC["文件服务"] CFG_BASE --> REDIS["Redis 缓存"] CFG_BASE --> DB["数据库(MyBatis-Plus)"] +PROPS_THUMB --> THUMB_TASK["缩略图任务
生成+重试"] +THUMB_TASK --> RENDERERS["渲染器
图片/PDF/Office"] +RENDERERS --> LIBREOFFICE["LibreOffice
文档转换"] ``` **图表来源** - [application.yml](file://crm-app/src/main/resources/application.yml) -- [application.yml](file://crm-auth/src/main/resources/application.yml) -- [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) -- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) -- [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) -- [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) -- [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) -- [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) -- [SchedulingConfig.java](file://crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [OfficeThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java) ## 详细组件分析 ### 应用与模块入口 - 应用启动类负责扫描包与启用自动配置,确保各模块的配置类被加载 - 多模块共享 application.yml,可按模块拆分 profile +- **新增:验证环境专用配置,支持调试接口和权限豁免** **章节来源** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) ### 数据库连接配置(MyBatis-Plus) - 数据源 URL、用户名、密码、驱动、连接池参数由 application.yml 提供 @@ -176,6 +188,7 @@ EnablePlugins --> Ready(["就绪"]) ### Redis 缓存配置 - Redis 主机、端口、密码、数据库索引、超时时间、序列化策略在 application.yml 中定义 - RedisConfig 负责创建 RedisTemplate 并配置序列化器,保证与 JSON 的一致性 +- **缩略图分布式锁使用 Redis 实现,TTL 配置需大于最慢渲染时间** ```mermaid classDiagram @@ -185,13 +198,20 @@ class RedisConfig { } class FileProperties { +redis相关字段 ++thumbnail.lockTtl : Duration +} +class ThumbnailGenerationTask { ++generateWithLock(fileId) ++lockTtl配置 } RedisConfig <.. FileProperties : "使用Redis进行会话/缓存" +RedisConfig <.. ThumbnailGenerationTask : "分布式锁" ``` **图表来源** - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) **章节来源** - [application.yml](file://crm-app/src/main/resources/application.yml) @@ -201,6 +221,7 @@ RedisConfig <.. FileProperties : "使用Redis进行会话/缓存" ### MinIO 文件存储配置 - MinIO 端点、AccessKey、SecretKey、Bucket 名称、URL 前缀等由 application.yml 提供 - FileProperties 绑定文件相关配置(如分片大小、路径策略),MinioConfig 初始化客户端 +- **缩略图存储在 thumbnails/{fileId}.jpg 路径下** ```mermaid sequenceDiagram @@ -213,11 +234,13 @@ App->>Minio : 初始化客户端 Minio->>Client : 构建连接(端点/密钥/Bucket) Client-->>Minio : 客户端实例 Minio-->>App : 返回可用客户端 +Note over Client : 缩略图存储 : thumbnails/{fileId}.jpg ``` **图表来源** - [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) - [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) **章节来源** - [application.yml](file://crm-app/src/main/resources/application.yml) @@ -228,6 +251,7 @@ Minio-->>App : 返回可用客户端 ### JWT 安全配置 - Spring Security 与 JWT 过滤器协同工作,TokenService 负责令牌签发、校验与刷新 - AuthProperties 可能包含 JWT 密钥、过期时间、白名单等 +- **验证环境支持调试接口和缩略图接口权限豁免** ```mermaid sequenceDiagram @@ -240,6 +264,7 @@ Filter->>Token : 解析并校验令牌 Token-->>Filter : 校验结果 Filter->>Sec : 设置认证上下文 Sec-->>Client : 放行或拒绝 +Note over Sec : 验证环境 : /api/file/thumbnail 豁免鉴权 ``` **图表来源** @@ -247,9 +272,11 @@ Sec-->>Client : 放行或拒绝 - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [AuthProperties.java](file://crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) **章节来源** - [application.yml](file://crm-auth/src/main/resources/application.yml) +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) @@ -278,11 +305,84 @@ Sec-->>Client : 放行或拒绝 - [ScheduledTaskProperties.java](file://crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java) - [SnowflakeProperties.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java) +### 缩略图配置系统(新增) +**更新** 新增完整的缩略图配置类,支持多种文件类型的缩略图生成 + +#### 缩略图基本配置 +- **width**: 缩略图固定宽度(px),默认 200,等比缩放 +- **maxHeight**: 缩略图等比缩放上限高度(px),防止超长截图,默认 400 +- **format**: 输出格式(jpeg/png),默认 jpeg +- **syncWaitTimeout**: 同步兜底等待超时,PENDING 状态获锁失败后的轮询上限,默认 10秒 + +#### 缩略图重试策略 +- **retryLimit**: 最大重试次数,达到后标记 FAILED,默认 3次 +- **retryCron**: FAILED 重试扫描周期(cron),默认每天凌晨 4点 +- **lockTtl**: 生成分布式锁 TTL,必须大于 officeConvertTimeout,默认 150秒 + +#### LibreOffice 配置 +- **libreofficePath**: LibreOffice 可执行文件路径,默认 soffice +- **officeConvertTimeout**: LibreOffice 单次转换超时(大文档首页渲染可能较慢),默认 120秒 + +```mermaid +flowchart TD +Upload["文件上传"] --> CheckType{"文件类型检查"} +CheckType --> |图片| ImgThumb["图片缩略图
ImageThumbnailRenderer"] +CheckType --> |PDF| PdfThumb["PDF缩略图
PdfThumbnailRenderer"] +CheckType --> |Office| OfficeThumb["Office缩略图
OfficeThumbnailRenderer"] +CheckType --> |不支持| Unsupported["UNSUPPORTED
跳过生成"] +ImgThumb --> AsyncGen["异步生成
ThumbnailGenerationTask"] +PdfThumb --> AsyncGen +OfficeThumb --> AsyncGen +AsyncGen --> Success{"生成成功?"} +Success --> |是| Ready["READY
存储到MinIO"] +Success --> |否| RetryCount{"重试次数
未达上限?"} +RetryCount --> |是| Pending["PENDING
等待下次重试"] +RetryCount --> |否| Failed["FAILED
标记失败"] +Pending --> RetryTask["ThumbnailRetryTask
定时重试"] +RetryTask --> AsyncGen +``` + +**图表来源** +- [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) +- [ImageThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java) +- [PdfThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java) +- [OfficeThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java) + +**章节来源** +- [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [ThumbnailRetryTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java) +- [ImageThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java) +- [PdfThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java) +- [OfficeThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java) +- [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) + +### 验证环境配置(新增) +**更新** 新增 application-verify.yml 验证环境专用配置 + +#### 验证环境特性 +- **Profile**: verify 专用环境,严禁用于生产 +- **调试接口**: /api/auth/debug/token 直接签发 JWT,绕过钉钉扫码 +- **权限豁免**: /api/file/thumbnail 缩略图接口无需鉴权 +- **部署环境**: 内网验证环境 172.16.204.61 的 docker-compose + +#### 安全护栏 +- @Profile("verify") 注解确保生产环境不激活 +- 启动期打印 WARN 日志留审计痕迹 +- 端点在 ignore-urls 中明确放行 + +**章节来源** +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) + ## 依赖关系分析 - 配置类之间低耦合,主要通过 application.yml 解耦 - 安全模块依赖 Redis(可选用于黑名单/限流)、JWT(无状态) -- 文件模块依赖 MinIO 与 Redis(分片会话) +- 文件模块依赖 MinIO 与 Redis(分片会话、缩略图锁) - 数据访问模块依赖 MyBatis-Plus 与数据库 +- **缩略图系统依赖渲染器列表、Redis 分布式锁、MinIO 存储** ```mermaid graph TB @@ -292,6 +392,10 @@ FILE["文件模块"] --> MINIO["MinIO"] FILE --> REDIS DB["数据访问模块"] --> MP["MyBatis-Plus"] MP --> MYSQL["数据库"] +THUMB["缩略图系统"] --> RENDERERS["渲染器"] +THUMB --> REDIS +THUMB --> MINIO +RENDERERS --> LIBREOFFICE["LibreOffice"] ``` **图表来源** @@ -301,6 +405,8 @@ MP --> MYSQL["数据库"] - [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) +- [ThumbnailGenerationTask.java](file://crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java) +- [OfficeThumbnailRenderer.java](file://crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java) **章节来源** - [application.yml](file://crm-app/src/main/resources/application.yml) @@ -313,8 +419,7 @@ MP --> MYSQL["数据库"] - Jackson:关闭不必要的序列化特性,减少 CPU 消耗 - 日志:生产环境降低日志级别,避免 I/O 瓶颈 - 调度:避免高频任务导致资源争用 - -[本节为通用指导,不直接分析具体文件] +- **缩略图:合理设置 width/maxHeight 平衡清晰度与性能,调整 retryLimit 避免无限重试,优化 lockTtl 防止重复生成** ## 故障排查指南 - 数据库连接失败:检查 URL、用户名、密码、驱动、网络连通性;查看连接池报错 @@ -322,6 +427,7 @@ MP --> MYSQL["数据库"] - MinIO 上传失败:校验端点、AccessKey/SecretKey、Bucket 权限;检查网络与代理 - JWT 鉴权失败:检查密钥一致性、过期时间、白名单配置;查看过滤器日志 - 日志过多:临时提升日志级别定位问题,恢复后回退到生产级别 +- **缩略图生成失败:检查 LibreOffice 路径配置、文件格式支持、渲染器可用性;查看重试计数和失败状态** **章节来源** - [application.yml](file://crm-app/src/main/resources/application.yml) @@ -330,11 +436,10 @@ MP --> MYSQL["数据库"] - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) +- [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) ## 结论 -通过统一的 application.yml 与各模块配置类,本项目实现了可维护、可扩展的配置管理。结合环境变量覆盖与合理的默认值,可在不同环境中快速部署与调优。建议在生产环境严格校验配置、限制敏感信息暴露,并结合监控告警保障稳定性。 - -[本节为总结,不直接分析具体文件] +通过统一的 application.yml 与各模块配置类,本项目实现了可维护、可扩展的配置管理。**新增的缩略图配置系统提供了完整的文件预览能力,支持多种文件格式的智能生成和重试机制**。结合环境变量覆盖与合理的默认值,可在不同环境中快速部署与调优。建议在生产环境严格校验配置、限制敏感信息暴露,并结合监控告警保障稳定性。 ## 附录 @@ -344,26 +449,35 @@ MP --> MYSQL["数据库"] [本节为概念性说明,不直接分析具体文件] -### 配置模板(开发、测试、生产) +### 配置模板(开发、测试、生产、验证) 以下为推荐的环境模板要点(示例,非代码片段): - 开发环境 - 数据库:本地 MySQL,调试模式开启,SQL 打印 - Redis:本地或开发集群,连接池较小 - MinIO:本地 MinIO,Bucket 自动创建 - JWT:短过期时间,宽松白名单 + - 缩略图:LibreOffice 本地安装,宽度和高度适中 - 日志:DEBUG - 测试环境 - 数据库:独立测试库,隔离数据 - Redis:测试集群,禁用持久化 - MinIO:测试桶,预置样例文件 - JWT:中等过期时间,严格白名单 + - 缩略图:LibreOffice 容器化部署,优化转换超时 - 日志:INFO - 生产环境 - 数据库:高可用集群,连接池优化,慢查询日志 - Redis:生产集群,连接池与序列化优化 - MinIO:生产桶,CDN 加速,访问审计 - JWT:长过期时间+刷新机制,强校验 + - 缩略图:LibreOffice 集群部署,合理配置重试和超时 - 日志:WARN/ERROR,集中采集 +- **验证环境** + - Profile:verify 专用环境 + - 调试接口:启用 /api/auth/debug/token + - 权限豁免:缩略图接口无需鉴权 + - 部署:docker-compose 一键部署 + - 安全:仅限内网验证环境使用 [本节为概念性说明,不直接分析具体文件] @@ -371,6 +485,7 @@ MP --> MYSQL["数据库"] - 必填项校验:数据库 URL、用户名、密码;MinIO 端点、密钥、Bucket;JWT 密钥 - 类型校验:端口为整数、超时时间为正数、布尔开关合法 - 范围校验:连接池大小、分片大小、过期时间区间 +- **缩略图校验:width/maxHeight 为正数、retryLimit ≥ 1、lockTtl > officeConvertTimeout** - 建议:在启动阶段进行配置校验,失败则快速失败并给出明确错误信息 [本节为概念性说明,不直接分析具体文件] @@ -379,6 +494,7 @@ MP --> MYSQL["数据库"] - 引入配置中心:Nacos/Apollo/Spring Cloud Config - 使用 @RefreshScope 刷新 Bean 或监听配置变更事件 - 对敏感配置(密钥)采用加密存储与动态轮换 +- **缩略图配置热更新:支持运行时调整生成参数和重试策略** [本节为概念性说明,不直接分析具体文件] @@ -388,5 +504,46 @@ MP --> MYSQL["数据库"] - 版本化管理:配置文件纳入版本控制,变更留痕 - 监控与告警:连接失败、超时、鉴权失败等指标接入监控 - 灰度发布:先小流量验证配置变更效果 +- **缩略图最佳实践:根据业务需求调整尺寸和格式,合理配置重试策略,监控 LibreOffice 资源使用情况** -[本节为概念性说明,不直接分析具体文件] \ No newline at end of file +[本节为概念性说明,不直接分析具体文件] + +### 缩略图配置详解 +**更新** 详细的缩略图配置项说明: + +#### 基本配置项 +- `crm.file.thumbnail.width`: 缩略图宽度(像素),默认 200 +- `crm.file.thumbnail.maxHeight`: 最大高度(像素),默认 400 +- `crm.file.thumbnail.format`: 输出格式,支持 jpeg/png,默认 jpeg +- `crm.file.thumbnail.syncWaitTimeout`: 同步等待超时,默认 10秒 + +#### 重试策略配置 +- `crm.file.thumbnail.retryLimit`: 最大重试次数,默认 3 +- `crm.file.thumbnail.retryCron`: 重试任务 cron 表达式,默认 "0 0 4 * * ?" +- `crm.file.thumbnail.lockTtl`: 分布式锁 TTL,默认 150秒 + +#### LibreOffice 配置 +- `crm.file.thumbnail.libreofficePath`: LibreOffice 路径,默认 soffice +- `crm.file.thumbnail.officeConvertTimeout`: 转换超时,默认 120秒 + +**章节来源** +- [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) +- [application.yml](file://crm-app/src/main/resources/application.yml) + +### 验证环境配置详解 +**更新** 验证环境专用配置说明: + +#### 环境特性 +- 激活方式:SPRING_PROFILES_ACTIVE=verify +- 调试接口:/api/auth/debug/token 直接签发 JWT +- 权限豁免:/api/file/thumbnail 无需鉴权 +- 安全警告:启动期打印 WARN 日志 + +#### 部署说明 +- 目标环境:172.16.204.61 内网验证环境 +- 部署方式:docker-compose 一键部署 +- 数据安全:验证完毕后可清理容器和数据卷 + +**章节来源** +- [application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) +- [DebugTokenController.java](file://crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java) \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/项目概览/模块说明/基础框架模块(crm-base)/基础框架模块(crm-base).md b/.qoder/repowiki/zh/content/项目概览/模块说明/基础框架模块(crm-base)/基础框架模块(crm-base).md index 867f068..69bbcbc 100644 --- a/.qoder/repowiki/zh/content/项目概览/模块说明/基础框架模块(crm-base)/基础框架模块(crm-base).md +++ b/.qoder/repowiki/zh/content/项目概览/模块说明/基础框架模块(crm-base)/基础框架模块(crm-base).md @@ -46,8 +46,30 @@ - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [LoginUser.java](file://crm-base/src/main/java/com/crm/base/security/LoginUser.java) - [SecurityUtils.java](file://crm-base/src/main/java/com/crm/base/security/SecurityUtils.java) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupDefault.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroupDefault.java) +- [DictRefCount.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictRefCount.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [DictGroupController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java) +- [DictItemController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java) +- [IDictGroupService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java) +- [IDictItemService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictPermissionInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java) +- [DictConstants.java](file://crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java) +## 更新摘要 +**变更内容** +- 更新了数据字典模块的VO设计架构,DictGroupVO和DictItemVO现在使用独立字段定义而非继承实体类 +- 增强了API设计的清晰度和安全性,通过明确的字段暴露控制敏感信息 +- 优化了服务层实现以适配新的VO结构,提升了数据转换效率 +- 完善了VO设计模式的最佳实践说明 + ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) @@ -63,6 +85,8 @@ ## 简介 本模块为 CRM 后端的基础设施层,提供通用实体、分页与结果封装、全局异常处理、数据访问层封装、工具类以及 MyBatis Plus、Redis、雪花ID等关键配置。通过统一的设计模式与约定,降低业务模块重复开发成本,提升一致性与可维护性。 +**更新** 新增 crm-dict 数据字典模块,作为独立的服务模块提供平台级键值字典管理能力,支持分组管理、字典项管理、引用计数和权限集成等功能。该模块采用了先进的VO设计模式,通过独立的视图对象定义提升了API的安全性和清晰度。 + ## 项目结构 crm-base 采用分层组织: - domain:通用实体、DTO、参数、枚举、异常、结果封装 @@ -72,72 +96,60 @@ crm-base 采用分层组织: - security:数据权限控制、可见性上下文、登录用户模型与安全工具 - utils:通用工具集(断言、拷贝、枚举、Excel、分页转换、Servlet、树形结构) +**更新** crm-dict 模块结构: +- controller:字典分组和字典项的管理接口 +- service:字典查询、引用计数、分组和字典项的业务逻辑 +- domain:字典实体、DTO、参数定义,采用独立VO设计模式 +- config:内置数据初始化、权限种子化配置 +- constant:字典模块常量定义 + ```mermaid graph TB -subgraph "领域模型" +subgraph "基础框架 (crm-base)" A["BaseEntity / OwnedEntity"] B["BaseDTO / BaseParam"] C["Result / PageResult / ResultCodeEnum"] D["StatusEnum / HasValueEnum"] +E["MybatisPlusConfig / CrmSqlInjector"] +F["RedisConfig / JacksonConfig"] +G["GlobalExceptionHandlerAdvice"] +H["DataScope / SecurityUtils"] end -subgraph "数据访问" -E["CrmBaseMapper"] -F["IBaseService / BaseServiceImpl"] -G["MybatisPlusConfig / CrmSqlInjector / MetaObjectFillHandler"] -H["CustomIdGenerator / SnowflakeIdWorker"] -end -subgraph "运行时配置" -I["RedisConfig"] -J["JacksonConfig"] -K["Knife4jConfig"] -L["CorsConfig"] -M["InsertBatchOnDuplicateKeyUpdate"] +subgraph "数据字典 (crm-dict)" +I["DictGroup / DictItem"] +J["DictGroupVO / DictItemVO"] +K["DictGroupController / DictItemController"] +L["IDictGroupService / IDictItemService"] +M["DictDataInitializer / DictPermissionInitializer"] +N["DictConstants"] end -subgraph "横切关注点" -N["GlobalExceptionHandlerAdvice"] -O["TraceIdFilter"] -P["DataScope / DataScopeHelper / DataVisibilityContext"] -Q["SecurityUtils / LoginUser"] -end -A --> F -B --> F -C --> F -E --> F -G --> E -H --> G -I --> F -J --> F -K --> F -L --> F -M --> G -N --> F -O --> F -P --> F -Q --> P +A --> L +B --> L +C --> K +E --> L +F --> M +G --> K +H --> K +I --> J +J --> K +L --> E +M --> I +N --> L ``` -图表来源 -- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) -- [CrmSqlInjector.java](file://crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java) -- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) -- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java) -- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java) -- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) -- [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java) -- [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) -- [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java) -- [InsertBatchOnDuplicateKeyUpdate.java](file://crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java) -- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) -- [TraceIdFilter.java](file://crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java) -- [DataScope.java](file://crm-base/src/main/java/com/crm/base/annotation/DataScope.java) -- [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) -- [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) -- [SecurityUtils.java](file://crm-base/src/main/java/com/crm/base/security/SecurityUtils.java) -- [LoginUser.java](file://crm-base/src/main/java/com/crm/base/security/LoginUser.java) - -章节来源 +**图表来源** - [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) -- [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [DictGroupController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java) +- [IDictGroupService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) + +**章节来源** +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) - [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) @@ -175,7 +187,15 @@ Q --> P - 工具类 - AssertUtils、BeanCopyUtils、EnumUtils、ExcelUtil、PageConverter、ServletUtils、TreeUtils。 -章节来源 +**更新** 数据字典核心组件: +- 字典实体:DictGroup(分组)、DictItem(字典项)、DictGroupDefault(默认项)、DictRefCount(引用计数) +- **VO设计模式**:DictGroupVO和DictItemVO采用独立字段定义,不继承实体类,提供更清晰的API契约 +- 控制器:DictGroupController、DictItemController 提供 RESTful API +- 服务层:IDictGroupService、IDictItemService 定义业务接口 +- 初始化器:DictDataInitializer(内置数据)、DictPermissionInitializer(权限种子) +- 常量定义:DictConstants 包含状态码、权限码、缓存配置等 + +**章节来源** - [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) - [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java) - [BaseDTO.java](file://crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java) @@ -209,14 +229,37 @@ Q --> P - [PageConverter.java](file://crm-base/src/main/java/com/crm/base/utils/PageConverter.java) - [ServletUtils.java](file://crm-base/src/main/java/com/crm/base/utils/ServletUtils.java) - [TreeUtils.java](file://crm-base/src/main/java/com/crm/base/utils/TreeUtils.java) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupDefault.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroupDefault.java) +- [DictRefCount.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictRefCount.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [DictGroupController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java) +- [DictItemController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java) +- [IDictGroupService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java) +- [IDictItemService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictPermissionInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java) +- [DictConstants.java](file://crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java) ## 架构总览 -基础框架围绕“实体-服务-Mapper”三层展开,辅以配置中心与横切能力: +基础框架围绕"实体-服务-Mapper"三层展开,辅以配置中心与横切能力: - 实体层:BaseEntity/OwnedEntity 提供统一字段与审计;OwnedEntity 承载数据归属。 - 服务层:IBaseService/BaseServiceImpl 提供 CRUD、分页、批量操作与事务边界。 - 数据层:CrmBaseMapper 扩展通用 SQL;MyBatis Plus 插件负责分页、填充、ID 生成。 - 横切:全局异常、数据权限、请求追踪、序列化、缓存、API 文档、跨域。 +**更新** 新增 crm-dict 模块架构: +- 独立服务模块:基于 crm-base 构建,不依赖 crm-auth 具体实现 +- 两级字典结构:分组 → 字典项,支持内置和用户字典分离 +- **VO设计模式**:采用独立的视图对象(DictGroupVO、DictItemVO)替代实体继承,提升API安全性和清晰度 +- 引用计数机制:跟踪字典项使用情况,防止误删 +- 权限集成:通过权限码契约与 crm-auth 解耦集成 +- 本地缓存:使用 Caffeine 提供高性能字典查询缓存 + ```mermaid classDiagram class BaseEntity { @@ -229,25 +272,58 @@ class OwnedEntity { +ownerId +deptId } -class BaseDTO -class BaseParam { -+pageNo -+pageSize -+orderBy +class DictGroup { ++code ++name ++status ++builtin ++deleteKey } -class Result~T~ { +class DictItem { ++groupId +code -+message -+data ++name ++value ++status ++builtin ++deleteKey } -class PageResult~T~ { -+records -+total -+pages -+current -+size +class DictGroupVO { ++id ++name ++code ++sortNo ++status ++description ++builtin ++createTime ++itemCount +} +class DictItemVO { ++id ++groupId ++name ++code ++value ++sortNo ++status ++description ++builtin ++createTime ++groupName ++isDefault ++referenced ++effectiveSelectable +} +class DictGroupDefault { ++groupId ++itemId +} +class DictRefCount { ++groupCode ++itemCode ++refCount } -class CrmBaseMapper class IBaseService~T~ { +save(entity) +updateById(entity) @@ -257,58 +333,47 @@ class IBaseService~T~ { +page(param) +batchSave(list) } -class BaseServiceImpl~T~ { -+mapper -+save() -+updateById() -+removeById() -+getById() -+list() -+page() -+batchSave() +class IDictGroupService { ++pageGroups(param) ++saveGroup(group) ++deleteGroup(id) ++updateGroupStatus(id, status) ++listEnabled() } -class MybatisPlusConfig -class MetaObjectFillHandler -class CustomIdGenerator -class SnowflakeIdWorker -class RedisConfig -class GlobalExceptionHandlerAdvice -class DataScopeHelper -class DataVisibilityContext -class SecurityUtils -class LoginUser +class IDictItemService { ++pageItems(param) ++saveItem(item) ++deleteItem(id) ++forceDeleteItem(id) ++updateItemStatus(id, status) ++setDefault(groupId, itemId) +} +class DictDataInitializer +class DictPermissionInitializer OwnedEntity --|> BaseEntity -BaseServiceImpl --> CrmBaseMapper : "使用" -BaseServiceImpl --> IBaseService : "实现" -MybatisPlusConfig --> MetaObjectFillHandler : "注册" -MybatisPlusConfig --> CustomIdGenerator : "注册" -CustomIdGenerator --> SnowflakeIdWorker : "调用" -BaseServiceImpl --> RedisConfig : "可选缓存" -GlobalExceptionHandlerAdvice --> Result : "返回" -DataScopeHelper --> DataVisibilityContext : "读写上下文" -SecurityUtils --> LoginUser : "获取用户" +DictGroup --> DictGroupDefault : "一对多" +DictItem --> DictRefCount : "引用计数" +IDictGroupService --> IBaseService : "继承" +IDictItemService --> IBaseService : "继承" +DictDataInitializer --> DictGroup : "初始化" +DictDataInitializer --> DictItem : "初始化" +DictPermissionInitializer --> DictGroup : "权限绑定" ``` -图表来源 +**图表来源** - [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) - [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java) -- [BaseDTO.java](file://crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java) -- [BaseParam.java](file://crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java) -- [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) -- [PageResult.java](file://crm-base/src/main/java/com/crm/base/domain/result/PageResult.java) -- [CrmBaseMapper.java](file://crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [DictGroupDefault.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroupDefault.java) +- [DictRefCount.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictRefCount.java) - [IBaseService.java](file://crm-base/src/main/java/com/crm/base/service/IBaseService.java) -- [BaseServiceImpl.java](file://crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java) -- [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) -- [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) -- [CustomIdGenerator.java](file://crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java) -- [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java) -- [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) -- [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) -- [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) -- [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) -- [SecurityUtils.java](file://crm-base/src/main/java/com/crm/base/security/SecurityUtils.java) -- [LoginUser.java](file://crm-base/src/main/java/com/crm/base/security/LoginUser.java) +- [IDictGroupService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java) +- [IDictItemService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictPermissionInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java) ## 详细组件分析 @@ -332,11 +397,11 @@ class OwnedEntity { OwnedEntity --|> BaseEntity ``` -图表来源 +**图表来源** - [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) - [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java) -章节来源 +**章节来源** - [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) - [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java) - [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) @@ -355,7 +420,7 @@ Convert --> Wrap["包装为 PageResult"] Wrap --> Return["返回 Result.success(PageResult)"] ``` -图表来源 +**图表来源** - [PageResult.java](file://crm-base/src/main/java/com/crm/base/domain/result/PageResult.java) - [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) - [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java) @@ -363,7 +428,7 @@ Wrap --> Return["返回 Result.success(PageResult)"] - [IBaseService.java](file://crm-base/src/main/java/com/crm/base/service/IBaseService.java) - [BaseServiceImpl.java](file://crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java) -章节来源 +**章节来源** - [PageResult.java](file://crm-base/src/main/java/com/crm/base/domain/result/PageResult.java) - [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) - [ResultCodeEnum.java](file://crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java) @@ -388,13 +453,13 @@ MP-->>S : "分页对象" S-->>C : "PageResult" ``` -图表来源 +**图表来源** - [CrmBaseMapper.java](file://crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java) - [IBaseService.java](file://crm-base/src/main/java/com/crm/base/service/IBaseService.java) - [BaseServiceImpl.java](file://crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java) - [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) -章节来源 +**章节来源** - [CrmBaseMapper.java](file://crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java) - [IBaseService.java](file://crm-base/src/main/java/com/crm/base/service/IBaseService.java) - [BaseServiceImpl.java](file://crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java) @@ -415,7 +480,7 @@ Catch --> Map["映射为 Result.error(code,message)"] Map --> End(["返回统一响应"]) ``` -图表来源 +**图表来源** - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [BusinessErrorException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java) - [MissingParameterException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java) @@ -423,7 +488,7 @@ Map --> End(["返回统一响应"]) - [ResourceNotExistException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java) - [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) -章节来源 +**章节来源** - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [BusinessErrorException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java) - [MissingParameterException.java](file://crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java) @@ -449,14 +514,14 @@ DS-->>S : "返回过滤条件片段" S-->>U : "返回受限数据集合" ``` -图表来源 +**图表来源** - [DataScope.java](file://crm-base/src/main/java/com/crm/base/annotation/DataScope.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) - [SecurityUtils.java](file://crm-base/src/main/java/com/crm/base/security/SecurityUtils.java) - [LoginUser.java](file://crm-base/src/main/java/com/crm/base/security/LoginUser.java) -章节来源 +**章节来源** - [DataScope.java](file://crm-base/src/main/java/com/crm/base/annotation/DataScope.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) @@ -481,7 +546,7 @@ Fill --> Audit["自动填充审计字段"] Inject --> SQL["扩展通用 SQL"] ``` -图表来源 +**图表来源** - [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [CrmSqlInjector.java](file://crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java) - [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) @@ -489,7 +554,7 @@ Inject --> SQL["扩展通用 SQL"] - [SnowflakeIdWorker.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java) - [SnowflakeProperties.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java) -章节来源 +**章节来源** - [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [CrmSqlInjector.java](file://crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java) - [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) @@ -510,10 +575,10 @@ RConf --> TTL["设置默认过期策略"] App --> Use["业务模块使用 RedisTemplate"] ``` -图表来源 +**图表来源** - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) -章节来源 +**章节来源** - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) ### Jackson 与 API 文档、跨域 @@ -521,7 +586,7 @@ App --> Use["业务模块使用 RedisTemplate"] - Knife4jConfig:增强 Swagger 文档体验。 - CorsConfig:允许跨域访问,便于前后端分离开发。 -章节来源 +**章节来源** - [JacksonConfig.java](file://crm-base/src/main/java/com/crm/base/config/JacksonConfig.java) - [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) - [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java) @@ -535,7 +600,7 @@ App --> Use["业务模块使用 RedisTemplate"] - ServletUtils:HTTP 请求辅助。 - TreeUtils:树形结构构建。 -章节来源 +**章节来源** - [AssertUtils.java](file://crm-base/src/main/java/com/crm/base/utils/AssertUtils.java) - [BeanCopyUtils.java](file://crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java) - [EnumUtils.java](file://crm-base/src/main/java/com/crm/base/utils/EnumUtils.java) @@ -544,12 +609,203 @@ App --> Use["业务模块使用 RedisTemplate"] - [ServletUtils.java](file://crm-base/src/main/java/com/crm/base/utils/ServletUtils.java) - [TreeUtils.java](file://crm-base/src/main/java/com/crm/base/utils/TreeUtils.java) +### 数据字典模块详解 + +#### VO设计模式重构 +**更新** 数据字典模块采用了先进的VO设计模式,DictGroupVO和DictItemVO现在使用独立的字段定义而非继承实体类,显著提升了API设计的清晰度和安全性。 + +- **DictGroupVO**:专门用于分页列表展示的视图对象,只暴露前端需要的业务字段(id、name、code、sortNo、status、description、builtin、createTime、itemCount),排除了敏感的审计字段(creatorId/updaterId/updateTime/deleted)和软删内部字段(deleteKey)。 +- **DictItemVO**:字典项视图对象,包含丰富的展示字段(groupName、isDefault、referenced、effectiveSelectable),其中referenced字段实时读取引用计数,绝不进缓存,确保数据准确性。 + +```mermaid +classDiagram +class BaseEntity { ++id ++createTime ++updateTime ++deleted +} +class DictGroup { ++code ++name ++status ++builtin ++deleteKey +} +class DictItem { ++groupId ++code ++name ++value ++status ++builtin ++deleteKey +} +class DictGroupVO { ++id ++name ++code ++sortNo ++status ++description ++builtin ++createTime ++itemCount +} +class DictItemVO { ++id ++groupId ++name ++code ++value ++sortNo ++status ++description ++builtin ++createTime ++groupName ++isDefault ++referenced ++effectiveSelectable +} +DictGroup --> DictGroupVO : "toDTO()" +DictItem --> DictItemVO : "toDTO()" +``` + +**图表来源** +- [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) + +#### 核心实体设计 +- **DictGroup(字典分组)**:字典的第一级容器,具有全局唯一编码,创建后不可修改。支持内置标记区分平台内置和用户自定义字典。 +- **DictItem(字典项)**:字典的第二级键值条目,身份由{分组ID, 编码}确定,创建后不可修改。支持字典值同组唯一约束。 +- **DictGroupDefault(分组默认项)**:通过主键约束保证每组最多一个默认项,独立表存储避免污染字典项实体。 +- **DictRefCount(引用计数)**:跟踪字典项被业务数据引用的次数,防止误删已使用的字典项。 + +```mermaid +classDiagram +class DictGroup { ++Long id ++String code ++String name ++Integer sortNo ++Integer status ++Boolean builtin ++Long deleteKey +} +class DictItem { ++Long id ++Long groupId ++String code ++String name ++String value ++Integer sortNo ++Integer status ++Boolean builtin ++Long deleteKey +} +class DictGroupDefault { ++Long groupId ++Long itemId +} +class DictRefCount { ++String groupCode ++String itemCode ++Integer refCount +} +DictGroup "1" --> "0..*" DictItem : "拥有" +DictGroup "1" --> "0..1" DictGroupDefault : "默认项" +DictItem "1" --> "0..1" DictRefCount : "引用计数" +``` + +**图表来源** +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupDefault.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroupDefault.java) +- [DictRefCount.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictRefCount.java) + +#### 控制器与服务层 +- **DictGroupController**:提供分组管理的 RESTful API,包括分页查询、新建编辑、删除、启停等操作。 +- **DictItemController**:提供字典项管理的 RESTful API,支持分页查询、CRUD、默认项设置、强制删除等功能。 +- **IDictGroupService/IDictItemService**:定义业务接口,继承 IBaseService 获得通用 CRUD 能力。 +- **DictGroupServiceImpl**:实现分组业务逻辑,包含数据验证、权限检查、事务管理等。 + +```mermaid +sequenceDiagram +participant Client as "客户端" +participant Controller as "DictGroupController" +participant Service as "IDictGroupService" +participant DB as "数据库" +Client->>Controller : POST /api/dict/group/saveOrUpdate +Controller->>Service : saveGroup(DictGroup) +Service->>Service : 数据验证与权限检查 +Service->>DB : INSERT/UPDATE dict_group +DB-->>Service : 操作结果 +Service-->>Controller : 业务结果 +Controller-->>Client : Result.success() +``` + +**图表来源** +- [DictGroupController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java) +- [IDictGroupService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) + +#### 初始化与权限集成 +- **DictDataInitializer**:应用启动时执行内置字典的幂等初始化,支持 Excel 替换口,保护用户字典不被覆盖。 +- **DictPermissionInitializer**:权限种子化,将 10 个 dict:* 权限点注入到权限资源树,并与管理员角色绑定。 +- **DictConstants**:集中定义状态码、权限码、缓存配置、错误码等常量。 + +```mermaid +flowchart TD +Startup["应用启动"] --> DataInit["DictDataInitializer.run()"] +Startup --> PermInit["DictPermissionInitializer.run()"] +DataInit --> Validate["校验种子数据"] +Validate --> UpsertGroup["upsertGroup()"] +UpsertGroup --> UpsertItem["upsertItem()"] +UpsertItem --> SetDefault["setDefaultIfAbsent()"] +PermInit --> CreateMenu["创建菜单节点"] +CreateMenu --> CreateButtons["创建权限按钮"] +CreateButtons --> BindRole["绑定管理员角色"] +``` + +**图表来源** +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictPermissionInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java) +- [DictConstants.java](file://crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java) + +**章节来源** +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupDefault.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroupDefault.java) +- [DictRefCount.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictRefCount.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [DictGroupController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java) +- [DictItemController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java) +- [IDictGroupService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java) +- [IDictItemService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictPermissionInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java) +- [DictConstants.java](file://crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java) + ## 依赖关系分析 - 实体与服务:BaseEntity/OwnedEntity 被 BaseServiceImpl 广泛使用;IBaseService 定义契约。 - 数据访问:CrmBaseMapper 被 BaseServiceImpl 依赖;MyBatis Plus 插件贯穿整个数据层。 - 横切:GlobalExceptionHandlerAdvice 作用于所有 Controller;DataScopeHelper 与 DataVisibilityContext 影响查询条件。 - 外部依赖:Redis 用于缓存;Jackson 用于序列化;Knife4j 用于文档;Cors 用于跨域。 +**更新** 新增 crm-dict 模块依赖关系: +- crm-dict 仅依赖 crm-base,不直接依赖 crm-auth,通过权限码契约解耦 +- 使用 Caffeine 本地缓存提升字典查询性能 +- 通过 CommandLineRunner 实现启动时初始化 +- 与 crm-auth 通过权限资源树间接集成 +- **VO设计模式**:通过独立的视图对象减少了实体与API的直接耦合 + ```mermaid graph LR Entity["BaseEntity/OwnedEntity"] --> Service["IBaseService/BaseServiceImpl"] @@ -561,9 +817,15 @@ Service --> Cache["RedisConfig"] Controller["业务Controller"] --> Service Controller --> Exception["GlobalExceptionHandlerAdvice"] Service --> Scope["DataScopeHelper/DataVisibilityContext"] +DictModule["crm-dict 模块"] --> BaseModule["crm-base 模块"] +DictModule --> Caffeine["Caffeine 缓存"] +DictModule --> AuthContract["权限码契约"] +AuthContract --> AuthModule["crm-auth 模块"] +DictModule --> VOPattern["VO设计模式"] +VOPattern --> APIClear["清晰的API契约"] ``` -图表来源 +**图表来源** - [BaseEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java) - [OwnedEntity.java](file://crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java) - [IBaseService.java](file://crm-base/src/main/java/com/crm/base/service/IBaseService.java) @@ -577,12 +839,14 @@ Service --> Scope["DataScopeHelper/DataVisibilityContext"] - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) - [DataVisibilityContext.java](file://crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java) +- [pom.xml](file://crm-dict/pom.xml) -章节来源 +**章节来源** - [BaseServiceImpl.java](file://crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java) - [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) +- [pom.xml](file://crm-dict/pom.xml) ## 性能考量 - 分页查询:优先使用 MyBatis Plus 分页插件,避免全表扫描;合理设计索引。 @@ -591,6 +855,14 @@ Service --> Scope["DataScopeHelper/DataVisibilityContext"] - 序列化:Jackson 配置统一时区与空值策略,减少序列化开销。 - 审计填充:MetaObjectFillHandler 仅在必要时填充,避免多余数据库写操作。 +**更新** 数据字典性能优化: +- 使用 Caffeine 本地缓存提供 10s TTL 的字典查询缓存 +- 空结果缓存 2s 防穿透,避免缓存击穿 +- 引用计数表不缓存,保证数据一致性 +- 聚合查询优化:分组分页时一次性查询字典项数量 +- 默认排序优化:sort_no IS NULL, sort_no ASC, create_time ASC +- **VO设计优化**:通过独立的VO对象减少数据传输量,提升网络传输效率 + [本节为通用指导,不直接分析具体文件] ## 故障排查指南 @@ -601,7 +873,15 @@ Service --> Scope["DataScopeHelper/DataVisibilityContext"] - 缓存问题:检查 Redis 连接与序列化配置,确认 key 命名规范与过期策略。 - 跨域与文档:验证 CorsConfig 与 Knife4jConfig 配置是否符合前端需求。 -章节来源 +**更新** 数据字典故障排查: +- 初始化失败:检查 DictDataInitializer 的种子数据合法性,确认 fail-fast 机制 +- 权限问题:验证 DictPermissionInitializer 是否正确创建菜单和权限点 +- 缓存不一致:检查 Caffeine 缓存配置,确认 TTL 设置合理 +- 引用计数异常:监控 DictRefCount 表的计数准确性,必要时使用强制删除功能 +- 内置字典保护:确认 builtin=true 的字典项无法被删除或修改关键字段 +- **VO设计问题**:检查DictGroupVO和DictItemVO的字段映射是否正确,确保toDTO方法正常工作 + +**章节来源** - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [DataScopeHelper.java](file://crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java) - [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) @@ -609,10 +889,14 @@ Service --> Scope["DataScopeHelper/DataVisibilityContext"] - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java) - [Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictPermissionInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java) ## 结论 crm-base 提供了完善的基础设施能力,涵盖实体设计、CRUD 封装、分页与结果统一、全局异常、数据权限、MyBatis Plus 扩展、Redis 缓存、雪花 ID 生成等。遵循本模块约定,可显著提升业务模块的开发效率与一致性。 +**更新** 新增 crm-dict 数据字典模块作为独立的基础设施服务,提供平台级的键值字典管理能力。该模块通过先进的VO设计模式重构,实现了更清晰的API契约和更高的安全性,同时通过解耦设计与权限码契约,实现了与认证模块的松耦合集成。VO设计模式的采用使得数据展示更加灵活可控,有效避免了敏感信息的泄露风险。 + [本节为总结性内容,不直接分析具体文件] ## 附录 @@ -633,6 +917,14 @@ crm-base 提供了完善的基础设施能力,涵盖实体设计、CRUD 封装 - 工具类 - 使用 AssertUtils 做前置校验;使用 BeanCopyUtils 进行对象转换;使用 PageConverter 转换分页对象。 +**更新** 数据字典最佳实践: +- 字典设计:优先使用内置字典,用户字典用于个性化需求 +- 编码规范:字典编码使用有意义的英文标识,避免使用数字 ID +- 引用管理:业务代码中正确使用引用计数增减,避免内存泄漏 +- 缓存策略:利用 Caffeine 本地缓存提升查询性能,注意缓存失效时机 +- 权限控制:通过权限码进行细粒度控制,避免硬编码权限判断 +- **VO设计模式**:采用独立的视图对象定义API契约,避免直接暴露实体字段,提升安全性和灵活性 + [本节为通用指导,不直接分析具体文件] ### 扩展开发指南 @@ -647,4 +939,12 @@ crm-base 提供了完善的基础设施能力,涵盖实体设计、CRUD 封装 - 新增全局异常类型 - 定义新的异常类,并在 GlobalExceptionHandlerAdvice 中添加对应的处理分支。 +**更新** 数据字典扩展指南: +- 新增字典分组:通过 DictGroupController 的 saveOrUpdate 接口创建新分组 +- 新增字典项:使用 DictItemController 的 saveOrUpdate 接口添加字典项 +- 扩展内置数据:修改 DictDataInitializer 中的 SEED_GROUPS 列表 +- 新增权限点:在 DictPermissionInitializer 中添加新的权限点种子 +- 自定义缓存策略:扩展 DictConstants 中的缓存配置参数 +- **VO扩展**:如需新增展示字段,应在DictGroupVO和DictItemVO中定义独立字段,而非修改实体类 + [本节为通用指导,不直接分析具体文件] \ No newline at end of file diff --git a/.qoder/repowiki/zh/content/项目概览/模块说明/模块说明.md b/.qoder/repowiki/zh/content/项目概览/模块说明/模块说明.md index 401acf6..028dd6a 100644 --- a/.qoder/repowiki/zh/content/项目概览/模块说明/模块说明.md +++ b/.qoder/repowiki/zh/content/项目概览/模块说明/模块说明.md @@ -98,8 +98,31 @@ - [MultipartInitDTO.java](file://crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java) - [UploadSession.java](file://crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java) - [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) +- [DictApplication.java](file://crm-dict/src/main/java/com/crm/dict/DictApplication.java) +- [pom.xml](file://crm-dict/pom.xml) +- [CONTEXT.md](file://crm-dict/CONTEXT.md) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [IDictGroupService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java) +- [IDictItemService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java) +- [DictQueryService.java](file://crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java) +- [DictGroupController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java) +- [DictItemController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictConstants.java](file://crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) +## 更新摘要 +**变更内容** +- 更新了数据字典模块的VO设计说明,强调内部实体模型与外部API契约的明确分离 +- 增强了分层架构设计的描述,体现更好的领域边界划分 +- 补充了VO类的设计理念和字段暴露策略 +- 更新了数据字典组件分析章节,包含VO设计优化的详细说明 + ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) @@ -117,6 +140,7 @@ - crm-auth(认证服务):负责用户认证、权限管理、第三方登录集成。 - crm-base(基础框架):提供通用能力,如分页、异常处理、数据权限、统一结果封装、工具类等。 - crm-file(文件服务):提供文件上传、下载、预览及分片断点续传等能力。 +- crm-dict(数据字典):提供两级平铺字典管理(分组→字典项),支持缓存、引用计数和内置字典初始化。 - crm-app(应用入口):作为统一启动入口,聚合各模块并加载配置。 文档将从模块职责、包结构、核心类与接口、依赖关系、通信方式、配置项、扩展点与自定义开发等方面进行全面说明,帮助开发者快速上手并进行深度定制。 @@ -132,25 +156,27 @@ end subgraph "业务模块" AUTH["crm-auth
认证与权限"] FILE["crm-file
文件服务"] +DICT["crm-dict
数据字典"] end subgraph "基础模块" BASE["crm-base
通用能力"] end APP --> AUTH APP --> FILE +APP --> DICT AUTH --> BASE FILE --> BASE +DICT --> BASE ``` -图表来源 -- [pom.xml](file://pom.xml) +**图表来源** +- [pom.xml:21-28](file://pom.xml#L21-L28) - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) -- [application.yml](file://crm-app/src/main/resources/application.yml) -- [application.yml](file://crm-auth/src/main/resources/application.yml) +- [DictApplication.java](file://crm-dict/src/main/java/com/crm/dict/DictApplication.java) -章节来源 -- [pom.xml](file://pom.xml) +**章节来源** +- [pom.xml:21-28](file://pom.xml#L21-L28) - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) @@ -167,33 +193,43 @@ FILE --> BASE - crm-file(文件服务) - 职责:文件上传(含分片)、下载、预览(对接kkFileView)、元信息持久化、定时清理孤儿分片。 - 关键包:api、config、constant、controller、domain、mapper、service、task。 +- crm-dict(数据字典) + - 职责:两级平铺字典管理(分组→字典项)、内置字典幂等初始化、本地缓存、引用计数、权限控制。 + - 关键包:config、constant、controller、domain、mapper、service。 + - 核心特性:Caffeine本地缓存(10s TTL)、软删除复用键、内置字典保护、引用计数机制。 + - **VO设计优化**:明确区分内部实体模型(Entity)和外部API契约(VO),提供更好的分层架构设计。 - crm-app(应用入口) - 职责:聚合模块、加载应用配置、启动Spring Boot应用。 -章节来源 +**章节来源** - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) +- [DictApplication.java](file://crm-dict/src/main/java/com/crm/dict/DictApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) - [application.yml](file://crm-auth/src/main/resources/application.yml) ## 架构总览 -下图展示模块间依赖与请求流转:应用入口聚合认证与文件模块,认证模块依赖基础框架的通用能力;文件模块同样依赖基础框架。 +下图展示模块间依赖与请求流转:应用入口聚合认证、文件和字典模块,各业务模块依赖基础框架的通用能力。 ```mermaid graph TB Client["客户端"] --> App["crm-app
CrmAppApplication"] App --> Auth["crm-auth
认证服务"] App --> File["crm-file
文件服务"] +App --> Dict["crm-dict
数据字典"] Auth --> Base["crm-base
基础框架"] File --> Base +Dict --> Base Auth --> DB["数据库"] File --> MinIO["对象存储"] File --> KK["kkFileView
预览服务"] +Dict --> Cache["Caffeine
本地缓存"] ``` -图表来源 +**图表来源** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) +- [DictApplication.java](file://crm-dict/src/main/java/com/crm/dict/DictApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) - [application.yml](file://crm-auth/src/main/resources/application.yml) @@ -229,7 +265,7 @@ C->>DS : "触发数据权限拦截" DS-->>C : "根据数据范围过滤查询" ``` -图表来源 +**图表来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [IAuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java) - [AuthServiceImpl.java](file://crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java) @@ -254,7 +290,7 @@ ThirdPartyAuthClient <|-- DingTalkAuthClient ThirdPartyAuthClientFactory --> ThirdPartyAuthClient : "创建/获取" ``` -图表来源 +**图表来源** - [ThirdPartyAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java) - [DingTalkAuthClient.java](file://crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java) - [ThirdPartyAuthClientFactory.java](file://crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java) @@ -272,7 +308,7 @@ Inject --> Proceed Proceed --> End(["返回结果"]) ``` -图表来源 +**图表来源** - [DataScopeInterceptor.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java) - [DataScopeTables.java](file://crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java) - [DataScope.java](file://crm-base/src/main/java/com/crm/base/annotation/DataScope.java) @@ -303,14 +339,14 @@ AuthUser --> SysDept : "多对多" AuthUser --> AuthIdentity : "一对多" ``` -图表来源 +**图表来源** - [AuthUser.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java) - [SysRole.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java) - [SysMenu.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java) - [SysDept.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java) - [AuthIdentity.java](file://crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java) -章节来源 +**章节来源** - [AuthController.java](file://crm-auth/src/main/java/com/crm/auth/controller/AuthController.java) - [SystemController.java](file://crm-auth/src/main/java/com/crm/auth/controller/SystemController.java) - [IAuthService.java](file://crm-auth/src/main/java/com/crm/auth/service/IAuthService.java) @@ -400,7 +436,7 @@ DataScopeHelper --> DataVisibilityContext : "使用" SecurityUtils --> LoginUser : "获取上下文" ``` -图表来源 +**图表来源** - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [Result.java](file://crm-base/src/main/java/com/crm/base/domain/result/Result.java) - [PageResult.java](file://crm-base/src/main/java/com/crm/base/domain/result/PageResult.java) @@ -414,7 +450,7 @@ SecurityUtils --> LoginUser : "获取上下文" - [BaseServiceImpl.java](file://crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java) - [IBaseService.java](file://crm-base/src/main/java/com/crm/base/service/IBaseService.java) -章节来源 +**章节来源** - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) @@ -490,7 +526,7 @@ C->>KK : "请求预览链接" KK-->>C : "返回预览地址" ``` -图表来源 +**图表来源** - [FileController.java](file://crm-file/src/main/java/com/crm/file/controller/FileController.java) - [FileApi.java](file://crm-file/src/main/java/com/crm/file/api/FileApi.java) - [FileApiImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java) @@ -501,7 +537,7 @@ KK-->>C : "返回预览地址" - [SchedulingConfig.java](file://crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java) - [OrphanChunkCleanupTask.java](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java) -章节来源 +**章节来源** - [FileController.java](file://crm-file/src/main/java/com/crm/file/controller/FileController.java) - [FileApi.java](file://crm-file/src/main/java/com/crm/file/api/FileApi.java) - [FileApiImpl.java](file://crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java) @@ -520,47 +556,191 @@ KK-->>C : "返回预览地址" - [UploadSession.java](file://crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java) - [FileConstants.java](file://crm-file/src/main/java/com/crm/file/constant/FileConstants.java) +### 数据字典(crm-dict) +- 包结构与职责 + - config:内置字典初始化、权限初始化。 + - constant:常量定义、权限码、错误码。 + - controller:分组和字典项的管理接口。 + - domain:实体(分组、字典项、默认项、引用计数)、DTO、参数。 + - mapper:数据访问映射。 + - service:分组服务、字典项服务、查询服务、引用服务。 +- 核心特性 + - 两级平铺结构:分组(第一级)→ 字典项(第二级) + - 内置字典保护:builtin=true的字典不可删除,支持幂等初始化 + - 引用计数机制:跟踪字典项被业务数据引用的次数 + - 本地缓存:Caffeine缓存,10秒TTL,空结果2秒防穿透 + - 软删除复用键:delete_key=id,支持编码复用 +- **VO设计优化**:明确区分内部实体模型和外部API契约,体现更好的分层架构设计 + - **DictGroupVO**:分页列表展示专用视图对象,仅暴露前端需要的业务字段 + createTime,排除审计字段和软删内部字段 + - **DictItemVO**:分页列表展示专用视图对象,包含实时引用计数(referenced)和有效可选标记(effectiveSelectable) + - **设计原则**:VO独立字段(不继承实体),只暴露必要的业务字段,避免泄露内部实现细节 +- 数据模型关系 +```mermaid +classDiagram +class DictGroup { ++ "分组名称" ++ "分组编码(全局唯一)" ++ "状态" ++ "排序号" ++ "内置标记" ++ "描述" +} +class DictItem { ++ "所属分组ID" ++ "字典名称" ++ "字典编码(组内唯一)" ++ "字典值(同组唯一)" ++ "状态" ++ "排序号" ++ "内置标记" ++ "描述" +} +class DictGroupDefault { ++ "分组ID" ++ "字典项ID" +} +class DictRefCount { ++ "分组编码" ++ "字典编码" ++ "引用计数" +} +class DictGroupVO { ++ "分组业务字段" ++ "createTime" ++ "itemCount" +} +class DictItemVO { ++ "字典项业务字段" ++ "groupName" ++ "isDefault" ++ "referenced" ++ "effectiveSelectable" +} +DictGroup --> DictItem : "一对多" +DictGroup --> DictGroupDefault : "一对一" +DictItem --> DictGroupDefault : "一对一" +DictItem --> DictRefCount : "一对一" +DictGroup --> DictGroupVO : "转换" +DictItem --> DictItemVO : "转换" +``` + +**图表来源** +- [DictGroup.java:17-51](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java#L17-L51) +- [DictItem.java:17-61](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java#L17-L61) +- [DictGroupVO.java:14-34](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java#L14-L34) +- [DictItemVO.java:16-49](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java#L16-L49) + +- 内置字典初始化流程 +```mermaid +sequenceDiagram +participant INIT as "DictDataInitializer" +participant GROUP as "DictGroupMapper" +participant ITEM as "DictItemMapper" +participant DEFAULT as "DictGroupDefaultMapper" +INIT->>INIT : "验证种子数据合法性" +loop "遍历种子分组" +INIT->>GROUP : "upsert分组(仅内置)" +GROUP-->>INIT : "返回或创建分组" +loop "遍历分组下的字典项" +INIT->>ITEM : "upsert字典项(仅内置)" +ITEM-->>INIT : "返回或创建字典项" +INIT->>DEFAULT : "设置默认项(仅当无默认时)" +DEFAULT-->>INIT : "完成默认设置" +end +end +INIT-->>INIT : "初始化完成" +``` + +**图表来源** +- [DictDataInitializer.java:70-94](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java#L70-L94) +- [DictDataInitializer.java:141-236](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java#L141-L236) + +- 字典查询缓存机制 +```mermaid +flowchart TD +A["查询请求"] --> B{"缓存命中?"} +B --> |是| C["返回缓存数据"] +B --> |否| D["查询数据库"] +D --> E{"有结果?"} +E --> |是| F["写入缓存(10s TTL)"] +F --> G["返回数据"] +E --> |否| H["写入空缓存(2s TTL)"] +H --> I["返回null"] +``` + +**图表来源** +- [DictQueryService.java:7-31](file://crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java#L7-L31) +- [DictConstants.java:24-30](file://crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java#L24-L30) + +**章节来源** +- [DictApplication.java](file://crm-dict/src/main/java/com/crm/dict/DictApplication.java) +- [pom.xml](file://crm-dict/pom.xml) +- [CONTEXT.md](file://crm-dict/CONTEXT.md) +- [DictGroup.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java) +- [DictItem.java](file://crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) +- [IDictGroupService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java) +- [IDictItemService.java](file://crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java) +- [DictQueryService.java](file://crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java) +- [DictGroupController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java) +- [DictItemController.java](file://crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictConstants.java](file://crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java) +- [DictGroupServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java) +- [DictItemServiceImpl.java](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java) + ### 应用入口(crm-app) - 职责:聚合模块、加载配置文件、启动Spring Boot应用。 - 关键点:确保扫描到各模块的包路径,正确引入依赖。 -章节来源 +**章节来源** - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) ## 依赖关系分析 - 模块依赖 - - crm-app 依赖 crm-auth、crm-file。 - - crm-auth、crm-file 均依赖 crm-base。 + - crm-app 依赖 crm-auth、crm-file、crm-dict。 + - crm-auth、crm-file、crm-dict 均依赖 crm-base。 + - crm-dict 仅依赖 crm-base,不依赖 crm-auth(通过权限码字符串契约解耦)。 - 运行时依赖 - crm-auth 依赖数据库(MyBatis-Plus)、Redis(可选用于缓存)、JWT库。 - crm-file 依赖对象存储(MinIO)、外部预览服务(kkFileView)。 + - crm-dict 依赖数据库(MyBatis-Plus)、Caffeine本地缓存。 - 内部通信 - 通过REST API暴露接口,模块间通过Spring Bean注入协作。 - 认证模块通过安全上下文传递登录用户信息,供其他模块读取。 + - 数据字典模块通过权限码字符串与认证模块解耦耦合。 ```mermaid graph LR APP["crm-app"] --> AUTH["crm-auth"] APP --> FILE["crm-file"] +APP --> DICT["crm-dict"] AUTH --> BASE["crm-base"] FILE --> BASE +DICT --> BASE AUTH --> DB["数据库"] FILE --> MINIO["MinIO"] FILE --> KK["kkFileView"] +DICT --> CACHE["Caffeine缓存"] ``` -图表来源 -- [pom.xml](file://pom.xml) +**图表来源** +- [pom.xml:21-28](file://pom.xml#L21-L28) +- [pom.xml:48-74](file://pom.xml#L48-L74) - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) +- [DictApplication.java](file://crm-dict/src/main/java/com/crm/dict/DictApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) - [application.yml](file://crm-auth/src/main/resources/application.yml) -章节来源 -- [pom.xml](file://pom.xml) +**章节来源** +- [pom.xml:21-28](file://pom.xml#L21-L28) +- [pom.xml:48-74](file://pom.xml#L48-L74) - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) +- [DictApplication.java](file://crm-dict/src/main/java/com/crm/dict/DictApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) - [application.yml](file://crm-auth/src/main/resources/application.yml) @@ -576,8 +756,12 @@ FILE --> KK["kkFileView"] - 分片上传提升大文件稳定性与并发;合并后落盘MinIO,减轻本地磁盘压力。 - 定时清理孤儿分片,防止存储空间泄漏。 - 预览通过kkFileView异步或直链方式,避免阻塞主线程。 - -[本节为通用指导,不直接分析具体文件] +- 数据字典模块 + - Caffeine本地缓存:10秒正结果缓存 + 2秒空结果防穿透,大幅降低数据库压力。 + - 软删除复用键:支持编码无限次删除重建,避免主键冲突。 + - 引用计数机制:O(1)复杂度判断是否可删除,避免复杂关联查询。 + - 内置字典幂等初始化:部署时快速完成种子数据导入,支持Excel替换。 + - **VO设计优化**:通过独立的VO对象减少数据传输冗余,提高序列化性能,避免泄露内部实现细节。 ## 故障排查指南 - 认证相关问题 @@ -588,12 +772,18 @@ FILE --> KK["kkFileView"] - 上传失败:检查MinIO连接、分片大小限制、临时目录权限。 - 预览失败:检查kkFileView服务可达性与配置。 - 空间占用异常:检查OrphanChunkCleanupTask是否正常运行。 +- 数据字典相关问题 + - 内置字典无法修改:检查builtin标记,内置字典只允许改名、改描述、调排序、启停用。 + - 字典项无法删除:检查引用计数是否为0,或被引用后字典值是否被修改。 + - 缓存不一致:等待10秒TTL过期,或重启服务刷新缓存。 + - 初始化失败:检查种子数据合法性,查看控制台日志中的fail-fast错误信息。 + - VO数据不完整:检查服务层的toDTO转换逻辑,确保必要字段已正确映射。 - 基础框架问题 - 统一异常未捕获:检查GlobalExceptionHandlerAdvice是否生效。 - 分页异常:检查PageConverter与前端分页参数一致性。 - 审计字段缺失:检查MetaObjectFillHandler是否启用。 -章节来源 +**章节来源** - [GlobalExceptionHandlerAdvice.java](file://crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java) - [SecurityExceptionHandlers.java](file://crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java) - [TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) @@ -603,11 +793,11 @@ FILE --> KK["kkFileView"] - [KkFileViewClient.java](file://crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java) - [MetaObjectFillHandler.java](file://crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java) - [PageConverter.java](file://crm-base/src/main/java/com/crm/base/utils/PageConverter.java) +- [DictDataInitializer.java:96-137](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java#L96-L137) +- [DictItemServiceImpl.java:218-238](file://crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java#L218-L238) ## 结论 -本CRM后端采用清晰的多模块架构,认证、文件与基础框架职责边界明确,具备良好的可扩展性与可维护性。通过统一的异常处理、分页、数据权限与工具集,开发者可以快速构建业务功能。建议在新增第三方登录或文件存储时,遵循现有扩展点与配置约定,保持模块内聚与低耦合。 - -[本节为总结,不直接分析具体文件] +本CRM后端采用清晰的多模块架构,认证、文件、数据字典与基础框架职责边界明确,具备良好的可扩展性与可维护性。通过统一的异常处理、分页、数据权限与工具集,开发者可以快速构建业务功能。新增的数据字典模块提供了稳定的键值管理能力,支持内置字典保护和引用计数机制。**特别是VO设计的优化,通过明确区分内部实体模型和外部API契约,体现了更好的分层架构设计,提高了系统的可维护性和安全性**。建议在新增第三方登录、文件存储或业务字典时,遵循现有扩展点与配置约定,保持模块内聚与低耦合。 ## 附录:配置与扩展点 - 认证模块配置 @@ -626,11 +816,18 @@ FILE --> KK["kkFileView"] - 调度任务:SchedulingConfig、OrphanChunkCleanupTask。 - 文件属性:FileProperties。 - 预览服务:KkFileViewClient。 +- 数据字典模块配置 + - 内置字典初始化:DictDataInitializer,支持Excel替换口。 + - 权限初始化:DictPermissionInitializer,将权限点注入权限资源树。 + - 缓存配置:Caffeine本地缓存,10秒TTL,空结果2秒防穿透。 + - 权限码常量:DictConstants中定义的dict:*权限点。 + - 扩展点:新增内置字典可通过SEED_GROUPS列表或Excel文件扩展。 + - **VO设计扩展**:新增VO时应遵循独立字段原则,仅暴露必要的业务字段,避免继承实体类。 - 应用入口配置 - 统一启动:CrmAppApplication。 - 应用配置:application.yml。 -章节来源 +**章节来源** - [SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [PermissionConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java) - [DataInitializer.java](file://crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java) @@ -655,5 +852,10 @@ FILE --> KK["kkFileView"] - [OrphanChunkCleanupTask.java](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java) - [FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) - [KkFileViewClient.java](file://crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java) +- [DictDataInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java) +- [DictPermissionInitializer.java](file://crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java) +- [DictConstants.java](file://crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java) +- [DictGroupVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java) +- [DictItemVO.java](file://crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java) - [CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [application.yml](file://crm-app/src/main/resources/application.yml) \ No newline at end of file diff --git a/.qoder/repowiki/zh/meta/repowiki-metadata.json b/.qoder/repowiki/zh/meta/repowiki-metadata.json index f9ed2ac..6e769ac 100644 --- a/.qoder/repowiki/zh/meta/repowiki-metadata.json +++ b/.qoder/repowiki/zh/meta/repowiki-metadata.json @@ -1 +1 @@ -{"code_snippets":[{"id":"8813519db2ec8d3788102bcc7d1f19bc","path":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"3fa8c5117e3c0c5c18c29826dc404c80","path":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"78733cea63a5784d74c82bdf50e7b713","path":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"72a034c4f1317ca49826baf8790a4c2e","path":"crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"7799b89815bb4f06dd5caa2b3bd5568c","path":"crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"bb259727923efab26488eca0b1f201e0","path":"crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"df096476d97c54172c5839a266e46867","path":"crm-auth/src/main/java/com/crm/auth/security/TokenService.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"a807bda309df8f0aa0cf90bbf4c0afd4","path":"crm-base/src/main/java/com/crm/base/annotation/DataScope.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"cd7e601b4125b471cf816bcec228b752","path":"crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"faf664190fd4a09ddb120b40bf445a54","path":"crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"0b81c5221d14e935e18bc19956fe502f","path":"crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"7c974ab041f6a9430c3be1c39833b929","path":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"9c3911a56d8521ef26f3e3ec2accd8a5","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","line_range":"30-34","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":"daaa931a3614c39bba377186b1f5be5f","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","line_range":"64-93","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":"bb69d53898126328709f0ffa74b84a21","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","line_range":"36-41","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":"08f1e1f256663048fa344ad9d0b2ec50","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","line_range":"43-47","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":"f3443603f743cb75a94a04d692a61a9f","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","line_range":"12-76","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":"e2830d81d6e28aed10dccc2713cc2d1b","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"1-48","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"45bf77ddaa679acca8c5535083b5945c","path":"crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","line_range":"1-262","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"8db96ae3b010284910f8431c1c2367f0","path":"crm-auth/src/main/java/com/crm/auth/service/IResourceService.java","line_range":"1-26","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"c0493efa487cf930abd2933af3e72781","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","line_range":"1-19","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"5fe39f4159a0d5a68c0d1ee34a2b6103","path":"crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","line_range":"1-76","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"9488e996384d45f67488bdccc4e0f0b6","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","line_range":"1-80","gmt_create":"2026-08-04T09:57:47+08:00","gmt_modified":"2026-08-04T09:57:47+08:00"},{"id":"57d5a8ab851652a3705c29fe5c19864f","path":"crm-file/src/main/java/com/crm/file/api/FileApi.java","line_range":"1-106","gmt_create":"2026-08-04T09:57:47+08:00","gmt_modified":"2026-08-04T09:57:47+08:00"},{"id":"b2e64975f941d389f848f0911b5d21fc","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","line_range":"16-84","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"11ff686199a527b16c34abb2c1c3f179","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"1-56","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"204b3d8b3f185c9d4e51d901e51ade12","path":"crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","line_range":"1-265","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"77b6a344d88f4c26037ba82e391ac061","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","line_range":"12-52","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"7687130ee4a47c1e4e4ef1082d573508","path":"crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","line_range":"239-242","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"91398e71753529e02986d50a8cfc06e8","path":"crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","line_range":"36-71","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"b37809db1bcbb443f89e776fd2522d74","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","line_range":"1-36","gmt_create":"2026-08-04T17:13:27.2477242+08:00","gmt_modified":"2026-08-04T17:13:27.2477242+08:00"},{"id":"281426f342c415888879dec628d8ede2","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","line_range":"1-68","gmt_create":"2026-08-04T17:13:27.2477242+08:00","gmt_modified":"2026-08-04T17:13:27.2477242+08:00"},{"id":"8bfb66ee95e0b604e7e00a10d54b97e2","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","line_range":"1-140","gmt_create":"2026-08-04T17:13:27.2477242+08:00","gmt_modified":"2026-08-04T17:13:27.2477242+08:00"},{"id":"64aec830421b2d35910074429d1ee986","path":"crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","line_range":"1-200","gmt_create":"2026-08-04T17:13:27.2497184+08:00","gmt_modified":"2026-08-04T17:13:27.2497184+08:00"},{"id":"5609defe76e630b07bff8855db378c55","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","line_range":"44-50","gmt_create":"2026-08-04T17:13:27.2507152+08:00","gmt_modified":"2026-08-04T17:13:27.2507152+08:00"},{"id":"ef24be7c3ce60d8e7b85f3203a781aa0","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","line_range":"85-95","gmt_create":"2026-08-04T17:43:50.0726833+08:00","gmt_modified":"2026-08-04T17:43:50.0726833+08:00"},{"id":"90f1865562e9f5620beef18de905d9e7","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","line_range":"32-36","gmt_create":"2026-08-04T17:43:50.0752289+08:00","gmt_modified":"2026-08-04T17:43:50.0752289+08:00"},{"id":"2f06083130bf64ee2a878837250ee2af","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","line_range":"117-139","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"5fc541009259cef5dde6459097ee02c7","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","line_range":"149-165","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"c8fe83bfdcdebf6c4cbafe5ccc3fff2c","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","line_range":"15-53","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"2402e2fbf96b2963b98e75da818f2777","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","line_range":"15-34","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"46fa00e13eb3286302d3787e8c1f1051","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","line_range":"127-138","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"9c19bba97b38fe3dbcde5a59ab43be02","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"22","gmt_create":"2026-08-05T12:14:37.8189244+08:00","gmt_modified":"2026-08-05T12:14:37.8189244+08:00"},{"id":"fe2b7c626178194ac3902aff308e602c","path":"crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","line_range":"1-98","gmt_create":"2026-08-05T12:14:49.6484545+08:00","gmt_modified":"2026-08-05T12:14:49.6484545+08:00"},{"id":"0258e4223cc6ad38e6889a0dbe4226f4","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"1-137","gmt_create":"2026-08-05T12:14:49.6484545+08:00","gmt_modified":"2026-08-05T12:14:49.6484545+08:00"},{"id":"cec4b333c23562375f8ba726ff8e33d4","path":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","line_range":"1-43","gmt_create":"2026-08-05T12:14:49.6484545+08:00","gmt_modified":"2026-08-05T12:14:49.6484545+08:00"},{"id":"3e766fa579578b179ce86668688a696e","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","line_range":"1-61","gmt_create":"2026-08-05T12:14:49.6484545+08:00","gmt_modified":"2026-08-05T12:14:49.6484545+08:00"},{"id":"b0e4bf2cdfbf64b762ff202adf131edb","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","line_range":"1-41","gmt_create":"2026-08-05T12:14:49.6490123+08:00","gmt_modified":"2026-08-05T12:14:49.6490123+08:00"},{"id":"f8cfac232dc38f8f3198444a305761ef","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","line_range":"1-31","gmt_create":"2026-08-05T12:14:49.6490123+08:00","gmt_modified":"2026-08-05T12:14:49.6490123+08:00"},{"id":"b037341ea6352c6b7a9b782e75a1b0e4","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","line_range":"18-22","gmt_create":"2026-08-05T14:14:28.2233804+08:00","gmt_modified":"2026-08-05T14:14:28.2233804+08:00"},{"id":"84dbb0a8a48a1b0cb09caa8ff5e37772","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","line_range":"18-40","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"358d17256baad827344f9c962732f05f","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"28-32","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"7630382313cadec5c6d8adc92dcc9fee","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","line_range":"23-60","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"a93ae9fd67ae091cc5de42e9372a4a5b","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"35-39","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"852adaecbef1690c54f6a1a0c07b01b1","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","line_range":"23-57","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"6752445343d892cce179d933238b24a6","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"42-47","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"30311c6851277a382e67d95b83c45f16","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"50-54","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"ab67df1936419ba1cf1e0029a23c5bf2","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","line_range":"35-39","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"b300c143a1d0c61e70f56c406a4d7a91","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","line_range":"43-49","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"205841de1f0b7e0b83cdb8a171f441a0","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","line_range":"22-47","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"b0af3174f3549d3d50b7051ecf1610ad","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"28-54","gmt_create":"2026-08-05T14:14:28.2249128+08:00","gmt_modified":"2026-08-05T14:14:28.2249128+08:00"},{"id":"332679fa8feff09a65449fc04e7b0399","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"30-42","gmt_create":"2026-08-05T14:15:12.7479373+08:00","gmt_modified":"2026-08-05T14:15:12.7479373+08:00"},{"id":"da087c2c1b417a29878e1da67b50ab55","path":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","line_range":"9-42","gmt_create":"2026-08-05T14:15:12.7479373+08:00","gmt_modified":"2026-08-05T14:15:12.7479373+08:00"},{"id":"a800a64e16cca84b005d717faf00070c","path":"crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","line_range":"25-30","gmt_create":"2026-08-05T14:15:12.7479373+08:00","gmt_modified":"2026-08-05T14:15:12.7479373+08:00"},{"id":"18e7588cf137e60731d97339c707dfab","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"44-86","gmt_create":"2026-08-05T14:15:12.7484481+08:00","gmt_modified":"2026-08-05T14:15:12.7484481+08:00"},{"id":"2738929e90eb6e3d8a356e1b4f661bb7","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","line_range":"17-41","gmt_create":"2026-08-05T14:15:12.7489581+08:00","gmt_modified":"2026-08-05T14:15:12.7489581+08:00"},{"id":"6ae7a9512788cb4d4a693b3edf3bff24","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"105-122","gmt_create":"2026-08-05T14:15:12.7489581+08:00","gmt_modified":"2026-08-05T14:15:12.7489581+08:00"},{"id":"472299cc5292d464668a566f315641cc","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"124-142","gmt_create":"2026-08-05T14:15:12.7489581+08:00","gmt_modified":"2026-08-05T14:15:12.7489581+08:00"},{"id":"cfb2f09353f8b4ef5e4e5db759504d05","path":"crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","line_range":"32-96","gmt_create":"2026-08-05T14:15:12.7489581+08:00","gmt_modified":"2026-08-05T14:15:12.7489581+08:00"}],"knowledge_relations":[{"id":1,"source_id":"6d8082c2-bade-49fb-b470-995db7466303","target_id":"ec96e8c3-c43c-463b-b4ba-7a9019ee0aff","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 6d8082c2-bade-49fb-b470-995db7466303 -\u003e ec96e8c3-c43c-463b-b4ba-7a9019ee0aff","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":2,"source_id":"6d8082c2-bade-49fb-b470-995db7466303","target_id":"918c82b4-acd2-47d1-9eb3-656deeb62e27","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 6d8082c2-bade-49fb-b470-995db7466303 -\u003e 918c82b4-acd2-47d1-9eb3-656deeb62e27","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":3,"source_id":"6d8082c2-bade-49fb-b470-995db7466303","target_id":"0870c57d-c63c-477f-b69e-7799461cae3a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 6d8082c2-bade-49fb-b470-995db7466303 -\u003e 0870c57d-c63c-477f-b69e-7799461cae3a","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":4,"source_id":"6d8082c2-bade-49fb-b470-995db7466303","target_id":"b574348c-289c-42ef-bbe5-f18434e0f9bf","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 6d8082c2-bade-49fb-b470-995db7466303 -\u003e b574348c-289c-42ef-bbe5-f18434e0f9bf","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":9,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"d3d1fc96-5f27-423b-a3de-43c5c5ce122a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e d3d1fc96-5f27-423b-a3de-43c5c5ce122a","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":10,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"be5bf550-c68c-431d-ba89-9836d61bfdf1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e be5bf550-c68c-431d-ba89-9836d61bfdf1","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":11,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"5a19aa15-dc0a-4794-a39b-582db554acf0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e 5a19aa15-dc0a-4794-a39b-582db554acf0","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":12,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e 068fc96f-bb8c-4ce6-b079-72c01ba04bae","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":13,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e f5db08f6-ba6c-48f9-a61d-1d476a52234e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":14,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"b50c7b86-b029-4352-a2e6-60c5e592e789","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e b50c7b86-b029-4352-a2e6-60c5e592e789","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":15,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"745079a2-2d3e-4e07-8e12-2b0c77a1aa4a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e 745079a2-2d3e-4e07-8e12-2b0c77a1aa4a","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":19,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"a92b51f6-5cdb-4a85-b3e3-12a18d707ab5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e a92b51f6-5cdb-4a85-b3e3-12a18d707ab5","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":20,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"85fd498e-ba52-470f-b25d-ae190d07e1ac","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 85fd498e-ba52-470f-b25d-ae190d07e1ac","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":21,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"36e9f3c1-b81c-4a57-bb99-3b15b6569af7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c16d495e-28fe-40ad-acd3-302f8922fc8d -\u003e 36e9f3c1-b81c-4a57-bb99-3b15b6569af7","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":27,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"57308b29-b058-46d1-ae1a-cab06e6e3e51","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e 57308b29-b058-46d1-ae1a-cab06e6e3e51","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":28,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"6082a318-56e5-478f-bfac-17723c2bd127","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e 6082a318-56e5-478f-bfac-17723c2bd127","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":29,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"d4105695-2094-4939-be9d-cf30437aada0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e d4105695-2094-4939-be9d-cf30437aada0","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":30,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"d408e95a-13b7-4ad0-9fbf-2191ed2bfa16","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e d408e95a-13b7-4ad0-9fbf-2191ed2bfa16","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":31,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e 1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":32,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"2c71e522-4140-46f9-9edb-90ec500c07e8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e 2c71e522-4140-46f9-9edb-90ec500c07e8","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":33,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e b04efc93-7ddd-4987-a71f-d5001040edcc","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":34,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"47dc438d-d49c-4082-84d6-779660f0d768","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e 47dc438d-d49c-4082-84d6-779660f0d768","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":35,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"e5687cb7-c956-4dde-b6fc-3972ea916e5e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0c060e95-d7b3-4f91-90c0-3540a440cb1c -\u003e e5687cb7-c956-4dde-b6fc-3972ea916e5e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":36,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"8b17b02c-4868-4324-af4f-dcc98fbfed64","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0c060e95-d7b3-4f91-90c0-3540a440cb1c -\u003e 8b17b02c-4868-4324-af4f-dcc98fbfed64","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":38,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"c474b493-b90b-4589-b8f6-abb213778b21","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0c060e95-d7b3-4f91-90c0-3540a440cb1c -\u003e c474b493-b90b-4589-b8f6-abb213778b21","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":39,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"301311ec-fa49-441d-8f69-bec64740fdd8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0870c57d-c63c-477f-b69e-7799461cae3a -\u003e 301311ec-fa49-441d-8f69-bec64740fdd8","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":41,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"5185347d-edff-48f1-a87e-bd08f91b7939","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0870c57d-c63c-477f-b69e-7799461cae3a -\u003e 5185347d-edff-48f1-a87e-bd08f91b7939","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":42,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"6789c32b-de31-4bf0-8ec9-7ea000a6266e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e 6789c32b-de31-4bf0-8ec9-7ea000a6266e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":43,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"c4dd0228-d971-4375-a846-d7e0296721b4","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e c4dd0228-d971-4375-a846-d7e0296721b4","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":44,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"dae64a35-168f-4724-b194-c92cbe38136a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e dae64a35-168f-4724-b194-c92cbe38136a","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":45,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"c94ec056-eec7-48b6-9b01-92f02b60adf1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e c94ec056-eec7-48b6-9b01-92f02b60adf1","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":46,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"f7730619-12ac-4454-a2ba-a86e19e5d98e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e f7730619-12ac-4454-a2ba-a86e19e5d98e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":47,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"e439cdc0-7e80-48a7-be4d-3abd32d3b4c6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e e439cdc0-7e80-48a7-be4d-3abd32d3b4c6","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":48,"source_id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","target_id":"3fb2d355-11e4-4d85-9b53-cec9e9330b0b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 068fc96f-bb8c-4ce6-b079-72c01ba04bae -\u003e 3fb2d355-11e4-4d85-9b53-cec9e9330b0b","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":49,"source_id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","target_id":"0fc4f1d1-eb6f-4cfb-86f9-60b389db6b6e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 068fc96f-bb8c-4ce6-b079-72c01ba04bae -\u003e 0fc4f1d1-eb6f-4cfb-86f9-60b389db6b6e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":50,"source_id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","target_id":"8ca9c912-4c7b-4540-b09d-66b362eb6629","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 068fc96f-bb8c-4ce6-b079-72c01ba04bae -\u003e 8ca9c912-4c7b-4540-b09d-66b362eb6629","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":51,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"291b69f4-e014-4afa-b35d-55cfbc845b23","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e 291b69f4-e014-4afa-b35d-55cfbc845b23","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":52,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"eec19a8f-6c17-4486-96ce-0a09474cf521","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e eec19a8f-6c17-4486-96ce-0a09474cf521","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":53,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"f6f5cb59-fe75-4076-8987-265d4ea8e886","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e f6f5cb59-fe75-4076-8987-265d4ea8e886","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":54,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"e9620c19-fd9a-47de-a0db-08ae92e834e9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e e9620c19-fd9a-47de-a0db-08ae92e834e9","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":55,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"6c78e496-40e5-4b38-bf17-218f38a977f7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e 6c78e496-40e5-4b38-bf17-218f38a977f7","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":56,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"60857927-930a-4ef5-9096-2a05359e1e5b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e 60857927-930a-4ef5-9096-2a05359e1e5b","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":57,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"d7242e37-8722-4c9c-9e2c-cc9cd3adb20b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e d7242e37-8722-4c9c-9e2c-cc9cd3adb20b","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":58,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"27b42b0d-e7f8-4ab2-96f1-1bc0981b94c2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e 27b42b0d-e7f8-4ab2-96f1-1bc0981b94c2","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":59,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"ffb733ba-253c-4fc1-b940-e65c03f1a508","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e ffb733ba-253c-4fc1-b940-e65c03f1a508","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":60,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"b2a66c5e-122e-4968-ae3a-6c1efadf5b66","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e b2a66c5e-122e-4968-ae3a-6c1efadf5b66","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":61,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"3c3ebd00-b567-4021-8066-af064318d4fd","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e 3c3ebd00-b567-4021-8066-af064318d4fd","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":62,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"1d6a4cd5-2dbe-41ba-9db3-cb9f7fcb2d79","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e 1d6a4cd5-2dbe-41ba-9db3-cb9f7fcb2d79","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":63,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"d1bf1df6-89dc-40ea-9101-793b8c893ae8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e d1bf1df6-89dc-40ea-9101-793b8c893ae8","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":64,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":65,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":66,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":67,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":68,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":69,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":70,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":71,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":72,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":73,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":74,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":75,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":76,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":77,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":78,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":79,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":80,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"70a8328bf44d129f9e9f84a552674c0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":81,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"450e832ef93367bf62c150db0a3c2257","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedData.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":82,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"e6cba19378ad4cca1120a969537c90a1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedDataMapper.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":83,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"a0e0e501f0f901ac1f12b089a1bf5f9a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":84,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"ef7f823f436c1c0a09594b106637d202","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":85,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"0a944d6947cd45922d3e267c069fee6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":86,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"e115f2054f8d1d592750cc634e682da8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/AuthUserServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":87,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"93b5379effd73cbce347a8747296d18c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/SysDeptServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":88,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"f204b35859a78f3352a067656ec89482","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":89,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":90,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":91,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":92,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":93,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":94,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":95,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":96,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":97,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":98,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":99,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":100,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":101,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":102,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":103,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":104,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"eb157d8b43dd11418aef51259017012c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":105,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":106,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":107,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":108,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":109,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":110,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"78a779bf8e042a4c180c7cf6b2f09c30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":111,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"39e025b53656f4fb1e51330f3f63f82f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/service/KkFileViewClientTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":112,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"4ad3caa167521e41d486c8eb3e1d1f09","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/task/OrphanChunkCleanupTaskTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":113,"source_id":"9f120716e7b0381e045c66412550d1a9","target_id":"8813519db2ec8d3788102bcc7d1f19bc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":114,"source_id":"ec731c3e8b12fffc7e23eb4ecd950b53","target_id":"3fa8c5117e3c0c5c18c29826dc404c80","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":115,"source_id":"5da86b8d801192fd63ea6aa57b666057","target_id":"d08cb0ea7e38d4900671b643422d5ad7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":116,"source_id":"26cb8256b5c728bdc24b532313d3a166","target_id":"a5b530b2374acc884aa38fa2a38818b2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":117,"source_id":"aea6b84411302cc9a5fbcaf774ac6a29","target_id":"356a1716308638ff71e5f09f64fd1cd3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":118,"source_id":"20f7693b186c4e003d04031dafd605b5","target_id":"28f6dcd948c2cff2f329ab3bbf4c5e06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":119,"source_id":"e1f225cc9efe7384e97ee284b89eabc0","target_id":"a302758d59394067216d751ebb661f5e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":120,"source_id":"8fa19465d23be26b999639add960b23d","target_id":"353fced7452ae984d04aedecaaee5ab4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":121,"source_id":"f9926a70a628c5e92f0d239030b13f71","target_id":"6482a0415c4c01dfd3196a91192fb7ca","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":122,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"5802bf27629a4700e1fad48a339eab95","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":123,"source_id":"ad239f5e0129b57722497e4051492302","target_id":"ebfb395550c37ba4027584bbf2fd76ed","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":124,"source_id":"6d19e7c47ad418f3577ff8cfcd56590f","target_id":"78733cea63a5784d74c82bdf50e7b713","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":125,"source_id":"10a536bc357c7840a6eec61b40741915","target_id":"72a034c4f1317ca49826baf8790a4c2e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":126,"source_id":"ef98104ba47dd7d33624e1916c0694cd","target_id":"7799b89815bb4f06dd5caa2b3bd5568c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":127,"source_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","target_id":"bb259727923efab26488eca0b1f201e0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":128,"source_id":"9b38bcfac9c3a14d74c16429d22380fd","target_id":"626400c1d41e3b48d2a8e30ee87562fa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":129,"source_id":"720e90c29ddd88a8633c9d31ce443b5e","target_id":"df096476d97c54172c5839a266e46867","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":130,"source_id":"5be8fe765c8b4c953e524cdf749f440b","target_id":"8629bee3416a369162b306881e5bf5d0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":131,"source_id":"485d0b6edfad127744af104bc2fccdec","target_id":"a807bda309df8f0aa0cf90bbf4c0afd4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":132,"source_id":"33650500053c4035f9b41cc603ec7177","target_id":"cd7e601b4125b471cf816bcec228b752","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":133,"source_id":"7f1c91eeb163925e7598ee1fa3808178","target_id":"eb168003b2929c81d3cf503a3ae9e8c9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":134,"source_id":"624d3c748c2d1b470b26409fbb19c4d3","target_id":"faf664190fd4a09ddb120b40bf445a54","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":135,"source_id":"979b533c66100f0a3f79f7542e2b01e0","target_id":"0b81c5221d14e935e18bc19956fe502f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":136,"source_id":"4194d46035c0037d3488ab82e57001ba","target_id":"21915525255d4fef3daeb8643a5bae4c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":137,"source_id":"219bfc88fc6b98fdc50a57b641262250","target_id":"7c974ab041f6a9430c3be1c39833b929","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":138,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":139,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":140,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":141,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":142,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":143,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":144,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"30ac7fd632012faca8156feaa071ff46","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":145,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"28e5eef69286d763453cf31a32070685","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":146,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":147,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":148,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":149,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":150,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":151,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":152,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":153,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":154,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":155,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":156,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":157,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":158,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"7421afce22638e3b1ee9594dcf7236bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":159,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"2d521e834dd3215c45e67ea660ea37d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/config/CrmSqlInjector.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":160,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"88ddb7568e428a630b28d5be85d8b98b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/config/MybatisPlusConfig.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":161,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"a03716c4989d9bdbacbbf1b52dcfad7c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":162,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":163,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":164,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 1058e349-f116-4c95-af6a-eebc7a32cc25","gmt_create":"2026-08-01T12:01:57+08:00","gmt_modified":"2026-08-01T12:01:57+08:00"},{"id":165,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":166,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":167,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":168,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":169,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":170,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":171,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"a03716c4989d9bdbacbbf1b52dcfad7c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":172,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":173,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":174,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":175,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":176,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":177,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"d9ade6309a688b79e49a87c991d5af6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":178,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":179,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":180,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":181,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":182,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":183,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":184,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":185,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":186,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":187,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":188,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":189,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":190,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":191,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":192,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":193,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":194,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":195,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":196,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":197,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":198,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":199,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":200,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":201,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":202,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":203,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":204,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":205,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":206,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"45f8c9e51de204a6ce44b7b414bf967f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":207,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":208,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"d9ade6309a688b79e49a87c991d5af6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":209,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"aab51a092e42f86e794b23b95107cba3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":210,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"30ac7fd632012faca8156feaa071ff46","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":211,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"38d9b83ff8f46a8113aa787616b2f802","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":212,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"d9d6f5b3e8856fa6995fdc7ed74c6382","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":213,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"eb41d1eb6dbcb66d966ca3b557af45d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":214,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"28e5eef69286d763453cf31a32070685","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":215,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"c4daef7910e2cd6aaaae07759d897d03","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":216,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":217,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":218,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":219,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"a03716c4989d9bdbacbbf1b52dcfad7c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":220,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":221,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":222,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"b1a16c73af31999d323930a2c4167a74","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":223,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"fdbf8ef6fe6c3e0273244b9efa4f4563","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":224,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"44756b6ca3948002965adbdf75e287e4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":225,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"4645e05fc44e0cd3f1efadca1d825a88","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":226,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"0a944d6947cd45922d3e267c069fee6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":227,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"e115f2054f8d1d592750cc634e682da8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/AuthUserServiceImplTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":228,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"93b5379effd73cbce347a8747296d18c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/SysDeptServiceImplTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":229,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"f204b35859a78f3352a067656ec89482","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":230,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"a0e0e501f0f901ac1f12b089a1bf5f9a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":231,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"ef7f823f436c1c0a09594b106637d202","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":232,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"70a8328bf44d129f9e9f84a552674c0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":233,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"78a779bf8e042a4c180c7cf6b2f09c30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":234,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"39e025b53656f4fb1e51330f3f63f82f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/service/KkFileViewClientTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":235,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"4e86e9e389b4b08fe8963d3cf346bef6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/task/Or orphanChunkCleanupTaskTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":236,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"eb157d8b43dd11418aef51259017012c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":237,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e ea83a6dc-68e3-478e-8f71-72edf5ee8975","gmt_create":"2026-08-01T12:30:45+08:00","gmt_modified":"2026-08-01T12:30:45+08:00"},{"id":238,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"7ef884a5-5749-405d-9da2-6cc20683c050","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e 7ef884a5-5749-405d-9da2-6cc20683c050","gmt_create":"2026-08-01T12:30:45+08:00","gmt_modified":"2026-08-01T12:30:45+08:00"},{"id":263,"source_id":"246da6901c21f063ab47e58aaebcdd3c","target_id":"9c3911a56d8521ef26f3e3ec2accd8a5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-34","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":265,"source_id":"cff6e76ddd2bdf3e405ed171c279d307","target_id":"7b901ed8b88126265d0f6a5b26105fac","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-15","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":267,"source_id":"5725c122fbf467925192bf42403e7787","target_id":"daaa931a3614c39bba377186b1f5be5f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 64-93","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":269,"source_id":"58507cf1cc358b2da45575d16c857d87","target_id":"c440d4eea295917cf8174d31ba36318a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-23","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":271,"source_id":"246da6901c21f063ab47e58aaebcdd3c","target_id":"bb69d53898126328709f0ffa74b84a21","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-41","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":273,"source_id":"246da6901c21f063ab47e58aaebcdd3c","target_id":"08f1e1f256663048fa344ad9d0b2ec50","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 43-47","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":275,"source_id":"8cac10327042dbf538d05120f601aa48","target_id":"bf93fb5169672f79ac4fd9358def044a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-41","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":276,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":277,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":278,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"21067ee0ba0180f2b8514173343f7b0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":279,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":280,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":281,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":282,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":283,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":284,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":285,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"d9ade6309a688b79e49a87c991d5af6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":286,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":287,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":288,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":289,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":290,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":291,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":292,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":293,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":294,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":295,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":296,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":297,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":298,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":299,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":300,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":301,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":302,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"a0e0e501f0f901ac1f12b089a1bf5f9a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":303,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":304,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":305,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":306,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":307,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"b1a16c73af31999d323930a2c4167a74","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: pom.xml","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":308,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":309,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":310,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"949d7f85b20c96ff625551608a0a3453","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":311,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":312,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":313,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":314,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":315,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":316,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":317,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":318,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":319,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":320,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":321,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":322,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":323,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":324,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":325,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":326,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":327,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":328,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":329,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":330,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":331,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":332,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":333,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":334,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":335,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":336,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":337,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":338,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"de4842c7b9763f7398ef2c3dec53465d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: docs/adr/0009-sso-reuses-scan-login-endpoint.md","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":339,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"ce03262b-4baa-4304-84b5-4f936862ebac","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e ce03262b-4baa-4304-84b5-4f936862ebac","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":340,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e 0c060e95-d7b3-4f91-90c0-3540a440cb1c","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":341,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"6a3ce482-07a4-416a-98d2-110c5877bf11","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e 6a3ce482-07a4-416a-98d2-110c5877bf11","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":342,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"f34d9fa4-1ba0-428e-a8bf-dc560bb5c61c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e f34d9fa4-1ba0-428e-a8bf-dc560bb5c61c","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":343,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"5a282910-9cce-41af-8c7a-7fb5d0d295dd","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e 5a282910-9cce-41af-8c7a-7fb5d0d295dd","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":344,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 158e8a6f-5d98-42cf-8e12-c89d7b319118","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":346,"source_id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:55:26+08:00","gmt_modified":"2026-08-03T19:55:26+08:00"},{"id":347,"source_id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:26+08:00","gmt_modified":"2026-08-03T19:55:26+08:00"},{"id":348,"source_id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:26+08:00","gmt_modified":"2026-08-03T19:55:26+08:00"},{"id":349,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":350,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":351,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":352,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":353,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":354,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"aab51a092e42f86e794b23b95107cba3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":355,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":356,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":357,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":358,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":359,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"3204c0be957891dd9b878beed284f4a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":360,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":361,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":362,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":363,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e 2d8b5954-a700-4519-9fef-d0f5c3c842e6","gmt_create":"2026-08-03T19:55:42+08:00","gmt_modified":"2026-08-03T19:55:42+08:00"},{"id":364,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e ad6bec26-b938-4424-9ee2-741deba5fcb5","gmt_create":"2026-08-03T19:55:42+08:00","gmt_modified":"2026-08-03T19:55:42+08:00"},{"id":365,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e 48cadf57-f1d9-4cff-8455-1f96e33b15ec","gmt_create":"2026-08-03T19:55:42+08:00","gmt_modified":"2026-08-03T19:55:42+08:00"},{"id":366,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":367,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":368,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"f648b675f6acc57fd1e4fe32e9a205c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":369,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":370,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"d9d6f5b3e8856fa6995fdc7ed74c6382","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":371,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"eb41d1eb6dbcb66d966ca3b557af45d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":372,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"3259a2ba7196998a24118782cceeecee","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":373,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":374,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"f9926a70a628c5e92f0d239030b13f71","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":375,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":376,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":377,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":378,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":379,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":380,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":381,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"53e5a23ce2cd9f508b08b6e1eb290542","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":382,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"ef0fb46c0db255fd9bde4380928104bf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":383,"source_id":"f648b675f6acc57fd1e4fe32e9a205c4","target_id":"aafd447ec3bbf25736e2c0c9c6fa613c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-51","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":384,"source_id":"26cb8256b5c728bdc24b532313d3a166","target_id":"f3443603f743cb75a94a04d692a61a9f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-76","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":385,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"0be9e4b0a80212931a37787fb4305723","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-79","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":386,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e b5320c7c-d3ea-4e78-844a-d0b334deb03b","gmt_create":"2026-08-04T09:27:06+08:00","gmt_modified":"2026-08-04T09:27:06+08:00"},{"id":387,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"e2830d81d6e28aed10dccc2713cc2d1b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-48","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":388,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"45bf77ddaa679acca8c5535083b5945c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-262","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":389,"source_id":"e42a3afd007bd414adca430109ffa7f2","target_id":"8db96ae3b010284910f8431c1c2367f0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-26","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":390,"source_id":"f9926a70a628c5e92f0d239030b13f71","target_id":"88730f3c070dfa62a6a9093270580a8b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":391,"source_id":"5be8fe765c8b4c953e524cdf749f440b","target_id":"c0493efa487cf930abd2933af3e72781","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-19","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":392,"source_id":"4194d46035c0037d3488ab82e57001ba","target_id":"5fe39f4159a0d5a68c0d1ee34a2b6103","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-76","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":449,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"9488e996384d45f67488bdccc4e0f0b6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-04T09:57:47+08:00","gmt_modified":"2026-08-04T09:57:47+08:00"},{"id":451,"source_id":"01c3b61921ce0cdb4028d7335ad82908","target_id":"57d5a8ab851652a3705c29fe5c19864f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-106","gmt_create":"2026-08-04T09:57:47+08:00","gmt_modified":"2026-08-04T09:57:47+08:00"},{"id":456,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"14a15fa440881d50b36d8c53e94dd736","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 165-194","gmt_create":"2026-08-04T10:27:21+08:00","gmt_modified":"2026-08-04T10:27:21+08:00"},{"id":457,"source_id":"f648b675f6acc57fd1e4fe32e9a205c4","target_id":"7b42b81da49de266d4cee69b9c075f9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-50","gmt_create":"2026-08-04T10:27:21+08:00","gmt_modified":"2026-08-04T10:27:21+08:00"},{"id":458,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"89b76c08a217330b3e8334f4e696a002","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 235-238","gmt_create":"2026-08-04T10:27:21+08:00","gmt_modified":"2026-08-04T10:27:21+08:00"},{"id":504,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"b2e64975f941d389f848f0911b5d21fc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-84","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":506,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"11ff686199a527b16c34abb2c1c3f179","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-56","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":508,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"204b3d8b3f185c9d4e51d901e51ade12","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-265","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":524,"source_id":"f648b675f6acc57fd1e4fe32e9a205c4","target_id":"77b6a344d88f4c26037ba82e391ac061","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-52","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":546,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"eebd80b02064751aa384ae1f18d557dd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 169-198","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":548,"source_id":"f648b675f6acc57fd1e4fe32e9a205c4","target_id":"f8d3167a88d67e6e0bc04c71cca4a65d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-51","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":550,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"7687130ee4a47c1e4e4ef1082d573508","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 239-242","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":552,"source_id":"53e5a23ce2cd9f508b08b6e1eb290542","target_id":"91398e71753529e02986d50a8cfc06e8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-71","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":554,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"887ed5c02b23a570f50766518fc13e38","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-50","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":556,"source_id":"53e5a23ce2cd9f508b08b6e1eb290542","target_id":"62a16405b98e80047bc86598efeeb2c2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-91","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":578,"source_id":"4b325dd0ffe965ccff6bc2e8acc431d6","target_id":"b37809db1bcbb443f89e776fd2522d74","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-08-04T17:13:27.2547039+08:00","gmt_modified":"2026-08-04T17:13:27.2547039+08:00"},{"id":580,"source_id":"74123de2770c04a2d8a4787f177714fc","target_id":"281426f342c415888879dec628d8ede2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-68","gmt_create":"2026-08-04T17:13:27.2557011+08:00","gmt_modified":"2026-08-04T17:13:27.2557011+08:00"},{"id":582,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"8bfb66ee95e0b604e7e00a10d54b97e2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-140","gmt_create":"2026-08-04T17:13:27.2557011+08:00","gmt_modified":"2026-08-04T17:13:27.2557011+08:00"},{"id":588,"source_id":"4b325dd0ffe965ccff6bc2e8acc431d6","target_id":"0415a1cb895b4930fc134a552eb7fcd9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-35","gmt_create":"2026-08-04T17:13:27.2576965+08:00","gmt_modified":"2026-08-04T17:13:27.2576965+08:00"},{"id":590,"source_id":"74123de2770c04a2d8a4787f177714fc","target_id":"de8131647b7f08746c909c1fdda7ae19","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-67","gmt_create":"2026-08-04T17:13:27.2576965+08:00","gmt_modified":"2026-08-04T17:13:27.2576965+08:00"},{"id":592,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"6a73c502cfcf49993f7db005be0fcab3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-139","gmt_create":"2026-08-04T17:13:27.2586936+08:00","gmt_modified":"2026-08-04T17:13:27.2586936+08:00"},{"id":594,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"1d5a19e1dc4ede80e406d2b2e272b233","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 52-104","gmt_create":"2026-08-04T17:13:27.2586936+08:00","gmt_modified":"2026-08-04T17:13:27.2586936+08:00"},{"id":596,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"f949367b75ef88b463185169c2da20e7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 106-116","gmt_create":"2026-08-04T17:13:27.2596899+08:00","gmt_modified":"2026-08-04T17:13:27.2596899+08:00"},{"id":619,"source_id":"5b91363610bf599cc013882938cf595a","target_id":"64aec830421b2d35910074429d1ee986","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-04T17:13:27.3751444+08:00","gmt_modified":"2026-08-04T17:13:27.3751444+08:00"},{"id":627,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"5609defe76e630b07bff8855db378c55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-50","gmt_create":"2026-08-04T17:13:27.3777241+08:00","gmt_modified":"2026-08-04T17:13:27.3777241+08:00"},{"id":677,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-04T17:15:13.3088531+08:00","gmt_modified":"2026-08-04T17:15:13.3088531+08:00"},{"id":678,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-04T17:15:13.3094144+08:00","gmt_modified":"2026-08-04T17:15:13.3094144+08:00"},{"id":679,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-04T17:15:13.3094144+08:00","gmt_modified":"2026-08-04T17:15:13.3094144+08:00"},{"id":680,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-04T17:15:13.3099407+08:00","gmt_modified":"2026-08-04T17:15:13.3099407+08:00"},{"id":681,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"2467957f6e01fd8cb020680dae20873c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibility.java","gmt_create":"2026-08-04T17:15:13.3099407+08:00","gmt_modified":"2026-08-04T17:15:13.3099407+08:00"},{"id":682,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"43e90eb333a5285a72ef91c378ede1da","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/VisibilityScope.java","gmt_create":"2026-08-04T17:15:13.3104483+08:00","gmt_modified":"2026-08-04T17:15:13.3104483+08:00"},{"id":683,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-04T17:15:13.3109553+08:00","gmt_modified":"2026-08-04T17:15:13.3109553+08:00"},{"id":684,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-04T17:15:13.3109553+08:00","gmt_modified":"2026-08-04T17:15:13.3109553+08:00"},{"id":685,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-04T17:15:13.3109553+08:00","gmt_modified":"2026-08-04T17:15:13.3109553+08:00"},{"id":686,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-04T17:15:13.3109553+08:00","gmt_modified":"2026-08-04T17:15:13.3109553+08:00"},{"id":687,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-04T17:15:13.3114942+08:00","gmt_modified":"2026-08-04T17:15:13.3114942+08:00"},{"id":688,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-04T17:15:13.3114942+08:00","gmt_modified":"2026-08-04T17:15:13.3114942+08:00"},{"id":689,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-04T17:15:13.3114942+08:00","gmt_modified":"2026-08-04T17:15:13.3114942+08:00"},{"id":690,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"4b325dd0ffe965ccff6bc2e8acc431d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","gmt_create":"2026-08-04T17:15:13.3120014+08:00","gmt_modified":"2026-08-04T17:15:13.3120014+08:00"},{"id":691,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"46bb7615dec0d0825cbcc4b846b93bf6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","gmt_create":"2026-08-04T17:15:13.3120014+08:00","gmt_modified":"2026-08-04T17:15:13.3120014+08:00"},{"id":692,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"74123de2770c04a2d8a4787f177714fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","gmt_create":"2026-08-04T17:15:13.3120014+08:00","gmt_modified":"2026-08-04T17:15:13.3120014+08:00"},{"id":693,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-04T17:15:13.3125112+08:00","gmt_modified":"2026-08-04T17:15:13.3125112+08:00"},{"id":694,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-04T17:15:13.3125112+08:00","gmt_modified":"2026-08-04T17:15:13.3125112+08:00"},{"id":695,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"aab51a092e42f86e794b23b95107cba3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","gmt_create":"2026-08-04T17:15:13.3125112+08:00","gmt_modified":"2026-08-04T17:15:13.3125112+08:00"},{"id":696,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-04T17:15:13.3130328+08:00","gmt_modified":"2026-08-04T17:15:13.3130328+08:00"},{"id":697,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-04T17:15:13.3130328+08:00","gmt_modified":"2026-08-04T17:15:13.3130328+08:00"},{"id":698,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-04T17:15:13.3130328+08:00","gmt_modified":"2026-08-04T17:15:13.3130328+08:00"},{"id":699,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"70a8328bf44d129f9e9f84a552674c0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java","gmt_create":"2026-08-04T17:15:13.3130328+08:00","gmt_modified":"2026-08-04T17:15:13.3130328+08:00"},{"id":700,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"450e832ef93367bf62c150db0a3c2257","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedData.java","gmt_create":"2026-08-04T17:15:13.3135414+08:00","gmt_modified":"2026-08-04T17:15:13.3135414+08:00"},{"id":701,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"e6cba19378ad4cca1120a969537c90a1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedDataMapper.java","gmt_create":"2026-08-04T17:15:13.3135414+08:00","gmt_modified":"2026-08-04T17:15:13.3135414+08:00"},{"id":703,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0c060e95-d7b3-4f91-90c0-3540a440cb1c -\u003e dff99746-62fb-4c4b-ae86-768430ff2aed","gmt_create":"2026-08-04T17:15:13.9194693+08:00","gmt_modified":"2026-08-04T17:15:13.9194693+08:00"},{"id":724,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"b035fb3ad85211cbb45c19394a008a00","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-47","gmt_create":"2026-08-04T17:43:50.0816056+08:00","gmt_modified":"2026-08-04T17:43:50.0816056+08:00"},{"id":726,"source_id":"8a7bb9534d7381df886b1a476664b902","target_id":"b2442a608015b36893e09b8b2f7b494d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 8-24","gmt_create":"2026-08-04T17:43:50.0821389+08:00","gmt_modified":"2026-08-04T17:43:50.0821389+08:00"},{"id":728,"source_id":"db5d3491fb45251456163d012a823f5d","target_id":"ef24be7c3ce60d8e7b85f3203a781aa0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 85-95","gmt_create":"2026-08-04T17:43:50.0821389+08:00","gmt_modified":"2026-08-04T17:43:50.0821389+08:00"},{"id":772,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"bde5b6b2040fcc42ff440b833e618413","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-36","gmt_create":"2026-08-04T17:43:50.1196607+08:00","gmt_modified":"2026-08-04T17:43:50.1196607+08:00"},{"id":774,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"aab06df7332d57aad5c5bfbfe932e815","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 38-46","gmt_create":"2026-08-04T17:43:50.1201713+08:00","gmt_modified":"2026-08-04T17:43:50.1201713+08:00"},{"id":776,"source_id":"8a7bb9534d7381df886b1a476664b902","target_id":"a5de4c49ca519b57c5ebbebba0bf26dd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-23","gmt_create":"2026-08-04T17:43:50.1206821+08:00","gmt_modified":"2026-08-04T17:43:50.1206821+08:00"},{"id":779,"source_id":"db5d3491fb45251456163d012a823f5d","target_id":"90f1865562e9f5620beef18de905d9e7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-36","gmt_create":"2026-08-04T17:43:50.1217018+08:00","gmt_modified":"2026-08-04T17:43:50.1217018+08:00"},{"id":782,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-04T17:44:06.5407164+08:00","gmt_modified":"2026-08-04T17:44:06.5407164+08:00"},{"id":783,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-04T17:44:06.5407164+08:00","gmt_modified":"2026-08-04T17:44:06.5407164+08:00"},{"id":784,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-04T17:44:06.5407164+08:00","gmt_modified":"2026-08-04T17:44:06.5407164+08:00"},{"id":785,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-04T17:44:06.5412253+08:00","gmt_modified":"2026-08-04T17:44:06.5412253+08:00"},{"id":786,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"4b325dd0ffe965ccff6bc2e8acc431d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","gmt_create":"2026-08-04T17:44:06.5412253+08:00","gmt_modified":"2026-08-04T17:44:06.5412253+08:00"},{"id":787,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"46bb7615dec0d0825cbcc4b846b93bf6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","gmt_create":"2026-08-04T17:44:06.5412253+08:00","gmt_modified":"2026-08-04T17:44:06.5412253+08:00"},{"id":788,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"74123de2770c04a2d8a4787f177714fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","gmt_create":"2026-08-04T17:44:06.5412253+08:00","gmt_modified":"2026-08-04T17:44:06.5412253+08:00"},{"id":789,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"2467957f6e01fd8cb020680dae20873c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibility.java","gmt_create":"2026-08-04T17:44:06.5417905+08:00","gmt_modified":"2026-08-04T17:44:06.5417905+08:00"},{"id":790,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-04T17:44:06.5417905+08:00","gmt_modified":"2026-08-04T17:44:06.5417905+08:00"},{"id":791,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-04T17:44:06.5417905+08:00","gmt_modified":"2026-08-04T17:44:06.5417905+08:00"},{"id":792,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-04T17:44:06.5423441+08:00","gmt_modified":"2026-08-04T17:44:06.5423441+08:00"},{"id":793,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-04T17:44:06.5423441+08:00","gmt_modified":"2026-08-04T17:44:06.5423441+08:00"},{"id":794,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-04T17:44:06.5423441+08:00","gmt_modified":"2026-08-04T17:44:06.5423441+08:00"},{"id":795,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-04T17:44:06.5428567+08:00","gmt_modified":"2026-08-04T17:44:06.5428567+08:00"},{"id":796,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-04T17:44:06.5428567+08:00","gmt_modified":"2026-08-04T17:44:06.5428567+08:00"},{"id":797,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-04T17:44:06.5428567+08:00","gmt_modified":"2026-08-04T17:44:06.5428567+08:00"},{"id":798,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-04T17:44:06.5433767+08:00","gmt_modified":"2026-08-04T17:44:06.5433767+08:00"},{"id":799,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-04T17:44:06.5439327+08:00","gmt_modified":"2026-08-04T17:44:06.5439327+08:00"},{"id":800,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"4bbbc2f3c27f80699526357490785390","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","gmt_create":"2026-08-04T17:44:06.5439327+08:00","gmt_modified":"2026-08-04T17:44:06.5439327+08:00"},{"id":801,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"206da08c92480415f9750a64c534d171","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/service/IBaseService.java","gmt_create":"2026-08-04T17:44:06.5444528+08:00","gmt_modified":"2026-08-04T17:44:06.5444528+08:00"},{"id":802,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-04T17:44:06.5449575+08:00","gmt_modified":"2026-08-04T17:44:06.5449575+08:00"},{"id":803,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-04T17:44:06.5449709+08:00","gmt_modified":"2026-08-04T17:44:06.5449709+08:00"},{"id":804,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-04T17:44:06.5449709+08:00","gmt_modified":"2026-08-04T17:44:06.5449709+08:00"},{"id":805,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-04T17:44:06.5449709+08:00","gmt_modified":"2026-08-04T17:44:06.5449709+08:00"},{"id":806,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"daaa931a3614c39bba377186b1f5be5f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java#64-93","gmt_create":"2026-08-04T17:44:06.5454834+08:00","gmt_modified":"2026-08-04T17:44:06.5454834+08:00"},{"id":807,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"2f06083130bf64ee2a878837250ee2af","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java#117-139","gmt_create":"2026-08-04T17:44:06.5454834+08:00","gmt_modified":"2026-08-04T17:44:06.5454834+08:00"},{"id":808,"source_id":"5725c122fbf467925192bf42403e7787","target_id":"2f06083130bf64ee2a878837250ee2af","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 117-139","gmt_create":"2026-08-04T17:44:06.5459867+08:00","gmt_modified":"2026-08-04T17:44:06.5459867+08:00"},{"id":809,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"5fc541009259cef5dde6459097ee02c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java#149-165","gmt_create":"2026-08-04T17:44:06.545997+08:00","gmt_modified":"2026-08-04T17:44:06.545997+08:00"},{"id":810,"source_id":"5725c122fbf467925192bf42403e7787","target_id":"5fc541009259cef5dde6459097ee02c7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 149-165","gmt_create":"2026-08-04T17:44:06.545997+08:00","gmt_modified":"2026-08-04T17:44:06.545997+08:00"},{"id":811,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"c8fe83bfdcdebf6c4cbafe5ccc3fff2c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java#15-53","gmt_create":"2026-08-04T17:44:06.545997+08:00","gmt_modified":"2026-08-04T17:44:06.545997+08:00"},{"id":812,"source_id":"8e967137fd04208873ef2894951b2b3d","target_id":"c8fe83bfdcdebf6c4cbafe5ccc3fff2c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-53","gmt_create":"2026-08-04T17:44:06.546509+08:00","gmt_modified":"2026-08-04T17:44:06.546509+08:00"},{"id":813,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"2402e2fbf96b2963b98e75da818f2777","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java#15-34","gmt_create":"2026-08-04T17:44:06.546509+08:00","gmt_modified":"2026-08-04T17:44:06.546509+08:00"},{"id":814,"source_id":"7179946069c5d0654ca49cca77eaaedb","target_id":"2402e2fbf96b2963b98e75da818f2777","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-34","gmt_create":"2026-08-04T17:44:06.546509+08:00","gmt_modified":"2026-08-04T17:44:06.546509+08:00"},{"id":815,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"46fa00e13eb3286302d3787e8c1f1051","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java#127-138","gmt_create":"2026-08-04T17:44:06.5470183+08:00","gmt_modified":"2026-08-04T17:44:06.5470183+08:00"},{"id":816,"source_id":"5725c122fbf467925192bf42403e7787","target_id":"46fa00e13eb3286302d3787e8c1f1051","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 127-138","gmt_create":"2026-08-04T17:44:06.5470183+08:00","gmt_modified":"2026-08-04T17:44:06.5470183+08:00"},{"id":817,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-04T17:44:30.7473472+08:00","gmt_modified":"2026-08-04T17:44:30.7473472+08:00"},{"id":818,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"3d68f400d8919945b4f8a1aff4375e39","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/WebMvcConfig.java","gmt_create":"2026-08-04T17:44:30.747857+08:00","gmt_modified":"2026-08-04T17:44:30.747857+08:00"},{"id":819,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"46667b5e631f28a6dd940cfc171debf2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/ApiPermissionInterceptor.java","gmt_create":"2026-08-04T17:44:30.747857+08:00","gmt_modified":"2026-08-04T17:44:30.747857+08:00"},{"id":820,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"91ab5af5f40c9f910746f8c5c7825100","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/ApiPermissionCache.java","gmt_create":"2026-08-04T17:44:30.747857+08:00","gmt_modified":"2026-08-04T17:44:30.747857+08:00"},{"id":821,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"1c8f46373fde157638a9331bc5ac12f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/ApiPermissionRule.java","gmt_create":"2026-08-04T17:44:30.7483675+08:00","gmt_modified":"2026-08-04T17:44:30.7483675+08:00"},{"id":822,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-04T17:44:30.7483675+08:00","gmt_modified":"2026-08-04T17:44:30.7483675+08:00"},{"id":823,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-04T17:44:30.7483675+08:00","gmt_modified":"2026-08-04T17:44:30.7483675+08:00"},{"id":824,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-04T17:44:30.7488774+08:00","gmt_modified":"2026-08-04T17:44:30.7488774+08:00"},{"id":825,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-04T17:44:30.7488774+08:00","gmt_modified":"2026-08-04T17:44:30.7488774+08:00"},{"id":826,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-04T17:44:30.7493856+08:00","gmt_modified":"2026-08-04T17:44:30.7493856+08:00"},{"id":827,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-04T17:44:30.7493856+08:00","gmt_modified":"2026-08-04T17:44:30.7493856+08:00"},{"id":828,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-04T17:44:30.7493856+08:00","gmt_modified":"2026-08-04T17:44:30.7493856+08:00"},{"id":829,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-04T17:44:30.7498987+08:00","gmt_modified":"2026-08-04T17:44:30.7498987+08:00"},{"id":830,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"949d7f85b20c96ff625551608a0a3453","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-04T17:44:30.7498987+08:00","gmt_modified":"2026-08-04T17:44:30.7498987+08:00"},{"id":831,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-04T17:44:30.7498987+08:00","gmt_modified":"2026-08-04T17:44:30.7498987+08:00"},{"id":832,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-04T17:44:30.7504084+08:00","gmt_modified":"2026-08-04T17:44:30.7504084+08:00"},{"id":833,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-04T17:44:30.7504084+08:00","gmt_modified":"2026-08-04T17:44:30.7504084+08:00"},{"id":834,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-04T17:44:30.7504084+08:00","gmt_modified":"2026-08-04T17:44:30.7504084+08:00"},{"id":835,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-04T17:44:30.7509233+08:00","gmt_modified":"2026-08-04T17:44:30.7509233+08:00"},{"id":836,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-04T17:44:30.7509233+08:00","gmt_modified":"2026-08-04T17:44:30.7509233+08:00"},{"id":837,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-04T17:44:30.7509233+08:00","gmt_modified":"2026-08-04T17:44:30.7509233+08:00"},{"id":838,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-04T17:44:30.7514309+08:00","gmt_modified":"2026-08-04T17:44:30.7514309+08:00"},{"id":839,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"197b55f1b7d7d1be28b124897acfa1eb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","gmt_create":"2026-08-04T17:44:30.7514309+08:00","gmt_modified":"2026-08-04T17:44:30.7514309+08:00"},{"id":840,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"e42a3afd007bd414adca430109ffa7f2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IResourceService.java","gmt_create":"2026-08-04T17:44:30.7514309+08:00","gmt_modified":"2026-08-04T17:44:30.7514309+08:00"},{"id":841,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"145452b72cda2735ac97a690f2b5cbd9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","gmt_create":"2026-08-04T17:44:30.7519472+08:00","gmt_modified":"2026-08-04T17:44:30.7519472+08:00"},{"id":842,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-04T17:44:30.7519472+08:00","gmt_modified":"2026-08-04T17:44:30.7519472+08:00"},{"id":843,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-04T17:44:30.7519472+08:00","gmt_modified":"2026-08-04T17:44:30.7519472+08:00"},{"id":844,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"f648b675f6acc57fd1e4fe32e9a205c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","gmt_create":"2026-08-04T17:44:30.7524564+08:00","gmt_modified":"2026-08-04T17:44:30.7524564+08:00"},{"id":845,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-04T17:44:30.7524564+08:00","gmt_modified":"2026-08-04T17:44:30.7524564+08:00"},{"id":846,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-04T17:44:30.7529658+08:00","gmt_modified":"2026-08-04T17:44:30.7529658+08:00"},{"id":847,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-04T17:44:30.7529658+08:00","gmt_modified":"2026-08-04T17:44:30.7529658+08:00"},{"id":848,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-04T17:44:30.7529658+08:00","gmt_modified":"2026-08-04T17:44:30.7529658+08:00"},{"id":849,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"4b325dd0ffe965ccff6bc2e8acc431d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","gmt_create":"2026-08-04T17:44:30.7529658+08:00","gmt_modified":"2026-08-04T17:44:30.7529658+08:00"},{"id":850,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"46bb7615dec0d0825cbcc4b846b93bf6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","gmt_create":"2026-08-04T17:44:30.7534707+08:00","gmt_modified":"2026-08-04T17:44:30.7534707+08:00"},{"id":851,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"74123de2770c04a2d8a4787f177714fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","gmt_create":"2026-08-04T17:44:30.7534707+08:00","gmt_modified":"2026-08-04T17:44:30.7534707+08:00"},{"id":852,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"34e7e1e31cc014e8ab3104acc807cc73","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java","gmt_create":"2026-08-04T17:45:24.5949393+08:00","gmt_modified":"2026-08-04T17:45:24.5949393+08:00"},{"id":853,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"f77483962ff198e16f41554c6e1ceb39","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java","gmt_create":"2026-08-04T17:45:24.5949393+08:00","gmt_modified":"2026-08-04T17:45:24.5949393+08:00"},{"id":854,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-04T17:45:24.595455+08:00","gmt_modified":"2026-08-04T17:45:24.595455+08:00"},{"id":855,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-04T17:45:24.595455+08:00","gmt_modified":"2026-08-04T17:45:24.595455+08:00"},{"id":856,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-04T17:45:24.595455+08:00","gmt_modified":"2026-08-04T17:45:24.595455+08:00"},{"id":857,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"0515f235f6ec8e32043a3b870d857764","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java","gmt_create":"2026-08-04T17:45:24.5959627+08:00","gmt_modified":"2026-08-04T17:45:24.5959627+08:00"},{"id":858,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"7f4bc54539c21a1d994bbbabe2868f2e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-04T17:45:24.5959627+08:00","gmt_modified":"2026-08-04T17:45:24.5959627+08:00"},{"id":859,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"83821a36e4f3e52f5bffc50e24952e99","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-04T17:45:24.5959627+08:00","gmt_modified":"2026-08-04T17:45:24.5959627+08:00"},{"id":860,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-04T17:45:24.5959627+08:00","gmt_modified":"2026-08-04T17:45:24.5959627+08:00"},{"id":861,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-04T17:45:24.5964744+08:00","gmt_modified":"2026-08-04T17:45:24.5964744+08:00"},{"id":862,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-04T17:45:24.5964744+08:00","gmt_modified":"2026-08-04T17:45:24.5964744+08:00"},{"id":863,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-04T17:45:24.5969787+08:00","gmt_modified":"2026-08-04T17:45:24.5969787+08:00"},{"id":864,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-04T17:45:24.5969914+08:00","gmt_modified":"2026-08-04T17:45:24.5969914+08:00"},{"id":865,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-04T17:45:24.5969914+08:00","gmt_modified":"2026-08-04T17:45:24.5969914+08:00"},{"id":866,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-04T17:45:24.5969914+08:00","gmt_modified":"2026-08-04T17:45:24.5969914+08:00"},{"id":867,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-04T17:45:24.5975052+08:00","gmt_modified":"2026-08-04T17:45:24.5975052+08:00"},{"id":868,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-04T17:45:24.5975052+08:00","gmt_modified":"2026-08-04T17:45:24.5975052+08:00"},{"id":869,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"f648b675f6acc57fd1e4fe32e9a205c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","gmt_create":"2026-08-04T17:45:24.5975052+08:00","gmt_modified":"2026-08-04T17:45:24.5975052+08:00"},{"id":870,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-04T17:45:24.5980482+08:00","gmt_modified":"2026-08-04T17:45:24.5980482+08:00"},{"id":871,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"145452b72cda2735ac97a690f2b5cbd9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","gmt_create":"2026-08-04T17:45:24.5980482+08:00","gmt_modified":"2026-08-04T17:45:24.5980482+08:00"},{"id":872,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"aac0b656-e390-412c-a1a3-16b77a280875","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e aac0b656-e390-412c-a1a3-16b77a280875","gmt_create":"2026-08-04T17:46:34.0368511+08:00","gmt_modified":"2026-08-04T17:46:34.0368511+08:00"},{"id":873,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 88f667ab-0f58-4a85-82cc-d33915ce4c7a","gmt_create":"2026-08-04T17:46:34.0373765+08:00","gmt_modified":"2026-08-04T17:46:34.0373765+08:00"},{"id":876,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"e886a159-657d-4516-9922-a6cabb6aabc0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 85dce05c-14ae-4632-82e5-30fab7771e6d -\u003e e886a159-657d-4516-9922-a6cabb6aabc0","gmt_create":"2026-08-04T17:46:34.0471887+08:00","gmt_modified":"2026-08-04T17:46:34.0471887+08:00"},{"id":983,"source_id":"443c00696b8cf69bb4c73995c949f40d","target_id":"bf2a5b38e2282ce9fac3ddffb79caa77","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-91","gmt_create":"2026-08-05T12:14:37.8289543+08:00","gmt_modified":"2026-08-05T12:14:37.8289543+08:00"},{"id":985,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"9c19bba97b38fe3dbcde5a59ab43be02","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22","gmt_create":"2026-08-05T12:14:37.8294687+08:00","gmt_modified":"2026-08-05T12:14:37.8294687+08:00"},{"id":994,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"1836e8519a64afa41b6149f64004367d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 99-115","gmt_create":"2026-08-05T12:14:37.8315025+08:00","gmt_modified":"2026-08-05T12:14:37.8315025+08:00"},{"id":996,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"ee8780ef7b8bf30f59a58835f45a37cf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 52-64","gmt_create":"2026-08-05T12:14:37.8315025+08:00","gmt_modified":"2026-08-05T12:14:37.8315025+08:00"},{"id":998,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"27c5906bd5f3cc82cbe0f9fe969cc057","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 118-124","gmt_create":"2026-08-05T12:14:37.8320185+08:00","gmt_modified":"2026-08-05T12:14:37.8320185+08:00"},{"id":1038,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-05T12:14:49.6490123+08:00","gmt_modified":"2026-08-05T12:14:49.6490123+08:00"},{"id":1039,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1040,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1041,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1042,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1043,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1044,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1045,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"197b55f1b7d7d1be28b124897acfa1eb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1046,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"443c00696b8cf69bb4c73995c949f40d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1047,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1048,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1049,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1050,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1051,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1052,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1053,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1054,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1055,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1056,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1057,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1058,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1059,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8a7bb9534d7381df886b1a476664b902","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1060,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1061,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"3259a2ba7196998a24118782cceeecee","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1062,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1063,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"0951805a35c8cf0d998263dfed532ebe","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1064,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1065,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"e42a3afd007bd414adca430109ffa7f2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IResourceService.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1066,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"145452b72cda2735ac97a690f2b5cbd9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1067,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1068,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1069,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1070,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1071,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"a03716c4989d9bdbacbbf1b52dcfad7c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1072,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-05T12:14:49.6549426+08:00","gmt_modified":"2026-08-05T12:14:49.6549426+08:00"},{"id":1073,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"34070e2c4487d700b9aae2fc036dcced","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","gmt_create":"2026-08-05T12:14:49.6549426+08:00","gmt_modified":"2026-08-05T12:14:49.6549426+08:00"},{"id":1074,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-05T12:14:49.6549426+08:00","gmt_modified":"2026-08-05T12:14:49.6549426+08:00"},{"id":1075,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-05T12:14:49.6559465+08:00","gmt_modified":"2026-08-05T12:14:49.6559465+08:00"},{"id":1076,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-05T12:14:49.6569374+08:00","gmt_modified":"2026-08-05T12:14:49.6569374+08:00"},{"id":1077,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-05T12:14:49.6569374+08:00","gmt_modified":"2026-08-05T12:14:49.6569374+08:00"},{"id":1078,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-05T12:14:49.6707855+08:00","gmt_modified":"2026-08-05T12:14:49.6707855+08:00"},{"id":1079,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-05T12:14:49.6724674+08:00","gmt_modified":"2026-08-05T12:14:49.6724674+08:00"},{"id":1080,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T12:14:49.6724674+08:00","gmt_modified":"2026-08-05T12:14:49.6724674+08:00"},{"id":1081,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T12:14:49.6724674+08:00","gmt_modified":"2026-08-05T12:14:49.6724674+08:00"},{"id":1082,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-05T12:14:49.6729763+08:00","gmt_modified":"2026-08-05T12:14:49.6729763+08:00"},{"id":1083,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-05T12:14:49.6729763+08:00","gmt_modified":"2026-08-05T12:14:49.6729763+08:00"},{"id":1084,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-05T12:14:49.6729763+08:00","gmt_modified":"2026-08-05T12:14:49.6729763+08:00"},{"id":1085,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-05T12:14:49.6734994+08:00","gmt_modified":"2026-08-05T12:14:49.6734994+08:00"},{"id":1086,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-05T12:14:49.6734994+08:00","gmt_modified":"2026-08-05T12:14:49.6734994+08:00"},{"id":1087,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-05T12:14:49.674014+08:00","gmt_modified":"2026-08-05T12:14:49.674014+08:00"},{"id":1088,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-05T12:14:49.674014+08:00","gmt_modified":"2026-08-05T12:14:49.674014+08:00"},{"id":1089,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-05T12:14:49.674014+08:00","gmt_modified":"2026-08-05T12:14:49.674014+08:00"},{"id":1090,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"38d9b83ff8f46a8113aa787616b2f802","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java","gmt_create":"2026-08-05T12:14:49.674014+08:00","gmt_modified":"2026-08-05T12:14:49.674014+08:00"},{"id":1091,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-05T12:14:49.6745262+08:00","gmt_modified":"2026-08-05T12:14:49.6745262+08:00"},{"id":1092,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-05T12:14:49.6745262+08:00","gmt_modified":"2026-08-05T12:14:49.6745262+08:00"},{"id":1093,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"fe2b7c626178194ac3902aff308e602c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java#1-98","gmt_create":"2026-08-05T12:14:49.6750371+08:00","gmt_modified":"2026-08-05T12:14:49.6750371+08:00"},{"id":1094,"source_id":"443c00696b8cf69bb4c73995c949f40d","target_id":"fe2b7c626178194ac3902aff308e602c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-98","gmt_create":"2026-08-05T12:14:49.6750371+08:00","gmt_modified":"2026-08-05T12:14:49.6750371+08:00"},{"id":1095,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"0258e4223cc6ad38e6889a0dbe4226f4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#1-137","gmt_create":"2026-08-05T12:14:49.6750371+08:00","gmt_modified":"2026-08-05T12:14:49.6750371+08:00"},{"id":1096,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"0258e4223cc6ad38e6889a0dbe4226f4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-137","gmt_create":"2026-08-05T12:14:49.6755493+08:00","gmt_modified":"2026-08-05T12:14:49.6755493+08:00"},{"id":1097,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"cec4b333c23562375f8ba726ff8e33d4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java#1-43","gmt_create":"2026-08-05T12:14:49.6755493+08:00","gmt_modified":"2026-08-05T12:14:49.6755493+08:00"},{"id":1098,"source_id":"8a7bb9534d7381df886b1a476664b902","target_id":"cec4b333c23562375f8ba726ff8e33d4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-43","gmt_create":"2026-08-05T12:14:49.6755493+08:00","gmt_modified":"2026-08-05T12:14:49.6755493+08:00"},{"id":1099,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"3e766fa579578b179ce86668688a696e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java#1-61","gmt_create":"2026-08-05T12:14:49.676067+08:00","gmt_modified":"2026-08-05T12:14:49.676067+08:00"},{"id":1100,"source_id":"34070e2c4487d700b9aae2fc036dcced","target_id":"3e766fa579578b179ce86668688a696e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-61","gmt_create":"2026-08-05T12:14:49.676067+08:00","gmt_modified":"2026-08-05T12:14:49.676067+08:00"},{"id":1101,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"b0e4bf2cdfbf64b762ff202adf131edb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java#1-41","gmt_create":"2026-08-05T12:14:49.6765829+08:00","gmt_modified":"2026-08-05T12:14:49.6765829+08:00"},{"id":1102,"source_id":"5da86b8d801192fd63ea6aa57b666057","target_id":"b0e4bf2cdfbf64b762ff202adf131edb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-41","gmt_create":"2026-08-05T12:14:49.6765829+08:00","gmt_modified":"2026-08-05T12:14:49.6765829+08:00"},{"id":1103,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"f8cfac232dc38f8f3198444a305761ef","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java#1-31","gmt_create":"2026-08-05T12:14:49.6765829+08:00","gmt_modified":"2026-08-05T12:14:49.6765829+08:00"},{"id":1104,"source_id":"20f7693b186c4e003d04031dafd605b5","target_id":"f8cfac232dc38f8f3198444a305761ef","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-31","gmt_create":"2026-08-05T12:14:49.6770863+08:00","gmt_modified":"2026-08-05T12:14:49.6770863+08:00"},{"id":1105,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"e2830d81d6e28aed10dccc2713cc2d1b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#1-48","gmt_create":"2026-08-05T12:14:49.6770937+08:00","gmt_modified":"2026-08-05T12:14:49.6770937+08:00"},{"id":1106,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"45bf77ddaa679acca8c5535083b5945c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java#1-262","gmt_create":"2026-08-05T12:14:49.6770937+08:00","gmt_modified":"2026-08-05T12:14:49.6770937+08:00"},{"id":1107,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8db96ae3b010284910f8431c1c2367f0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/IResourceService.java#1-26","gmt_create":"2026-08-05T12:14:49.6776023+08:00","gmt_modified":"2026-08-05T12:14:49.6776023+08:00"},{"id":1108,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"9488e996384d45f67488bdccc4e0f0b6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java#1-80","gmt_create":"2026-08-05T12:14:49.6776023+08:00","gmt_modified":"2026-08-05T12:14:49.6776023+08:00"},{"id":1109,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"57d5a8ab851652a3705c29fe5c19864f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-file/src/main/java/com/crm/file/api/FileApi.java#1-106","gmt_create":"2026-08-05T12:14:49.6781106+08:00","gmt_modified":"2026-08-05T12:14:49.6781106+08:00"},{"id":1111,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0870c57d-c63c-477f-b69e-7799461cae3a -\u003e 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","gmt_create":"2026-08-05T12:14:50.3177952+08:00","gmt_modified":"2026-08-05T12:14:50.3177952+08:00"},{"id":1112,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"a946df03-41d0-4e28-8069-d41d28c91eed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e a946df03-41d0-4e28-8069-d41d28c91eed","gmt_create":"2026-08-05T12:14:50.3214448+08:00","gmt_modified":"2026-08-05T12:14:50.3214448+08:00"},{"id":1114,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"81106841-6bef-41d3-8f76-7dc6437e7e04","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e 81106841-6bef-41d3-8f76-7dc6437e7e04","gmt_create":"2026-08-05T12:14:50.32249+08:00","gmt_modified":"2026-08-05T12:14:50.32249+08:00"},{"id":1115,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e 85dce05c-14ae-4632-82e5-30fab7771e6d","gmt_create":"2026-08-05T12:14:50.32249+08:00","gmt_modified":"2026-08-05T12:14:50.32249+08:00"},{"id":1116,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e 5e6e2407-3ea1-4872-9776-be307dbfdedc","gmt_create":"2026-08-05T12:14:50.3230075+08:00","gmt_modified":"2026-08-05T12:14:50.3230075+08:00"},{"id":1117,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-05T14:14:28.2249128+08:00","gmt_modified":"2026-08-05T14:14:28.2249128+08:00"},{"id":1118,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"197b55f1b7d7d1be28b124897acfa1eb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","gmt_create":"2026-08-05T14:14:28.2249128+08:00","gmt_modified":"2026-08-05T14:14:28.2249128+08:00"},{"id":1119,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-05T14:14:28.2254199+08:00","gmt_modified":"2026-08-05T14:14:28.2254199+08:00"},{"id":1120,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-05T14:14:28.2254199+08:00","gmt_modified":"2026-08-05T14:14:28.2254199+08:00"},{"id":1121,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-05T14:14:28.2254199+08:00","gmt_modified":"2026-08-05T14:14:28.2254199+08:00"},{"id":1122,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-05T14:14:28.2259317+08:00","gmt_modified":"2026-08-05T14:14:28.2259317+08:00"},{"id":1123,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-05T14:14:28.2259317+08:00","gmt_modified":"2026-08-05T14:14:28.2259317+08:00"},{"id":1124,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-05T14:14:28.2259317+08:00","gmt_modified":"2026-08-05T14:14:28.2259317+08:00"},{"id":1125,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-05T14:14:28.2264441+08:00","gmt_modified":"2026-08-05T14:14:28.2264441+08:00"},{"id":1126,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-05T14:14:28.2264441+08:00","gmt_modified":"2026-08-05T14:14:28.2264441+08:00"},{"id":1127,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-05T14:14:28.2264441+08:00","gmt_modified":"2026-08-05T14:14:28.2264441+08:00"},{"id":1128,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-05T14:14:28.226957+08:00","gmt_modified":"2026-08-05T14:14:28.226957+08:00"},{"id":1129,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-05T14:14:28.226957+08:00","gmt_modified":"2026-08-05T14:14:28.226957+08:00"},{"id":1130,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-05T14:14:28.226957+08:00","gmt_modified":"2026-08-05T14:14:28.226957+08:00"},{"id":1131,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T14:14:28.2274964+08:00","gmt_modified":"2026-08-05T14:14:28.2274964+08:00"},{"id":1132,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T14:14:28.2274964+08:00","gmt_modified":"2026-08-05T14:14:28.2274964+08:00"},{"id":1133,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-05T14:14:28.2280177+08:00","gmt_modified":"2026-08-05T14:14:28.2280177+08:00"},{"id":1134,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-05T14:14:28.2280177+08:00","gmt_modified":"2026-08-05T14:14:28.2280177+08:00"},{"id":1135,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-05T14:14:28.2280177+08:00","gmt_modified":"2026-08-05T14:14:28.2280177+08:00"},{"id":1136,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-05T14:14:28.2285334+08:00","gmt_modified":"2026-08-05T14:14:28.2285334+08:00"},{"id":1137,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-05T14:14:28.2285334+08:00","gmt_modified":"2026-08-05T14:14:28.2285334+08:00"},{"id":1138,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-05T14:14:28.2285334+08:00","gmt_modified":"2026-08-05T14:14:28.2285334+08:00"},{"id":1139,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-05T14:14:28.2290508+08:00","gmt_modified":"2026-08-05T14:14:28.2290508+08:00"},{"id":1140,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-05T14:14:28.2295697+08:00","gmt_modified":"2026-08-05T14:14:28.2295697+08:00"},{"id":1141,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-05T14:14:28.230085+08:00","gmt_modified":"2026-08-05T14:14:28.230085+08:00"},{"id":1142,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"9c3911a56d8521ef26f3e3ec2accd8a5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java#30-34","gmt_create":"2026-08-05T14:14:28.230085+08:00","gmt_modified":"2026-08-05T14:14:28.230085+08:00"},{"id":1143,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"b037341ea6352c6b7a9b782e75a1b0e4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java#18-22","gmt_create":"2026-08-05T14:14:28.230085+08:00","gmt_modified":"2026-08-05T14:14:28.230085+08:00"},{"id":1144,"source_id":"58507cf1cc358b2da45575d16c857d87","target_id":"b037341ea6352c6b7a9b782e75a1b0e4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-22","gmt_create":"2026-08-05T14:14:28.230596+08:00","gmt_modified":"2026-08-05T14:14:28.230596+08:00"},{"id":1145,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"bb69d53898126328709f0ffa74b84a21","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java#36-41","gmt_create":"2026-08-05T14:14:28.2311097+08:00","gmt_modified":"2026-08-05T14:14:28.2311097+08:00"},{"id":1146,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"08f1e1f256663048fa344ad9d0b2ec50","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java#43-47","gmt_create":"2026-08-05T14:14:28.2311097+08:00","gmt_modified":"2026-08-05T14:14:28.2311097+08:00"},{"id":1147,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"84dbb0a8a48a1b0cb09caa8ff5e37772","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java#18-40","gmt_create":"2026-08-05T14:14:28.2316496+08:00","gmt_modified":"2026-08-05T14:14:28.2316496+08:00"},{"id":1148,"source_id":"8cac10327042dbf538d05120f601aa48","target_id":"84dbb0a8a48a1b0cb09caa8ff5e37772","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-40","gmt_create":"2026-08-05T14:14:28.2316496+08:00","gmt_modified":"2026-08-05T14:14:28.2316496+08:00"},{"id":1149,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"358d17256baad827344f9c962732f05f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#28-32","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1150,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"358d17256baad827344f9c962732f05f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 28-32","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1151,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"7630382313cadec5c6d8adc92dcc9fee","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java#23-60","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1152,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"7630382313cadec5c6d8adc92dcc9fee","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-60","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1153,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"a93ae9fd67ae091cc5de42e9372a4a5b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#35-39","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1154,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"a93ae9fd67ae091cc5de42e9372a4a5b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 35-39","gmt_create":"2026-08-05T14:14:28.2331505+08:00","gmt_modified":"2026-08-05T14:14:28.2331505+08:00"},{"id":1155,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"852adaecbef1690c54f6a1a0c07b01b1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java#23-57","gmt_create":"2026-08-05T14:14:28.2331505+08:00","gmt_modified":"2026-08-05T14:14:28.2331505+08:00"},{"id":1156,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"852adaecbef1690c54f6a1a0c07b01b1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-57","gmt_create":"2026-08-05T14:14:28.2331505+08:00","gmt_modified":"2026-08-05T14:14:28.2331505+08:00"},{"id":1157,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"6752445343d892cce179d933238b24a6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#42-47","gmt_create":"2026-08-05T14:14:28.2331505+08:00","gmt_modified":"2026-08-05T14:14:28.2331505+08:00"},{"id":1158,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"6752445343d892cce179d933238b24a6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-47","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1159,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"30311c6851277a382e67d95b83c45f16","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#50-54","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1160,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"30311c6851277a382e67d95b83c45f16","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 50-54","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1161,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"ab67df1936419ba1cf1e0029a23c5bf2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java#35-39","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1162,"source_id":"db5d3491fb45251456163d012a823f5d","target_id":"ab67df1936419ba1cf1e0029a23c5bf2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 35-39","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1163,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"b300c143a1d0c61e70f56c406a4d7a91","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java#43-49","gmt_create":"2026-08-05T14:14:28.2351452+08:00","gmt_modified":"2026-08-05T14:14:28.2351452+08:00"},{"id":1164,"source_id":"db5d3491fb45251456163d012a823f5d","target_id":"b300c143a1d0c61e70f56c406a4d7a91","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 43-49","gmt_create":"2026-08-05T14:14:28.2351452+08:00","gmt_modified":"2026-08-05T14:14:28.2351452+08:00"},{"id":1165,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"205841de1f0b7e0b83cdb8a171f441a0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java#22-47","gmt_create":"2026-08-05T14:14:28.2351452+08:00","gmt_modified":"2026-08-05T14:14:28.2351452+08:00"},{"id":1166,"source_id":"246da6901c21f063ab47e58aaebcdd3c","target_id":"205841de1f0b7e0b83cdb8a171f441a0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-47","gmt_create":"2026-08-05T14:14:28.2351452+08:00","gmt_modified":"2026-08-05T14:14:28.2351452+08:00"},{"id":1167,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"b0af3174f3549d3d50b7051ecf1610ad","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#28-54","gmt_create":"2026-08-05T14:14:28.2361427+08:00","gmt_modified":"2026-08-05T14:14:28.2361427+08:00"},{"id":1168,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"b0af3174f3549d3d50b7051ecf1610ad","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 28-54","gmt_create":"2026-08-05T14:14:28.2361427+08:00","gmt_modified":"2026-08-05T14:14:28.2361427+08:00"},{"id":1169,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"4b325dd0ffe965ccff6bc2e8acc431d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","gmt_create":"2026-08-05T14:15:12.751001+08:00","gmt_modified":"2026-08-05T14:15:12.751001+08:00"},{"id":1170,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"74123de2770c04a2d8a4787f177714fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","gmt_create":"2026-08-05T14:15:12.751001+08:00","gmt_modified":"2026-08-05T14:15:12.751001+08:00"},{"id":1171,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"46bb7615dec0d0825cbcc4b846b93bf6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","gmt_create":"2026-08-05T14:15:12.7519919+08:00","gmt_modified":"2026-08-05T14:15:12.7519919+08:00"},{"id":1172,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-05T14:15:12.7519919+08:00","gmt_modified":"2026-08-05T14:15:12.7519919+08:00"},{"id":1173,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"8a7bb9534d7381df886b1a476664b902","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","gmt_create":"2026-08-05T14:15:12.7519919+08:00","gmt_modified":"2026-08-05T14:15:12.7519919+08:00"},{"id":1174,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-05T14:15:12.7535025+08:00","gmt_modified":"2026-08-05T14:15:12.7535025+08:00"},{"id":1175,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-05T14:15:12.7544973+08:00","gmt_modified":"2026-08-05T14:15:12.7544973+08:00"},{"id":1176,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-05T14:15:12.7564921+08:00","gmt_modified":"2026-08-05T14:15:12.7564921+08:00"},{"id":1177,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"443c00696b8cf69bb4c73995c949f40d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","gmt_create":"2026-08-05T14:15:12.7564921+08:00","gmt_modified":"2026-08-05T14:15:12.7564921+08:00"},{"id":1178,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"197b55f1b7d7d1be28b124897acfa1eb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","gmt_create":"2026-08-05T14:15:12.7574899+08:00","gmt_modified":"2026-08-05T14:15:12.7574899+08:00"},{"id":1179,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-05T14:15:12.7574899+08:00","gmt_modified":"2026-08-05T14:15:12.7574899+08:00"},{"id":1180,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T14:15:12.7584874+08:00","gmt_modified":"2026-08-05T14:15:12.7584874+08:00"},{"id":1181,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T14:15:12.759484+08:00","gmt_modified":"2026-08-05T14:15:12.759484+08:00"},{"id":1182,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"34070e2c4487d700b9aae2fc036dcced","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","gmt_create":"2026-08-05T14:15:12.7604817+08:00","gmt_modified":"2026-08-05T14:15:12.7604817+08:00"},{"id":1183,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-05T14:15:12.7624794+08:00","gmt_modified":"2026-08-05T14:15:12.7624794+08:00"},{"id":1184,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"f648b675f6acc57fd1e4fe32e9a205c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","gmt_create":"2026-08-05T14:15:12.7634728+08:00","gmt_modified":"2026-08-05T14:15:12.7634728+08:00"},{"id":1185,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-05T14:15:12.764471+08:00","gmt_modified":"2026-08-05T14:15:12.764471+08:00"},{"id":1186,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"53e5a23ce2cd9f508b08b6e1eb290542","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","gmt_create":"2026-08-05T14:15:12.764471+08:00","gmt_modified":"2026-08-05T14:15:12.764471+08:00"},{"id":1187,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-05T14:15:12.7654678+08:00","gmt_modified":"2026-08-05T14:15:12.7654678+08:00"},{"id":1188,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-05T14:15:12.7654678+08:00","gmt_modified":"2026-08-05T14:15:12.7654678+08:00"},{"id":1189,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"8813519db2ec8d3788102bcc7d1f19bc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-app/src/main/java/com/crm/app/CrmAppApplication.java#1-200","gmt_create":"2026-08-05T14:15:12.7989776+08:00","gmt_modified":"2026-08-05T14:15:12.7989776+08:00"},{"id":1190,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-05T14:15:12.801607+08:00","gmt_modified":"2026-08-05T14:15:12.801607+08:00"},{"id":1191,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"3fa8c5117e3c0c5c18c29826dc404c80","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/AuthApplication.java#1-200","gmt_create":"2026-08-05T14:15:12.801607+08:00","gmt_modified":"2026-08-05T14:15:12.801607+08:00"},{"id":1192,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"332679fa8feff09a65449fc04e7b0399","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#30-42","gmt_create":"2026-08-05T14:15:12.8021235+08:00","gmt_modified":"2026-08-05T14:15:12.8021235+08:00"},{"id":1193,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"332679fa8feff09a65449fc04e7b0399","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-42","gmt_create":"2026-08-05T14:15:12.8021235+08:00","gmt_modified":"2026-08-05T14:15:12.8021235+08:00"},{"id":1194,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"da087c2c1b417a29878e1da67b50ab55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java#9-42","gmt_create":"2026-08-05T14:15:12.802636+08:00","gmt_modified":"2026-08-05T14:15:12.802636+08:00"},{"id":1195,"source_id":"8a7bb9534d7381df886b1a476664b902","target_id":"da087c2c1b417a29878e1da67b50ab55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-42","gmt_create":"2026-08-05T14:15:12.8031571+08:00","gmt_modified":"2026-08-05T14:15:12.8031571+08:00"},{"id":1196,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"a800a64e16cca84b005d717faf00070c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java#25-30","gmt_create":"2026-08-05T14:15:12.8031571+08:00","gmt_modified":"2026-08-05T14:15:12.8031571+08:00"},{"id":1197,"source_id":"443c00696b8cf69bb4c73995c949f40d","target_id":"a800a64e16cca84b005d717faf00070c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-30","gmt_create":"2026-08-05T14:15:12.8031571+08:00","gmt_modified":"2026-08-05T14:15:12.8031571+08:00"},{"id":1198,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"9c19bba97b38fe3dbcde5a59ab43be02","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#22","gmt_create":"2026-08-05T14:15:12.8036745+08:00","gmt_modified":"2026-08-05T14:15:12.8036745+08:00"},{"id":1199,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"b37809db1bcbb443f89e776fd2522d74","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java#1-36","gmt_create":"2026-08-05T14:15:12.8036745+08:00","gmt_modified":"2026-08-05T14:15:12.8036745+08:00"},{"id":1200,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"281426f342c415888879dec628d8ede2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java#1-68","gmt_create":"2026-08-05T14:15:12.8042008+08:00","gmt_modified":"2026-08-05T14:15:12.8042008+08:00"},{"id":1201,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"8bfb66ee95e0b604e7e00a10d54b97e2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java#1-140","gmt_create":"2026-08-05T14:15:12.8047244+08:00","gmt_modified":"2026-08-05T14:15:12.8047244+08:00"},{"id":1202,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-05T14:15:12.8057225+08:00","gmt_modified":"2026-08-05T14:15:12.8057225+08:00"},{"id":1203,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"78733cea63a5784d74c82bdf50e7b713","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java#1-200","gmt_create":"2026-08-05T14:15:12.8057225+08:00","gmt_modified":"2026-08-05T14:15:12.8057225+08:00"},{"id":1204,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-05T14:15:12.8062424+08:00","gmt_modified":"2026-08-05T14:15:12.8062424+08:00"},{"id":1205,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"72a034c4f1317ca49826baf8790a4c2e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java#1-200","gmt_create":"2026-08-05T14:15:12.8062424+08:00","gmt_modified":"2026-08-05T14:15:12.8062424+08:00"},{"id":1206,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"18e7588cf137e60731d97339c707dfab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#44-86","gmt_create":"2026-08-05T14:15:12.8067617+08:00","gmt_modified":"2026-08-05T14:15:12.8067617+08:00"},{"id":1207,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"18e7588cf137e60731d97339c707dfab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-86","gmt_create":"2026-08-05T14:15:12.8072799+08:00","gmt_modified":"2026-08-05T14:15:12.8072799+08:00"},{"id":1208,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"2738929e90eb6e3d8a356e1b4f661bb7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java#17-41","gmt_create":"2026-08-05T14:15:12.8072799+08:00","gmt_modified":"2026-08-05T14:15:12.8072799+08:00"},{"id":1209,"source_id":"ad239f5e0129b57722497e4051492302","target_id":"2738929e90eb6e3d8a356e1b4f661bb7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-41","gmt_create":"2026-08-05T14:15:12.8072799+08:00","gmt_modified":"2026-08-05T14:15:12.8072799+08:00"},{"id":1210,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"6ae7a9512788cb4d4a693b3edf3bff24","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#105-122","gmt_create":"2026-08-05T14:15:12.8077972+08:00","gmt_modified":"2026-08-05T14:15:12.8077972+08:00"},{"id":1211,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"6ae7a9512788cb4d4a693b3edf3bff24","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 105-122","gmt_create":"2026-08-05T14:15:12.8077972+08:00","gmt_modified":"2026-08-05T14:15:12.8077972+08:00"},{"id":1212,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"472299cc5292d464668a566f315641cc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#124-142","gmt_create":"2026-08-05T14:15:12.8083004+08:00","gmt_modified":"2026-08-05T14:15:12.8083004+08:00"},{"id":1213,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"472299cc5292d464668a566f315641cc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 124-142","gmt_create":"2026-08-05T14:15:12.816635+08:00","gmt_modified":"2026-08-05T14:15:12.816635+08:00"},{"id":1214,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"cfb2f09353f8b4ef5e4e5db759504d05","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java#32-96","gmt_create":"2026-08-05T14:15:12.8171542+08:00","gmt_modified":"2026-08-05T14:15:12.8171542+08:00"},{"id":1215,"source_id":"443c00696b8cf69bb4c73995c949f40d","target_id":"cfb2f09353f8b4ef5e4e5db759504d05","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-96","gmt_create":"2026-08-05T14:15:12.8176575+08:00","gmt_modified":"2026-08-05T14:15:12.8176575+08:00"},{"id":1216,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"77b6a344d88f4c26037ba82e391ac061","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java#12-52","gmt_create":"2026-08-05T14:15:12.8176706+08:00","gmt_modified":"2026-08-05T14:15:12.8176706+08:00"},{"id":1217,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"f3443603f743cb75a94a04d692a61a9f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java#12-76","gmt_create":"2026-08-05T14:15:12.818185+08:00","gmt_modified":"2026-08-05T14:15:12.818185+08:00"},{"id":1218,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"b2e64975f941d389f848f0911b5d21fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java#16-84","gmt_create":"2026-08-05T14:15:12.818185+08:00","gmt_modified":"2026-08-05T14:15:12.818185+08:00"},{"id":1219,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"11ff686199a527b16c34abb2c1c3f179","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#1-56","gmt_create":"2026-08-05T14:15:12.8187003+08:00","gmt_modified":"2026-08-05T14:15:12.8187003+08:00"},{"id":1220,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"c0493efa487cf930abd2933af3e72781","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java#1-19","gmt_create":"2026-08-05T14:15:12.8187085+08:00","gmt_modified":"2026-08-05T14:15:12.8187085+08:00"},{"id":1221,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-05T14:15:12.8192163+08:00","gmt_modified":"2026-08-05T14:15:12.8192163+08:00"},{"id":1222,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"a807bda309df8f0aa0cf90bbf4c0afd4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/annotation/DataScope.java#1-200","gmt_create":"2026-08-05T14:15:12.8192163+08:00","gmt_modified":"2026-08-05T14:15:12.8192163+08:00"},{"id":1223,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-05T14:15:12.8197472+08:00","gmt_modified":"2026-08-05T14:15:12.8197472+08:00"},{"id":1224,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"7799b89815bb4f06dd5caa2b3bd5568c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java#1-200","gmt_create":"2026-08-05T14:15:12.8197472+08:00","gmt_modified":"2026-08-05T14:15:12.8197472+08:00"},{"id":1225,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-05T14:15:12.8197472+08:00","gmt_modified":"2026-08-05T14:15:12.8197472+08:00"},{"id":1226,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"bb259727923efab26488eca0b1f201e0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java#1-200","gmt_create":"2026-08-05T14:15:12.8202866+08:00","gmt_modified":"2026-08-05T14:15:12.8202866+08:00"},{"id":1227,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-05T14:15:12.8202866+08:00","gmt_modified":"2026-08-05T14:15:12.8202866+08:00"},{"id":1228,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"cd7e601b4125b471cf816bcec228b752","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java#1-200","gmt_create":"2026-08-05T14:15:12.8207899+08:00","gmt_modified":"2026-08-05T14:15:12.8207899+08:00"},{"id":1229,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-05T14:15:12.8213548+08:00","gmt_modified":"2026-08-05T14:15:12.8213548+08:00"},{"id":1230,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"faf664190fd4a09ddb120b40bf445a54","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java#1-200","gmt_create":"2026-08-05T14:15:12.8213548+08:00","gmt_modified":"2026-08-05T14:15:12.8213548+08:00"},{"id":1231,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-05T14:15:12.8218923+08:00","gmt_modified":"2026-08-05T14:15:12.8218923+08:00"},{"id":1232,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"df096476d97c54172c5839a266e46867","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/TokenService.java#1-200","gmt_create":"2026-08-05T14:15:12.8218923+08:00","gmt_modified":"2026-08-05T14:15:12.8218923+08:00"},{"id":1233,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-05T14:15:12.8224095+08:00","gmt_modified":"2026-08-05T14:15:12.8224095+08:00"},{"id":1234,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"64aec830421b2d35910074429d1ee986","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java#1-200","gmt_create":"2026-08-05T14:15:12.8229265+08:00","gmt_modified":"2026-08-05T14:15:12.8229265+08:00"},{"id":1235,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-05T14:15:12.8229265+08:00","gmt_modified":"2026-08-05T14:15:12.8229265+08:00"},{"id":1236,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"0b81c5221d14e935e18bc19956fe502f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java#1-200","gmt_create":"2026-08-05T14:15:12.8229265+08:00","gmt_modified":"2026-08-05T14:15:12.8229265+08:00"},{"id":1237,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5fe39f4159a0d5a68c0d1ee34a2b6103","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java#1-76","gmt_create":"2026-08-05T14:15:12.8234421+08:00","gmt_modified":"2026-08-05T14:15:12.8234421+08:00"},{"id":1238,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"145452b72cda2735ac97a690f2b5cbd9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","gmt_create":"2026-08-05T14:15:12.8239733+08:00","gmt_modified":"2026-08-05T14:15:12.8239733+08:00"},{"id":1239,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"7687130ee4a47c1e4e4ef1082d573508","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java#239-242","gmt_create":"2026-08-05T14:15:12.8239733+08:00","gmt_modified":"2026-08-05T14:15:12.8239733+08:00"},{"id":1240,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"91398e71753529e02986d50a8cfc06e8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java#36-71","gmt_create":"2026-08-05T14:15:12.8245055+08:00","gmt_modified":"2026-08-05T14:15:12.8245055+08:00"},{"id":1241,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"ef24be7c3ce60d8e7b85f3203a781aa0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java#85-95","gmt_create":"2026-08-05T14:15:12.8250198+08:00","gmt_modified":"2026-08-05T14:15:12.8250198+08:00"},{"id":1242,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5609defe76e630b07bff8855db378c55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java#44-50","gmt_create":"2026-08-05T14:15:12.8255346+08:00","gmt_modified":"2026-08-05T14:15:12.8255346+08:00"},{"id":1243,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"90f1865562e9f5620beef18de905d9e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java#32-36","gmt_create":"2026-08-05T14:15:12.8260482+08:00","gmt_modified":"2026-08-05T14:15:12.8260482+08:00"},{"id":1244,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-05T14:15:12.8260482+08:00","gmt_modified":"2026-08-05T14:15:12.8260482+08:00"},{"id":1245,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"7c974ab041f6a9430c3be1c39833b929","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java#1-200","gmt_create":"2026-08-05T14:15:12.8265609+08:00","gmt_modified":"2026-08-05T14:15:12.8265609+08:00"},{"id":1246,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"204b3d8b3f185c9d4e51d901e51ade12","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java#1-265","gmt_create":"2026-08-05T14:15:12.8277424+08:00","gmt_modified":"2026-08-05T14:15:12.8277424+08:00"},{"id":1247,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-05T14:15:15.0857569+08:00","gmt_modified":"2026-08-05T14:15:15.0857569+08:00"},{"id":1248,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-05T14:15:15.0857569+08:00","gmt_modified":"2026-08-05T14:15:15.0857569+08:00"},{"id":1249,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-05T14:15:15.0862694+08:00","gmt_modified":"2026-08-05T14:15:15.0862694+08:00"},{"id":1250,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-05T14:15:15.0862694+08:00","gmt_modified":"2026-08-05T14:15:15.0862694+08:00"},{"id":1251,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-05T14:15:15.0862694+08:00","gmt_modified":"2026-08-05T14:15:15.0862694+08:00"},{"id":1252,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-05T14:15:15.0867856+08:00","gmt_modified":"2026-08-05T14:15:15.0867856+08:00"},{"id":1253,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-05T14:15:15.0867856+08:00","gmt_modified":"2026-08-05T14:15:15.0867856+08:00"},{"id":1254,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"443c00696b8cf69bb4c73995c949f40d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","gmt_create":"2026-08-05T14:15:15.0873039+08:00","gmt_modified":"2026-08-05T14:15:15.0873039+08:00"},{"id":1255,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-05T14:15:15.0873039+08:00","gmt_modified":"2026-08-05T14:15:15.0873039+08:00"},{"id":1256,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-05T14:15:15.0873039+08:00","gmt_modified":"2026-08-05T14:15:15.0873039+08:00"},{"id":1257,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-05T14:15:15.0873039+08:00","gmt_modified":"2026-08-05T14:15:15.0873039+08:00"},{"id":1258,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-05T14:15:15.0878186+08:00","gmt_modified":"2026-08-05T14:15:15.0878186+08:00"},{"id":1259,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"34070e2c4487d700b9aae2fc036dcced","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","gmt_create":"2026-08-05T14:15:15.0878186+08:00","gmt_modified":"2026-08-05T14:15:15.0878186+08:00"},{"id":1260,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-05T14:15:15.0878186+08:00","gmt_modified":"2026-08-05T14:15:15.0878186+08:00"},{"id":1261,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-05T14:15:15.0883279+08:00","gmt_modified":"2026-08-05T14:15:15.0883279+08:00"},{"id":1262,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-05T14:15:15.0883279+08:00","gmt_modified":"2026-08-05T14:15:15.0883279+08:00"},{"id":1263,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T14:15:15.0883279+08:00","gmt_modified":"2026-08-05T14:15:15.0883279+08:00"},{"id":1264,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T14:15:15.0888629+08:00","gmt_modified":"2026-08-05T14:15:15.0888629+08:00"},{"id":1265,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-05T14:15:15.0888629+08:00","gmt_modified":"2026-08-05T14:15:15.0888629+08:00"},{"id":1266,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-05T14:15:15.0888629+08:00","gmt_modified":"2026-08-05T14:15:15.0888629+08:00"},{"id":1267,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-05T14:15:15.0893818+08:00","gmt_modified":"2026-08-05T14:15:15.0893818+08:00"},{"id":1268,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-05T14:15:15.0893818+08:00","gmt_modified":"2026-08-05T14:15:15.0893818+08:00"},{"id":1269,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-05T14:15:15.0893818+08:00","gmt_modified":"2026-08-05T14:15:15.0893818+08:00"},{"id":1270,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-05T14:15:15.0899042+08:00","gmt_modified":"2026-08-05T14:15:15.0899042+08:00"},{"id":1271,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-05T14:15:15.0899042+08:00","gmt_modified":"2026-08-05T14:15:15.0899042+08:00"},{"id":1272,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"d9ade6309a688b79e49a87c991d5af6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","gmt_create":"2026-08-05T14:15:15.0904322+08:00","gmt_modified":"2026-08-05T14:15:15.0904322+08:00"},{"id":1273,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-05T14:15:15.0904322+08:00","gmt_modified":"2026-08-05T14:15:15.0904322+08:00"},{"id":1274,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"aab51a092e42f86e794b23b95107cba3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","gmt_create":"2026-08-05T14:15:15.0904322+08:00","gmt_modified":"2026-08-05T14:15:15.0904322+08:00"},{"id":1275,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"d9d6f5b3e8856fa6995fdc7ed74c6382","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java","gmt_create":"2026-08-05T14:15:15.0909407+08:00","gmt_modified":"2026-08-05T14:15:15.0909407+08:00"},{"id":1276,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"38d9b83ff8f46a8113aa787616b2f802","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java","gmt_create":"2026-08-05T14:15:15.0909407+08:00","gmt_modified":"2026-08-05T14:15:15.0909407+08:00"},{"id":1277,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"eb41d1eb6dbcb66d966ca3b557af45d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java","gmt_create":"2026-08-05T14:15:15.0909407+08:00","gmt_modified":"2026-08-05T14:15:15.0909407+08:00"},{"id":1278,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"28e5eef69286d763453cf31a32070685","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java","gmt_create":"2026-08-05T14:15:15.091453+08:00","gmt_modified":"2026-08-05T14:15:15.091453+08:00"},{"id":1279,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"30ac7fd632012faca8156feaa071ff46","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java","gmt_create":"2026-08-05T14:15:15.091453+08:00","gmt_modified":"2026-08-05T14:15:15.091453+08:00"},{"id":1280,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-05T14:15:15.091453+08:00","gmt_modified":"2026-08-05T14:15:15.091453+08:00"},{"id":1281,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-05T14:15:15.091453+08:00","gmt_modified":"2026-08-05T14:15:15.091453+08:00"},{"id":1282,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-05T14:15:15.0919687+08:00","gmt_modified":"2026-08-05T14:15:15.0919687+08:00"},{"id":1283,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-05T14:15:15.0919687+08:00","gmt_modified":"2026-08-05T14:15:15.0919687+08:00"},{"id":1284,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-05T14:15:15.0919687+08:00","gmt_modified":"2026-08-05T14:15:15.0919687+08:00"},{"id":1285,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-05T14:15:15.0924836+08:00","gmt_modified":"2026-08-05T14:15:15.0924836+08:00"},{"id":1286,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-05T14:15:15.0924836+08:00","gmt_modified":"2026-08-05T14:15:15.0924836+08:00"},{"id":1287,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"21067ee0ba0180f2b8514173343f7b0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java","gmt_create":"2026-08-05T14:15:15.0924836+08:00","gmt_modified":"2026-08-05T14:15:15.0924836+08:00"},{"id":1288,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-05T14:15:15.092993+08:00","gmt_modified":"2026-08-05T14:15:15.092993+08:00"},{"id":1289,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-05T14:15:15.092993+08:00","gmt_modified":"2026-08-05T14:15:15.092993+08:00"},{"id":1290,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0935298+08:00","gmt_modified":"2026-08-05T14:15:15.0935298+08:00"},{"id":1291,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0935298+08:00","gmt_modified":"2026-08-05T14:15:15.0935298+08:00"},{"id":1292,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0935298+08:00","gmt_modified":"2026-08-05T14:15:15.0935298+08:00"},{"id":1293,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"f9926a70a628c5e92f0d239030b13f71","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0940427+08:00","gmt_modified":"2026-08-05T14:15:15.0940427+08:00"},{"id":1294,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0940427+08:00","gmt_modified":"2026-08-05T14:15:15.0940427+08:00"},{"id":1295,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0940427+08:00","gmt_modified":"2026-08-05T14:15:15.0940427+08:00"},{"id":1296,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0945716+08:00","gmt_modified":"2026-08-05T14:15:15.0945716+08:00"},{"id":1297,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"3259a2ba7196998a24118782cceeecee","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","gmt_create":"2026-08-05T14:15:15.0945716+08:00","gmt_modified":"2026-08-05T14:15:15.0945716+08:00"},{"id":1298,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-05T14:15:15.0950751+08:00","gmt_modified":"2026-08-05T14:15:15.0950751+08:00"},{"id":1299,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-05T14:15:15.1094913+08:00","gmt_modified":"2026-08-05T14:15:15.1094913+08:00"},{"id":1300,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-05T14:15:15.1094913+08:00","gmt_modified":"2026-08-05T14:15:15.1094913+08:00"},{"id":1301,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-05T14:15:15.1094913+08:00","gmt_modified":"2026-08-05T14:15:15.1094913+08:00"},{"id":1302,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"db36768510c04fba9ecddbaac9538997","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysDept.java","gmt_create":"2026-08-05T14:15:15.1383313+08:00","gmt_modified":"2026-08-05T14:15:15.1383313+08:00"},{"id":1303,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8a7bb9534d7381df886b1a476664b902","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","gmt_create":"2026-08-05T14:15:15.1383313+08:00","gmt_modified":"2026-08-05T14:15:15.1383313+08:00"},{"id":1304,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1305,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1306,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"45f8c9e51de204a6ce44b7b414bf967f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1307,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1308,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1309,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-05T14:15:15.1403245+08:00","gmt_modified":"2026-08-05T14:15:15.1403245+08:00"},{"id":1310,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-05T14:15:15.1403245+08:00","gmt_modified":"2026-08-05T14:15:15.1403245+08:00"},{"id":1311,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-05T14:15:15.1403245+08:00","gmt_modified":"2026-08-05T14:15:15.1403245+08:00"},{"id":1312,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-05T14:15:15.1403245+08:00","gmt_modified":"2026-08-05T14:15:15.1403245+08:00"},{"id":1313,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-05T14:15:15.1747407+08:00","gmt_modified":"2026-08-05T14:15:15.1747407+08:00"},{"id":1314,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-05T14:15:15.1760282+08:00","gmt_modified":"2026-08-05T14:15:15.1760282+08:00"},{"id":1315,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-05T14:15:15.1850937+08:00","gmt_modified":"2026-08-05T14:15:15.1850937+08:00"},{"id":1316,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-05T14:15:15.1850937+08:00","gmt_modified":"2026-08-05T14:15:15.1850937+08:00"},{"id":1317,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-05T14:15:15.1856072+08:00","gmt_modified":"2026-08-05T14:15:15.1856072+08:00"},{"id":1318,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-05T14:15:15.1856072+08:00","gmt_modified":"2026-08-05T14:15:15.1856072+08:00"},{"id":1319,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-05T14:15:15.1954559+08:00","gmt_modified":"2026-08-05T14:15:15.1954559+08:00"},{"id":1320,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-05T14:15:15.1959604+08:00","gmt_modified":"2026-08-05T14:15:15.1959604+08:00"},{"id":1321,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-05T14:15:15.199218+08:00","gmt_modified":"2026-08-05T14:15:15.199218+08:00"},{"id":1322,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-05T14:15:15.199218+08:00","gmt_modified":"2026-08-05T14:15:15.199218+08:00"},{"id":1323,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-05T14:15:15.199218+08:00","gmt_modified":"2026-08-05T14:15:15.199218+08:00"},{"id":1324,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-05T14:15:15.199729+08:00","gmt_modified":"2026-08-05T14:15:15.199729+08:00"},{"id":1325,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-05T14:15:15.199729+08:00","gmt_modified":"2026-08-05T14:15:15.199729+08:00"},{"id":1326,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-05T14:15:15.199729+08:00","gmt_modified":"2026-08-05T14:15:15.199729+08:00"},{"id":1327,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-05T14:15:15.199729+08:00","gmt_modified":"2026-08-05T14:15:15.199729+08:00"},{"id":1328,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-05T14:15:15.2002391+08:00","gmt_modified":"2026-08-05T14:15:15.2002391+08:00"},{"id":1329,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-05T14:15:15.2002391+08:00","gmt_modified":"2026-08-05T14:15:15.2002391+08:00"},{"id":1330,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-05T14:15:15.2241292+08:00","gmt_modified":"2026-08-05T14:15:15.2241292+08:00"},{"id":1331,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-05T14:16:09.5993054+08:00","gmt_modified":"2026-08-05T14:16:09.5993054+08:00"},{"id":1332,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T14:16:09.5998288+08:00","gmt_modified":"2026-08-05T14:16:09.5998288+08:00"},{"id":1333,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T14:16:09.5998288+08:00","gmt_modified":"2026-08-05T14:16:09.5998288+08:00"},{"id":1334,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-05T14:16:09.5998288+08:00","gmt_modified":"2026-08-05T14:16:09.5998288+08:00"},{"id":1335,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-05T14:16:09.5998288+08:00","gmt_modified":"2026-08-05T14:16:09.5998288+08:00"},{"id":1336,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-05T14:16:09.6003396+08:00","gmt_modified":"2026-08-05T14:16:09.6003396+08:00"},{"id":1337,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-05T14:16:09.6003396+08:00","gmt_modified":"2026-08-05T14:16:09.6003396+08:00"},{"id":1338,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-05T14:16:09.6008489+08:00","gmt_modified":"2026-08-05T14:16:09.6008489+08:00"},{"id":1339,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-05T14:16:09.6008489+08:00","gmt_modified":"2026-08-05T14:16:09.6008489+08:00"},{"id":1340,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-05T14:16:09.6013518+08:00","gmt_modified":"2026-08-05T14:16:09.6013518+08:00"},{"id":1341,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-05T14:16:09.6014654+08:00","gmt_modified":"2026-08-05T14:16:09.6014654+08:00"},{"id":1342,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-05T14:16:09.6014654+08:00","gmt_modified":"2026-08-05T14:16:09.6014654+08:00"},{"id":1343,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-05T14:16:09.6019768+08:00","gmt_modified":"2026-08-05T14:16:09.6019768+08:00"},{"id":1344,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-05T14:16:09.6019768+08:00","gmt_modified":"2026-08-05T14:16:09.6019768+08:00"},{"id":1345,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-05T14:16:09.6024881+08:00","gmt_modified":"2026-08-05T14:16:09.6024881+08:00"},{"id":1346,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-05T14:16:09.6024881+08:00","gmt_modified":"2026-08-05T14:16:09.6024881+08:00"},{"id":1347,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-05T14:16:09.6029912+08:00","gmt_modified":"2026-08-05T14:16:09.6029912+08:00"},{"id":1348,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"45f8c9e51de204a6ce44b7b414bf967f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-05T14:16:09.6029996+08:00","gmt_modified":"2026-08-05T14:16:09.6029996+08:00"},{"id":1349,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-05T14:16:09.6029996+08:00","gmt_modified":"2026-08-05T14:16:09.6029996+08:00"},{"id":1350,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-05T14:16:09.6035087+08:00","gmt_modified":"2026-08-05T14:16:09.6035087+08:00"},{"id":1351,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-05T14:16:09.6035087+08:00","gmt_modified":"2026-08-05T14:16:09.6035087+08:00"},{"id":1352,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"ebcc9c2bbb50f1c9b34c399e554d5c61","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java","gmt_create":"2026-08-05T14:16:09.6035087+08:00","gmt_modified":"2026-08-05T14:16:09.6035087+08:00"},{"id":1353,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-05T14:16:09.604017+08:00","gmt_modified":"2026-08-05T14:16:09.604017+08:00"},{"id":1354,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"443c00696b8cf69bb4c73995c949f40d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","gmt_create":"2026-08-05T14:16:09.604017+08:00","gmt_modified":"2026-08-05T14:16:09.604017+08:00"},{"id":1355,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-05T14:16:09.604017+08:00","gmt_modified":"2026-08-05T14:16:09.604017+08:00"},{"id":1356,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-05T14:16:09.6045258+08:00","gmt_modified":"2026-08-05T14:16:09.6045258+08:00"},{"id":1357,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-05T14:16:09.6045258+08:00","gmt_modified":"2026-08-05T14:16:09.6045258+08:00"},{"id":1358,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"34ea7d69-8030-495d-8782-3aa087c80de9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 34ea7d69-8030-495d-8782-3aa087c80de9","gmt_create":"2026-08-05T14:16:10.3637964+08:00","gmt_modified":"2026-08-05T14:16:10.3637964+08:00"},{"id":1359,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c16d495e-28fe-40ad-acd3-302f8922fc8d -\u003e 176adc32-f844-4e47-91a5-ec14bd5dca47","gmt_create":"2026-08-05T14:16:10.3637964+08:00","gmt_modified":"2026-08-05T14:16:10.3637964+08:00"},{"id":1360,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"da156be4-8933-4ba5-99cb-63907914b9ad","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0071dc3e-4020-43d2-b126-1d18e74ed40d -\u003e da156be4-8933-4ba5-99cb-63907914b9ad","gmt_create":"2026-08-05T14:16:10.3647934+08:00","gmt_modified":"2026-08-05T14:16:10.3647934+08:00"},{"id":1361,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"883d8163-419b-460d-a558-eb118e4a06c9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0071dc3e-4020-43d2-b126-1d18e74ed40d -\u003e 883d8163-419b-460d-a558-eb118e4a06c9","gmt_create":"2026-08-05T14:16:10.3647934+08:00","gmt_modified":"2026-08-05T14:16:10.3647934+08:00"},{"id":1362,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"f41f75b2-5d32-41eb-9c7e-db2d987ddfd0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0071dc3e-4020-43d2-b126-1d18e74ed40d -\u003e f41f75b2-5d32-41eb-9c7e-db2d987ddfd0","gmt_create":"2026-08-05T14:16:10.3647934+08:00","gmt_modified":"2026-08-05T14:16:10.3647934+08:00"},{"id":1363,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"bd0bea22-698c-4a21-9e56-4e8d3a475ba7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0071dc3e-4020-43d2-b126-1d18e74ed40d -\u003e bd0bea22-698c-4a21-9e56-4e8d3a475ba7","gmt_create":"2026-08-05T14:16:10.3647934+08:00","gmt_modified":"2026-08-05T14:16:10.3647934+08:00"},{"id":1364,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"1562e48f-2c79-4024-ab33-4c40084240e7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e 1562e48f-2c79-4024-ab33-4c40084240e7","gmt_create":"2026-08-05T14:16:10.3718237+08:00","gmt_modified":"2026-08-05T14:16:10.3718237+08:00"},{"id":1365,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":1366,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-06T08:43:51.2880745+08:00","gmt_modified":"2026-08-06T08:43:51.2880745+08:00"},{"id":1367,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-06T08:43:51.2880745+08:00","gmt_modified":"2026-08-06T08:43:51.2880745+08:00"},{"id":1368,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T08:43:51.2890729+08:00","gmt_modified":"2026-08-06T08:43:51.2890729+08:00"},{"id":1369,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T08:43:51.2890729+08:00","gmt_modified":"2026-08-06T08:43:51.2890729+08:00"},{"id":1370,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-06T08:43:51.2890729+08:00","gmt_modified":"2026-08-06T08:43:51.2890729+08:00"},{"id":1371,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T08:43:51.2890729+08:00","gmt_modified":"2026-08-06T08:43:51.2890729+08:00"},{"id":1372,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T08:43:51.2900698+08:00","gmt_modified":"2026-08-06T08:43:51.2900698+08:00"},{"id":1373,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T08:43:51.2900698+08:00","gmt_modified":"2026-08-06T08:43:51.2900698+08:00"},{"id":1374,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T08:43:51.2900698+08:00","gmt_modified":"2026-08-06T08:43:51.2900698+08:00"},{"id":1375,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:43:51.3150099+08:00","gmt_modified":"2026-08-06T08:43:51.3150099+08:00"},{"id":1376,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:43:51.3150099+08:00","gmt_modified":"2026-08-06T08:43:51.3150099+08:00"},{"id":1377,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T08:43:51.3160003+08:00","gmt_modified":"2026-08-06T08:43:51.3160003+08:00"},{"id":1378,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-06T08:43:51.3160003+08:00","gmt_modified":"2026-08-06T08:43:51.3160003+08:00"},{"id":1379,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T08:43:51.3169971+08:00","gmt_modified":"2026-08-06T08:43:51.3169971+08:00"},{"id":1380,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T08:43:51.3169971+08:00","gmt_modified":"2026-08-06T08:43:51.3169971+08:00"},{"id":1381,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T08:43:51.3169971+08:00","gmt_modified":"2026-08-06T08:43:51.3169971+08:00"},{"id":1382,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T08:43:51.3169971+08:00","gmt_modified":"2026-08-06T08:43:51.3169971+08:00"},{"id":1383,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T08:43:51.3179943+08:00","gmt_modified":"2026-08-06T08:43:51.3179943+08:00"},{"id":1384,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T08:43:51.3179943+08:00","gmt_modified":"2026-08-06T08:43:51.3179943+08:00"},{"id":1385,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-06T08:43:59.3576045+08:00","gmt_modified":"2026-08-06T08:43:59.3576045+08:00"},{"id":1386,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T08:43:59.3581154+08:00","gmt_modified":"2026-08-06T08:43:59.3581154+08:00"},{"id":1387,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"3204c0be957891dd9b878beed284f4a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","gmt_create":"2026-08-06T08:43:59.3581154+08:00","gmt_modified":"2026-08-06T08:43:59.3581154+08:00"},{"id":1388,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-06T08:43:59.3586628+08:00","gmt_modified":"2026-08-06T08:43:59.3586628+08:00"},{"id":1389,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-06T08:43:59.3591814+08:00","gmt_modified":"2026-08-06T08:43:59.3591814+08:00"},{"id":1390,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T08:43:59.3597458+08:00","gmt_modified":"2026-08-06T08:43:59.3597458+08:00"},{"id":1391,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T08:43:59.3602856+08:00","gmt_modified":"2026-08-06T08:43:59.3602856+08:00"},{"id":1392,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T08:43:59.3602856+08:00","gmt_modified":"2026-08-06T08:43:59.3602856+08:00"},{"id":1393,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:43:59.3608018+08:00","gmt_modified":"2026-08-06T08:43:59.3608018+08:00"},{"id":1394,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"cbd7e122df81b379d68096c9ad0d1bc5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","gmt_create":"2026-08-06T08:43:59.3613142+08:00","gmt_modified":"2026-08-06T08:43:59.3613142+08:00"},{"id":1395,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-06T08:43:59.3613142+08:00","gmt_modified":"2026-08-06T08:43:59.3613142+08:00"},{"id":1396,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T08:43:59.3618236+08:00","gmt_modified":"2026-08-06T08:43:59.3618236+08:00"},{"id":1397,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T08:43:59.3618236+08:00","gmt_modified":"2026-08-06T08:43:59.3618236+08:00"},{"id":1398,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-06T08:43:59.3618236+08:00","gmt_modified":"2026-08-06T08:43:59.3618236+08:00"},{"id":1399,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"8e7d2facecaa43d7d0a62897ce6852b8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailRenderer.java","gmt_create":"2026-08-06T08:43:59.3623381+08:00","gmt_modified":"2026-08-06T08:43:59.3623381+08:00"},{"id":1400,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"8725216d36747b23e1900d0a80a2e566","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","gmt_create":"2026-08-06T08:43:59.3623381+08:00","gmt_modified":"2026-08-06T08:43:59.3623381+08:00"},{"id":1401,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:43:59.3628529+08:00","gmt_modified":"2026-08-06T08:43:59.3628529+08:00"},{"id":1402,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T08:43:59.3628529+08:00","gmt_modified":"2026-08-06T08:43:59.3628529+08:00"},{"id":1403,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T08:43:59.3633698+08:00","gmt_modified":"2026-08-06T08:43:59.3633698+08:00"},{"id":1404,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T08:43:59.3633698+08:00","gmt_modified":"2026-08-06T08:43:59.3633698+08:00"},{"id":1405,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T08:43:59.3638831+08:00","gmt_modified":"2026-08-06T08:43:59.3638831+08:00"},{"id":1406,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T08:43:59.3638831+08:00","gmt_modified":"2026-08-06T08:43:59.3638831+08:00"},{"id":1407,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T08:43:59.3644008+08:00","gmt_modified":"2026-08-06T08:43:59.3644008+08:00"},{"id":1408,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T08:43:59.3644008+08:00","gmt_modified":"2026-08-06T08:43:59.3644008+08:00"},{"id":1409,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-06T08:43:59.3649269+08:00","gmt_modified":"2026-08-06T08:43:59.3649269+08:00"},{"id":1410,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-06T08:43:59.3649269+08:00","gmt_modified":"2026-08-06T08:43:59.3649269+08:00"},{"id":1411,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-06T08:43:59.3654504+08:00","gmt_modified":"2026-08-06T08:43:59.3654504+08:00"},{"id":1412,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-06T08:43:59.3654504+08:00","gmt_modified":"2026-08-06T08:43:59.3654504+08:00"},{"id":1413,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-06T08:43:59.3659663+08:00","gmt_modified":"2026-08-06T08:43:59.3659663+08:00"},{"id":1414,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-06T08:43:59.3659663+08:00","gmt_modified":"2026-08-06T08:43:59.3659663+08:00"},{"id":1415,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-06T08:44:04.621214+08:00","gmt_modified":"2026-08-06T08:44:04.621214+08:00"},{"id":1416,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-06T08:44:04.6217253+08:00","gmt_modified":"2026-08-06T08:44:04.6217253+08:00"},{"id":1417,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T08:44:04.7340242+08:00","gmt_modified":"2026-08-06T08:44:04.7340242+08:00"},{"id":1418,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T08:44:04.7350766+08:00","gmt_modified":"2026-08-06T08:44:04.7350766+08:00"},{"id":1419,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-06T08:44:04.7355884+08:00","gmt_modified":"2026-08-06T08:44:04.7355884+08:00"},{"id":1420,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T08:44:04.7355884+08:00","gmt_modified":"2026-08-06T08:44:04.7355884+08:00"},{"id":1421,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T08:44:04.7355884+08:00","gmt_modified":"2026-08-06T08:44:04.7355884+08:00"},{"id":1422,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T08:44:04.7360967+08:00","gmt_modified":"2026-08-06T08:44:04.7360967+08:00"},{"id":1423,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-06T08:44:04.7360967+08:00","gmt_modified":"2026-08-06T08:44:04.7360967+08:00"},{"id":1424,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T08:44:04.7360967+08:00","gmt_modified":"2026-08-06T08:44:04.7360967+08:00"},{"id":1425,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T08:44:04.7366074+08:00","gmt_modified":"2026-08-06T08:44:04.7366074+08:00"},{"id":1426,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T08:44:04.7366074+08:00","gmt_modified":"2026-08-06T08:44:04.7366074+08:00"},{"id":1427,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T08:44:04.7366074+08:00","gmt_modified":"2026-08-06T08:44:04.7366074+08:00"},{"id":1428,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T08:44:04.7371188+08:00","gmt_modified":"2026-08-06T08:44:04.7371188+08:00"},{"id":1429,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T08:44:04.7371188+08:00","gmt_modified":"2026-08-06T08:44:04.7371188+08:00"},{"id":1430,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T08:44:04.7371188+08:00","gmt_modified":"2026-08-06T08:44:04.7371188+08:00"},{"id":1431,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:44:04.7371188+08:00","gmt_modified":"2026-08-06T08:44:04.7371188+08:00"},{"id":1432,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"cbd7e122df81b379d68096c9ad0d1bc5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","gmt_create":"2026-08-06T08:44:04.7377136+08:00","gmt_modified":"2026-08-06T08:44:04.7377136+08:00"},{"id":1433,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"8e7d2facecaa43d7d0a62897ce6852b8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailRenderer.java","gmt_create":"2026-08-06T08:44:04.7377136+08:00","gmt_modified":"2026-08-06T08:44:04.7377136+08:00"},{"id":1434,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"8725216d36747b23e1900d0a80a2e566","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","gmt_create":"2026-08-06T08:44:04.7377136+08:00","gmt_modified":"2026-08-06T08:44:04.7377136+08:00"},{"id":1435,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"c54126cf8c967b28247c04987c23f7dd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java","gmt_create":"2026-08-06T08:44:04.7382273+08:00","gmt_modified":"2026-08-06T08:44:04.7382273+08:00"},{"id":1436,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"585450a9f743134860e41875c7125ee3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java","gmt_create":"2026-08-06T08:44:04.7382273+08:00","gmt_modified":"2026-08-06T08:44:04.7382273+08:00"},{"id":1437,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"ab9df9e51b9c174974fc980a7b75a934","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ThumbnailImageUtils.java","gmt_create":"2026-08-06T08:44:04.7382273+08:00","gmt_modified":"2026-08-06T08:44:04.7382273+08:00"},{"id":1438,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:44:04.7387459+08:00","gmt_modified":"2026-08-06T08:44:04.7387459+08:00"},{"id":1439,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T08:44:04.7387459+08:00","gmt_modified":"2026-08-06T08:44:04.7387459+08:00"},{"id":1440,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-06T08:45:06.6602802+08:00","gmt_modified":"2026-08-06T08:45:06.6602802+08:00"},{"id":1441,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T08:45:06.6624928+08:00","gmt_modified":"2026-08-06T08:45:06.6624928+08:00"},{"id":1442,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-06T08:45:06.6630292+08:00","gmt_modified":"2026-08-06T08:45:06.6630292+08:00"},{"id":1443,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-06T08:45:06.6630292+08:00","gmt_modified":"2026-08-06T08:45:06.6630292+08:00"},{"id":1444,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T08:45:06.6635564+08:00","gmt_modified":"2026-08-06T08:45:06.6635564+08:00"},{"id":1445,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T08:45:06.6640667+08:00","gmt_modified":"2026-08-06T08:45:06.6640667+08:00"},{"id":1446,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-06T08:45:06.6640667+08:00","gmt_modified":"2026-08-06T08:45:06.6640667+08:00"},{"id":1447,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T08:45:06.6640667+08:00","gmt_modified":"2026-08-06T08:45:06.6640667+08:00"},{"id":1448,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T08:45:06.6645764+08:00","gmt_modified":"2026-08-06T08:45:06.6645764+08:00"},{"id":1449,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T08:45:06.6645764+08:00","gmt_modified":"2026-08-06T08:45:06.6645764+08:00"},{"id":1450,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T08:45:06.6645764+08:00","gmt_modified":"2026-08-06T08:45:06.6645764+08:00"},{"id":1451,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:45:06.6650937+08:00","gmt_modified":"2026-08-06T08:45:06.6650937+08:00"},{"id":1452,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"cbd7e122df81b379d68096c9ad0d1bc5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","gmt_create":"2026-08-06T08:45:06.6650937+08:00","gmt_modified":"2026-08-06T08:45:06.6650937+08:00"},{"id":1453,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"8e7d2facecaa43d7d0a62897ce6852b8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailRenderer.java","gmt_create":"2026-08-06T08:45:06.6650937+08:00","gmt_modified":"2026-08-06T08:45:06.6650937+08:00"},{"id":1454,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"8725216d36747b23e1900d0a80a2e566","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","gmt_create":"2026-08-06T08:45:06.6656018+08:00","gmt_modified":"2026-08-06T08:45:06.6656018+08:00"},{"id":1455,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"c54126cf8c967b28247c04987c23f7dd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java","gmt_create":"2026-08-06T08:45:06.6656062+08:00","gmt_modified":"2026-08-06T08:45:06.6656062+08:00"},{"id":1456,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"585450a9f743134860e41875c7125ee3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java","gmt_create":"2026-08-06T08:45:06.6656062+08:00","gmt_modified":"2026-08-06T08:45:06.6656062+08:00"},{"id":1457,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"ab9df9e51b9c174974fc980a7b75a934","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ThumbnailImageUtils.java","gmt_create":"2026-08-06T08:45:06.6656062+08:00","gmt_modified":"2026-08-06T08:45:06.6656062+08:00"},{"id":1458,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:45:06.6661169+08:00","gmt_modified":"2026-08-06T08:45:06.6661169+08:00"},{"id":1459,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T08:45:06.6661169+08:00","gmt_modified":"2026-08-06T08:45:06.6661169+08:00"},{"id":1460,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T08:45:06.6666274+08:00","gmt_modified":"2026-08-06T08:45:06.6666274+08:00"},{"id":1461,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-06T08:45:06.6666274+08:00","gmt_modified":"2026-08-06T08:45:06.6666274+08:00"},{"id":1462,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T08:45:06.6666274+08:00","gmt_modified":"2026-08-06T08:45:06.6666274+08:00"},{"id":1463,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T08:45:06.6671373+08:00","gmt_modified":"2026-08-06T08:45:06.6671373+08:00"},{"id":1464,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T08:45:06.6671373+08:00","gmt_modified":"2026-08-06T08:45:06.6671373+08:00"},{"id":1465,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T08:45:06.6671373+08:00","gmt_modified":"2026-08-06T08:45:06.6671373+08:00"},{"id":1466,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T08:45:06.6676447+08:00","gmt_modified":"2026-08-06T08:45:06.6676447+08:00"},{"id":1467,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-06T08:45:06.6676447+08:00","gmt_modified":"2026-08-06T08:45:06.6676447+08:00"},{"id":1468,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-06T08:45:06.6676447+08:00","gmt_modified":"2026-08-06T08:45:06.6676447+08:00"},{"id":1469,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-06T08:45:06.668162+08:00","gmt_modified":"2026-08-06T08:45:06.668162+08:00"},{"id":1470,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-06T08:45:06.668162+08:00","gmt_modified":"2026-08-06T08:45:06.668162+08:00"},{"id":1471,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-06T08:45:06.668162+08:00","gmt_modified":"2026-08-06T08:45:06.668162+08:00"},{"id":1472,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"db63226d-3f30-498a-9bd7-2de0049e1d73","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 30a25b67-b398-4ae7-bd7f-f3d91055c76d -\u003e db63226d-3f30-498a-9bd7-2de0049e1d73","gmt_create":"2026-08-06T08:45:07.5277142+08:00","gmt_modified":"2026-08-06T08:45:07.5277142+08:00"},{"id":1473,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"36b15a35-52f9-4e29-ad05-6dac66f00c14","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 30a25b67-b398-4ae7-bd7f-f3d91055c76d -\u003e 36b15a35-52f9-4e29-ad05-6dac66f00c14","gmt_create":"2026-08-06T08:45:07.5277142+08:00","gmt_modified":"2026-08-06T08:45:07.5277142+08:00"},{"id":1474,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"c20b2e4f-5904-4ba8-ba7e-7e73b1874278","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 30a25b67-b398-4ae7-bd7f-f3d91055c76d -\u003e c20b2e4f-5904-4ba8-ba7e-7e73b1874278","gmt_create":"2026-08-06T08:45:07.5277142+08:00","gmt_modified":"2026-08-06T08:45:07.5277142+08:00"},{"id":1475,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 30a25b67-b398-4ae7-bd7f-f3d91055c76d -\u003e 9c64cc91-56af-4905-b362-8808cd7fdad9","gmt_create":"2026-08-06T08:45:07.5287117+08:00","gmt_modified":"2026-08-06T08:45:07.5287117+08:00"},{"id":1476,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c16d495e-28fe-40ad-acd3-302f8922fc8d -\u003e b445dcd0-583c-4864-b2e8-18cc9660ced3","gmt_create":"2026-08-06T08:45:07.5297088+08:00","gmt_modified":"2026-08-06T08:45:07.5297088+08:00"},{"id":1477,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0870c57d-c63c-477f-b69e-7799461cae3a -\u003e 9ae0059a-05ad-4318-857f-ce3b539fd9d5","gmt_create":"2026-08-06T08:45:07.5317039+08:00","gmt_modified":"2026-08-06T08:45:07.5317039+08:00"}],"source_files":[{"id":"9f120716e7b0381e045c66412550d1a9","path":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java","filename":"CrmAppApplication.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"ed816b898bf9d2e8548f1dfd5cdeadbb","path":"crm-app/src/main/resources/application.yml","filename":"application.yml","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"246da6901c21f063ab47e58aaebcdd3c","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","filename":"AuthController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"db5d3491fb45251456163d012a823f5d","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","filename":"SystemController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"6d19e7c47ad418f3577ff8cfcd56590f","path":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","filename":"SecurityConfig.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"979b533c66100f0a3f79f7542e2b01e0","path":"crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","filename":"PermissionConfig.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"10a536bc357c7840a6eec61b40741915","path":"crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","filename":"JwtAuthenticationFilter.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"720e90c29ddd88a8633c9d31ce443b5e","path":"crm-auth/src/main/java/com/crm/auth/security/TokenService.java","filename":"TokenService.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"9b38bcfac9c3a14d74c16429d22380fd","path":"crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","filename":"AuthLoginUser.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"ef98104ba47dd7d33624e1916c0694cd","path":"crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","filename":"DataScopeInterceptor.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","path":"crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","filename":"DataScopeTables.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"5725c122fbf467925192bf42403e7787","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","filename":"AuthServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"b95e6a3c690ffd8ed16d2d4163a5c648","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","filename":"AuthUserServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"887492aa11700fd0984b91d5fa1cf130","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","filename":"SysDeptServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"c612f590645fb36de9e13767f1c81a0c","path":"crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","filename":"DingTalkAuthClient.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"86622c8fa2eab6b1847927d47d77b7fd","path":"crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","filename":"ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"70a8328bf44d129f9e9f84a552674c0d","path":"crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java","filename":"DataScopeIntegrationTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"450e832ef93367bf62c150db0a3c2257","path":"crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedData.java","filename":"TestOwnedData.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"e6cba19378ad4cca1120a969537c90a1","path":"crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedDataMapper.java","filename":"TestOwnedDataMapper.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"a0e0e501f0f901ac1f12b089a1bf5f9a","path":"crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java","filename":"DingTalkAuthClientTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"ef7f823f436c1c0a09594b106637d202","path":"crm-auth/src/test/java/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.java","filename":"ThirdPartyAuthClientFactoryTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"0a944d6947cd45922d3e267c069fee6c","path":"crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java","filename":"AuthServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"e115f2054f8d1d592750cc634e682da8","path":"crm-auth/src/test/java/com/crm/auth/service/impl/AuthUserServiceImplTest.java","filename":"AuthUserServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"93b5379effd73cbce347a8747296d18c","path":"crm-auth/src/test/java/com/crm/auth/service/impl/SysDeptServiceImplTest.java","filename":"SysDeptServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"f204b35859a78f3352a067656ec89482","path":"crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java","filename":"UserListIntegrationTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"219bfc88fc6b98fdc50a57b641262250","path":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","filename":"GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"78f9a7cfb354a1eb9744378aeb898070","path":"crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","filename":"BusinessErrorException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"552d2164b5a76f113724b37692c9a8ad","path":"crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","filename":"MissingParameterException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"3d2db44a848dd979c85d02227c0860f1","path":"crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","filename":"PermissionErrorException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"a769abcb464b3fed3c877eaaa18bb7ea","path":"crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","filename":"ResourceNotExistException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"fbcc9319095d04d42cae2a4126d632cc","path":"crm-base/src/main/java/com/crm/base/domain/result/Result.java","filename":"Result.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"71737ec08030f7f53dcba1d13a65df12","path":"crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","filename":"ResultCodeEnum.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"839aaee42fad8c788d762040f926c7cf","path":"crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","filename":"PageResult.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"7a809dc905a15b19452162b602354d4f","path":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","filename":"BaseEntity.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"4df2448146189cb35695461c4efeeef7","path":"crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","filename":"OwnedEntity.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"485d0b6edfad127744af104bc2fccdec","path":"crm-base/src/main/java/com/crm/base/annotation/DataScope.java","filename":"DataScope.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"33650500053c4035f9b41cc603ec7177","path":"crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","filename":"DataScopeHelper.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"7f1c91eeb163925e7598ee1fa3808178","path":"crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","filename":"DataVisibilityContext.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"dc053fd228077fc0cfbe0b6f895efff0","path":"crm-base/src/main/java/com/crm/base/security/LoginUser.java","filename":"LoginUser.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"594e46f4067bf5c53e0e58dd1cb1142f","path":"crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","filename":"SecurityUtils.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"eb157d8b43dd11418aef51259017012c","path":"crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","filename":"DataVisibilityTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"30323def9cb0fe6b260ea6a5e9fa283b","path":"crm-file/src/main/java/com/crm/file/controller/FileController.java","filename":"FileController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"306688bd02d5e00424c36a8e3f7bf006","path":"crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","filename":"FileApiImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"471daee1ba8d0a0c9d37ea42b9515adb","path":"crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","filename":"FileInfoServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"08d8600fa4e7cbf52b43b28fefb529ec","path":"crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","filename":"KkFileViewClient.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"c2b8eb329a711a41ccd21fc07edb2463","path":"crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","filename":"OrphanChunkCleanupTask.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"78a779bf8e042a4c180c7cf6b2f09c30","path":"crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java","filename":"FileApiImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"39e025b53656f4fb1e51330f3f63f82f","path":"crm-file/src/test/java/com/crm/file/service/KkFileViewClientTest.java","filename":"KkFileViewClientTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"4ad3caa167521e41d486c8eb3e1d1f09","path":"crm-file/src/test/java/com/crm/file/task/OrphanChunkCleanupTaskTest.java","filename":"OrphanChunkCleanupTaskTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"ec731c3e8b12fffc7e23eb4ecd950b53","path":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java","filename":"AuthApplication.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"070b69737b357c71e8b46fd27e1c4d4b","path":"crm-auth/src/main/resources/application.yml","filename":"application.yml","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"4194d46035c0037d3488ab82e57001ba","path":"crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","filename":"DataInitializer.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"086d66e96aa620aca8a7c9d337100360","path":"crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","filename":"AuthConstants.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8e967137fd04208873ef2894951b2b3d","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","filename":"AuthIdentity.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"91569422a8bc25dfd346718b1de8212c","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","filename":"AuthUser.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"e1f225cc9efe7384e97ee284b89eabc0","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","filename":"SysDept.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"26cb8256b5c728bdc24b532313d3a166","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","filename":"SysMenu.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"5da86b8d801192fd63ea6aa57b666057","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","filename":"SysRole.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"20f7693b186c4e003d04031dafd605b5","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","filename":"SysRoleMenu.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8fa19465d23be26b999639add960b23d","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","filename":"SysUserDept.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"aea6b84411302cc9a5fbcaf774ac6a29","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","filename":"SysUserRole.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"5be8fe765c8b4c953e524cdf749f440b","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","filename":"DataScopeEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"0e509081560573445a0dd02e946dbf30","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","filename":"IdentityTypeEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"cd95faea5a74ee3ae09964119cdb6716","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","filename":"MenuTypeEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"0b3ed971f0f095d6e203ddde717574e9","path":"crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","filename":"LoginParam.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"58507cf1cc358b2da45575d16c857d87","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","filename":"LoginResultDTO.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8cac10327042dbf538d05120f601aa48","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","filename":"UserInfoDTO.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"d9ade6309a688b79e49a87c991d5af6c","path":"crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","filename":"AuthIdentityMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"283041ef298919fe536ac20fad579c0a","path":"crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","filename":"AuthUserMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"aab51a092e42f86e794b23b95107cba3","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","filename":"SysDeptMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"d9d6f5b3e8856fa6995fdc7ed74c6382","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java","filename":"SysMenuMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"38d9b83ff8f46a8113aa787616b2f802","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java","filename":"SysRoleMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"eb41d1eb6dbcb66d966ca3b557af45d3","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java","filename":"SysRoleMenuMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"28e5eef69286d763453cf31a32070685","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java","filename":"SysUserDeptMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"30ac7fd632012faca8156feaa071ff46","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java","filename":"SysUserRoleMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"03278a0623db482aec43e508d1268208","path":"crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","filename":"SecurityExceptionHandlers.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"21067ee0ba0180f2b8514173343f7b0d","path":"crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java","filename":"ThirdPartyAuthClient.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"b60764213680af3c984d82f4146db2df","path":"crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","filename":"ThirdPartyUserInfo.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"7179946069c5d0654ca49cca77eaaedb","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","filename":"AuthIdentityServiceImpl.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"f9926a70a628c5e92f0d239030b13f71","path":"crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java","filename":"PermissionServiceImpl.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"ad239f5e0129b57722497e4051492302","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","filename":"SysMenuServiceImpl.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"435000e19b9da20904d5764f4f2352c5","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","filename":"SysRoleServiceImpl.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"5b91363610bf599cc013882938cf595a","path":"crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","filename":"DeptTreeCache.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"13f3009ef2305ed0a42d5528886e20bb","path":"crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","filename":"IAuthIdentityService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"cff6e76ddd2bdf3e405ed171c279d307","path":"crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","filename":"IAuthService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"47982a158ab256486f73c409c57d16fb","path":"crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","filename":"IAuthUserService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"3259a2ba7196998a24118782cceeecee","path":"crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","filename":"ISysMenuService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8a7bb9534d7381df886b1a476664b902","path":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","filename":"ISysRoleService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"949d7f85b20c96ff625551608a0a3453","path":"crm-base/src/main/java/com/crm/base/config/CorsConfig.java","filename":"CorsConfig.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"624d3c748c2d1b470b26409fbb19c4d3","path":"crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","filename":"CrmSqlInjector.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"5fcea73039602b38183b915b5b7efc58","path":"crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","filename":"CustomIdGenerator.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"ae79ce740680fd6655ac6de67b002373","path":"crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","filename":"MetaObjectFillHandler.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","path":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","filename":"MybatisPlusConfig.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8f361aaf831f559241b15bd521ea5cd1","path":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java","filename":"RedisConfig.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"3204c0be957891dd9b878beed284f4a4","path":"crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","filename":"ScheduledTaskProperties.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8fd30f11d13534f235ad5b9fc9490d81","path":"crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","filename":"SnowflakeIdWorker.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"2b45935169fba417d684e0abc8328c9f","path":"crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","filename":"SnowflakeProperties.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"45f8c9e51de204a6ce44b7b414bf967f","path":"crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","filename":"HasValueEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"b085262ba4ef8a02893410a0018a27ff","path":"crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","filename":"StatusEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"c4daef7910e2cd6aaaae07759d897d03","path":"crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java","filename":"CrmBaseMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"9618beabcede2e839e6dedf9121f30d7","path":"crm-base/src/main/java/com/crm/base/security/DataOwnership.java","filename":"DataOwnership.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"3c80766c0fa9dab148e4f57f2843c3fb","path":"crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","filename":"DataScopeLevel.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"7421afce22638e3b1ee9594dcf7236bb","path":"crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java","filename":"ExcelUtil.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"53e5a23ce2cd9f508b08b6e1eb290542","path":"crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","filename":"TreeUtils.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"2d521e834dd3215c45e67ea660ea37d6","path":"crm-base/src/main/java/com/crm/config/CrmSqlInjector.java","filename":"CrmSqlInjector.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"88ddb7568e428a630b28d5be85d8b98b","path":"crm-base/src/main/java/com/crm/config/MybatisPlusConfig.java","filename":"MybatisPlusConfig.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"a03716c4989d9bdbacbbf1b52dcfad7c","path":"crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","filename":"UserPageParam.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"7d20c7c0818f8352b50774e1cac53e35","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","filename":"UserListDTO.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"08e1158e0e21c1d7974fd49513e51f18","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","filename":"UserStatsVO.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"443f0876cabdd9ad127e648149869761","path":"crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","filename":"AuthProperties.java","gmt_create":"2026-08-01T12:29:27+08:00","gmt_modified":"2026-08-01T12:29:27+08:00"},{"id":"0951805a35c8cf0d998263dfed532ebe","path":"crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java","filename":"ISysDeptService.java","gmt_create":"2026-08-01T12:29:27+08:00","gmt_modified":"2026-08-01T12:29:27+08:00"},{"id":"b1a16c73af31999d323930a2c4167a74","path":"pom.xml","filename":"pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"fdbf8ef6fe6c3e0273244b9efa4f4563","path":"crm-auth/pom.xml","filename":"pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"44756b6ca3948002965adbdf75e287e4","path":"crm-base/pom.xml","filename":"pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"4645e05fc44e0cd3f1efadca1d825a88","path":"crm-file/pom.xml","filename":"pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"4e86e9e389b4b08fe8963d3cf346bef6","path":"crm-file/src/test/java/com/crm/file/task/Or orphanChunkCleanupTaskTest.java","filename":"Or orphanChunkCleanupTaskTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"01c3b61921ce0cdb4028d7335ad82908","path":"crm-file/src/main/java/com/crm/file/api/FileApi.java","filename":"FileApi.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":"dd4e6c7873de5b24deefcc3d24077825","path":"crm-file/src/main/java/com/crm/file/config/MinioConfig.java","filename":"MinioConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":"de4842c7b9763f7398ef2c3dec53465d","path":"docs/adr/0009-sso-reuses-scan-login-endpoint.md","filename":"0009-sso-reuses-scan-login-endpoint.md","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":"5368e7e708ac910d97280b3bcf8d2fea","path":"crm-file/src/main/java/com/crm/file/config/FileProperties.java","filename":"FileProperties.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":"f648b675f6acc57fd1e4fe32e9a205c4","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","filename":"MenuType.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":"d63e53ca9d76d8f81dd89d981569d9f3","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","filename":"ResourceNode.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":"197b55f1b7d7d1be28b124897acfa1eb","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","filename":"ResourceController.java","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"145452b72cda2735ac97a690f2b5cbd9","path":"crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","filename":"ResourceServiceImpl.java","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"e42a3afd007bd414adca430109ffa7f2","path":"crm-auth/src/main/java/com/crm/auth/service/IResourceService.java","filename":"IResourceService.java","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"4b325dd0ffe965ccff6bc2e8acc431d6","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","filename":"PermissionResolver.java","gmt_create":"2026-08-04T17:13:27.2397445+08:00","gmt_modified":"2026-08-04T17:13:27.2397445+08:00"},{"id":"74123de2770c04a2d8a4787f177714fc","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","filename":"PermissionGrant.java","gmt_create":"2026-08-04T17:13:27.240741+08:00","gmt_modified":"2026-08-04T17:13:27.240741+08:00"},{"id":"46bb7615dec0d0825cbcc4b846b93bf6","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","filename":"PermissionResolverImpl.java","gmt_create":"2026-08-04T17:13:27.240741+08:00","gmt_modified":"2026-08-04T17:13:27.240741+08:00"},{"id":"2467957f6e01fd8cb020680dae20873c","path":"crm-base/src/main/java/com/crm/base/security/DataVisibility.java","filename":"DataVisibility.java","gmt_create":"2026-08-04T17:13:32.1231745+08:00","gmt_modified":"2026-08-04T17:13:32.1231745+08:00"},{"id":"43e90eb333a5285a72ef91c378ede1da","path":"crm-base/src/main/java/com/crm/base/security/VisibilityScope.java","filename":"VisibilityScope.java","gmt_create":"2026-08-04T17:15:13.3081208+08:00","gmt_modified":"2026-08-04T17:15:13.3081208+08:00"},{"id":"4bbbc2f3c27f80699526357490785390","path":"crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","filename":"BaseServiceImpl.java","gmt_create":"2026-08-04T17:44:06.539696+08:00","gmt_modified":"2026-08-04T17:44:06.539696+08:00"},{"id":"206da08c92480415f9750a64c534d171","path":"crm-base/src/main/java/com/crm/base/service/IBaseService.java","filename":"IBaseService.java","gmt_create":"2026-08-04T17:44:06.539696+08:00","gmt_modified":"2026-08-04T17:44:06.539696+08:00"},{"id":"3d68f400d8919945b4f8a1aff4375e39","path":"crm-auth/src/main/java/com/crm/auth/config/WebMvcConfig.java","filename":"WebMvcConfig.java","gmt_create":"2026-08-04T17:44:30.7463213+08:00","gmt_modified":"2026-08-04T17:44:30.7463213+08:00"},{"id":"46667b5e631f28a6dd940cfc171debf2","path":"crm-auth/src/main/java/com/crm/auth/security/ApiPermissionInterceptor.java","filename":"ApiPermissionInterceptor.java","gmt_create":"2026-08-04T17:44:30.7463213+08:00","gmt_modified":"2026-08-04T17:44:30.7463213+08:00"},{"id":"91ab5af5f40c9f910746f8c5c7825100","path":"crm-auth/src/main/java/com/crm/auth/security/ApiPermissionCache.java","filename":"ApiPermissionCache.java","gmt_create":"2026-08-04T17:44:30.7468396+08:00","gmt_modified":"2026-08-04T17:44:30.7468396+08:00"},{"id":"1c8f46373fde157638a9331bc5ac12f1","path":"crm-auth/src/main/java/com/crm/auth/security/ApiPermissionRule.java","filename":"ApiPermissionRule.java","gmt_create":"2026-08-04T17:44:30.7468396+08:00","gmt_modified":"2026-08-04T17:44:30.7468396+08:00"},{"id":"34e7e1e31cc014e8ab3104acc807cc73","path":"crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java","filename":"BaseDTO.java","gmt_create":"2026-08-04T17:45:24.5938872+08:00","gmt_modified":"2026-08-04T17:45:24.5938872+08:00"},{"id":"f77483962ff198e16f41554c6e1ceb39","path":"crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java","filename":"BaseParam.java","gmt_create":"2026-08-04T17:45:24.5944029+08:00","gmt_modified":"2026-08-04T17:45:24.5944029+08:00"},{"id":"0515f235f6ec8e32043a3b870d857764","path":"crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java","filename":"BeanCopyUtils.java","gmt_create":"2026-08-04T17:45:24.5944029+08:00","gmt_modified":"2026-08-04T17:45:24.5944029+08:00"},{"id":"7f4bc54539c21a1d994bbbabe2868f2e","path":"crm-base/src/main/java/com/crm/base/utils/PageConverter.java","filename":"PageConverter.java","gmt_create":"2026-08-04T17:45:24.5944029+08:00","gmt_modified":"2026-08-04T17:45:24.5944029+08:00"},{"id":"83821a36e4f3e52f5bffc50e24952e99","path":"crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","filename":"AssertUtils.java","gmt_create":"2026-08-04T17:45:24.5944029+08:00","gmt_modified":"2026-08-04T17:45:24.5944029+08:00"},{"id":"443c00696b8cf69bb4c73995c949f40d","path":"crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","filename":"RoleController.java","gmt_create":"2026-08-05T12:14:36.7036697+08:00","gmt_modified":"2026-08-05T12:14:36.7036697+08:00"},{"id":"34070e2c4487d700b9aae2fc036dcced","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","filename":"RoleDetailVO.java","gmt_create":"2026-08-05T12:14:36.7041863+08:00","gmt_modified":"2026-08-05T12:14:36.7041863+08:00"},{"id":"fa2f5e7042497a395c2626391ec0d7bf","path":"crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","filename":"FileInfo.java","gmt_create":"2026-08-05T12:14:36.7052626+08:00","gmt_modified":"2026-08-05T12:14:36.7052626+08:00"},{"id":"2d0aeb7dc1271c1eb9f22f52a9210b28","path":"crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","filename":"IFileInfoService.java","gmt_create":"2026-08-05T12:14:36.7062075+08:00","gmt_modified":"2026-08-05T12:14:36.7062075+08:00"},{"id":"db36768510c04fba9ecddbaac9538997","path":"crm-auth/src/main/java/com/crm/auth/service/ISysDept.java","filename":"ISysDept.java","gmt_create":"2026-08-05T14:15:15.0833985+08:00","gmt_modified":"2026-08-05T14:15:15.0833985+08:00"},{"id":"ebcc9c2bbb50f1c9b34c399e554d5c61","path":"crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java","filename":"InsertBatchOnDuplicateKeyUpdate.java","gmt_create":"2026-08-05T14:16:09.5993054+08:00","gmt_modified":"2026-08-05T14:16:09.5993054+08:00"},{"id":"032a64276c297276c1a743877fd3086f","path":"crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","filename":"SchedulingConfig.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"df88d216bc772cff7dedfeb1ee77b392","path":"crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","filename":"ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"6c7e732b9b7d9557326bf4129d3cc1a8","path":"crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","filename":"ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"39eb78d63159d9752bb2b5c51cb36866","path":"crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","filename":"FileInfoMapper.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"f1fb4816e6ea250dab4117110b6cb9a2","path":"crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","filename":"MultipartInitDTO.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"b166619a987530bfae4a50d01196ad16","path":"crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","filename":"UploadSession.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"963b51c629dc6ac069aa76e8963c1a6d","path":"crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","filename":"FileDownloadDTO.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":"3e34beaab2157554f2a1794a32270ffa","path":"crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","filename":"FileInfoDTO.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":"dba429cae1157a0f17c39a61bf895a0c","path":"crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","filename":"ThumbnailDTO.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":"a4a6b77c65782566cccb77704b57621a","path":"crm-file/src/main/java/com/crm/file/constant/FileConstants.java","filename":"FileConstants.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":"cbd7e122df81b379d68096c9ad0d1bc5","path":"crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","filename":"ThumbnailRetryTask.java","gmt_create":"2026-08-06T08:43:59.3565686+08:00","gmt_modified":"2026-08-06T08:43:59.3565686+08:00"},{"id":"8e7d2facecaa43d7d0a62897ce6852b8","path":"crm-file/src/main/java/com/crm/file/service/ThumbnailRenderer.java","filename":"ThumbnailRenderer.java","gmt_create":"2026-08-06T08:43:59.3570943+08:00","gmt_modified":"2026-08-06T08:43:59.3570943+08:00"},{"id":"8725216d36747b23e1900d0a80a2e566","path":"crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","filename":"ImageThumbnailRenderer.java","gmt_create":"2026-08-06T08:43:59.3570943+08:00","gmt_modified":"2026-08-06T08:43:59.3570943+08:00"},{"id":"c54126cf8c967b28247c04987c23f7dd","path":"crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java","filename":"PdfThumbnailRenderer.java","gmt_create":"2026-08-06T08:44:04.621214+08:00","gmt_modified":"2026-08-06T08:44:04.621214+08:00"},{"id":"585450a9f743134860e41875c7125ee3","path":"crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java","filename":"OfficeThumbnailRenderer.java","gmt_create":"2026-08-06T08:44:04.621214+08:00","gmt_modified":"2026-08-06T08:44:04.621214+08:00"},{"id":"ab9df9e51b9c174974fc980a7b75a934","path":"crm-file/src/main/java/com/crm/file/service/impl/ThumbnailImageUtils.java","filename":"ThumbnailImageUtils.java","gmt_create":"2026-08-06T08:44:04.621214+08:00","gmt_modified":"2026-08-06T08:44:04.621214+08:00"}],"wiki_catalogs":[{"id":"673ed306-0e91-4381-a45f-07865c6c3582","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"项目概览","description":"project-overview","prompt":"为CRM后端项目创建全面的概览文档。详细介绍项目的整体架构、技术栈选择、模块划分和核心功能。解释微服务架构设计,包括认证服务(crm-auth)、基础框架(crm-base)、文件服务(crm-file)等模块的职责和相互关系。说明项目的启动方式、配置管理和部署架构。为初学者提供清晰的项目理解路径,同时为有经验的开发者提供深入的技术细节。使用与代码库一致的术语,包含实际的使用示例和架构图表。","progress_status":"completed","dependent_files":"pom.xml,crm-app/src/main/java/com/crm/app/CrmAppApplication.java,crm-app/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:25:32+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02eMuUR943AbMM5Fsw0cjdvnsogyxu+GQaWvGJsNYYuxs9uqt6bv6Rad5yNFnQxqc/zcIAP4Z0vNddCsfGTlXUyz4MfN8yC2qjjb2vWYfPJ83LP/X6bNolUatkvylP4TS35fJXDNkvWDIHqdQhK7dQvJSUrKHBER1noS0MMe6uXvQOmmJm86sdA3FA524PS3sSPb610ftofNfHuy/sCdmX4SP49Vv1IfvsiEvBMuWJiOr70mPYEsfSFLlAarlpsbd0N1xYumBEu1xpWT7/4eFeopti/y4M/GLZoxAni69Rl8dNyTEl96ona6fuMnCjgPHme8MpBkqiO42qtnWXVIcOjpWJ7c+Wl37wrj3M+SJMuvHSOgL4un0eZr7xfAGfo04uikN7pbCBqJNPpqehuAx3APEQ6SUECPKidl2hYMoiPhe01fQwrC18s68QaBxSgdl4DMhV7wNL9V5Hqtjf76jxUb9whCs+DZVS0UmaKaSQriLgqg+nbkQojCGZtCDY2gg9aC1qSkjjEYuPi/1PvGa2ayFq2UKlTUZ758WfGf3kH6AQG63vSpF/Wj6ZwJQMffKofUfp/Ipdt8FyEqbbYgZq7Kg4dBgXBN56RiLIDOW+fIj0Y+zhQ+d5TnmoPZ2ncTIMec+0uzKycSKlP6vhfexN4WBdSK4Ur2S6PRsxIr6S+r9OJqYSG3v0G01iVDV02o12zZx/rRcno1kg5OAANu/J0kWAvCfOoAP4uXTra9lh2tPy3p26QngElNJrUYg7zLVR6DD01P92EEfmOMbTL8iNGqM6q7m4bHPoVZcdfDxaRZ4kSAZcuNmhVLsdStF54hUYMI8DctKo6TlNzQT9IVe22Nhc0saP0tecL0YPVlOjF/1eKn2Wv+0c8EYnqXwNYw3YShm8nwLQtSwItR3+AtEugXAgCuCaSSj6zaJU7l2lbwV+H2V9wb+JSVx7+GbQEXnInPKJtVANrPBpp+AjBExPw6FfeSHsMwiYJyZqBCnChsP2jmEg4V3DIHhGJI6YDWuUgWuX/g0rcHhWAzzmOSbjxv2+v0XCS+zTr+MNQ8NUp+ZV1bd858SG7Mf0J23WWAoD0bUrLIlmObRGf7ffMiwCcTK357WyVJet69E9AiHsc51zLpMMFPgPGCnR/Mczo6EX5jqkNI9sq4KAlfS8Wz26yAutxbJuWU6eRDMLb8FJq0B2LTCURD254bxWg6z0Dasg9sGigcN0bSKnblYDbiJsPTnWqwYrI8YRyIBVzsTIYxlTvtapI/BcJI0Docu3dDGClVjYzIvxk8ASQgHUzuLOye"},{"id":"d882e07a-3f3b-4d7b-86f3-fa46c56cc817","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"架构设计","description":"architecture-design","prompt":"为CRM后端项目创建详细的架构设计文档。深入解释微服务架构的整体设计,包括认证服务(crm-auth)、基础框架(crm-base)、文件服务(crm-file)等核心模块的架构模式。详细说明各模块间的通信机制、数据流向和依赖关系。阐述分层架构设计,包括Controller层、Service层、Mapper层的职责划分。解释安全架构,包括JWT认证、权限控制、数据权限隔离等安全机制。说明缓存策略、数据库访问模式和事务管理。包含系统边界定义、组件交互图和部署拓扑图。为开发者提供清晰的架构理解路径和技术决策背景。","parent_id":"673ed306-0e91-4381-a45f-07865c6c3582","progress_status":"completed","dependent_files":"pom.xml,crm-app/src/main/java/com/crm/app/CrmAppApplication.java,crm-auth/src/main/java/com/crm/auth/AuthApplication.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:30:47+08:00","raw_data":"WikiEncrypted:EPw1VhZSv2AMLpYzHbCG5QXmatSKh1iukhkKRz99kcVPFHJKZVqOFStJHt5slSqzsunLJoqpKyeDoj/jTKKfGYkVeSD5qRDxr0g7O1UVdh+o5o+NYUhb7THIgGi7yxWUJXLy/nO13rYHpF8mYa2R5oKpql6wft24x3YHabhNJ20VIPpg1UqAGUTcVnw0LrPXwo0EBWslqFeLtF1ZuJfME3e7x+2EhR2Y1d7YwoPH3lfu0FhIjQHyH+y8s7zB9xI80tkx31028PZAt9eL2qURHMQ4UYJfj3oln+1aSJPbSDv5U3nHoKfdDZeLwwVWO8zzP7hVa/2pxfaSLDeEGNnJqnZg5xHfNpRFT6r8xg7wdbsr67Zths5+Vcd48iAivNOlDfjK9m+gN+DnBiyhSBacX8/UCMci9p4pqHqWFzyy28yESwyElOL5CRYhCCh7VDcO0zuQP4e0yGysRdWvAOuT8eDGCq3AJdkQIG6dXOEC8t7DXIgif3sFVv6xKrXQYm6y8JHPhDFxVKSY6e+1LsahYfZ8gf9EcZEPF0jqbovImvj0Er5Y522gjkuIiRuw4BrDHrnVm8LTPobnpfQK8zbNFhQU4F9GG2nymenxIK6+VliEc7VCUWc3QFIkmvebCTb6gnENEtWHlKoztJRd9acXhSGarTM6uK4G7rUzLemnBssmHy81jOswrgwnoAbfrwVVP63zCViBkERbYBlPAoywzLHPzB76z7O2oXC5Gm3DJcY5wK2G6Ke1ADGR6dkP9F8Pdqb72kDY0IzWaV7GYjkA8vS50JB9Keb11aI0HyjlAup9SLiwASIg675hxcNWmpSFOrp0zP52vwgfZxfraZmxFpGOP4owGqS5RdD/KSblDkYwgJlm9i/PiqszeR5YOLGnIAvFxtwO2UaIQCH+9kIWVyAFH6ag6pNazQW+52eu2+57+MzRj8Vfxw/w1MWaD4d5+Oi+1CnTW0sK0kvqu9vzOkDaXNPVmDC77bHcC+g/fR7eHQfHWjYiyNdRwlo8h0eRNgF17vzfZjlf3LRJhidGrxDwXMxuHIWdmK83ntUTyaO7slA0A6SUD7clisce/O1XCrzUgCPKY71jkN22zx7BuWo4jxF+HdFbBHyo3SucQEQoLvfPSRxN4ntGofwMaSdYO594STF65kcvnj3OMJhbC/kXatTnBsYUlJ4PwomzTlBXPcOzDjmtpJc4BMZpQ7u4SsSYYbDGPO93lGiKpAWwl7p3T2XorjaiNm7juik/rXFTGY34qXTcaVNhyzi+Z/dVsBXvFzKmIOxANZSHj0wWCEOXy0MeFQLbpG60G+NqPsDotsgl0A6WxvyIxwu0tK4ziN3G+gYOQmqJ6J/nkc5B17FMKNo8sal6pNP9B3K6etcL5LqGi/p0PVNydQf4H8eetAZ2nuPiFDVDY0PFAs6WecwtOFq6WWTMKM6NlHd545XDG4jO/+pvkZKLyzlgT/66zDVZv1bSHMo0pkAnQ9G0ZC3zy2PHle46N7sMJx0mmZH5lmQce6qcS8fxdWGqa3BMvdoOb2/L0/d+L6tAWX3h/tt7zR32LIOqw+LXPeJibEbRuMfuO3BFwiO/oG6aNKfC","layer_level":1},{"id":"c72fcb57-495e-4c32-b5c2-159484464f6b","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"整体架构模式","description":"overall-architecture","prompt":"创建CRM系统的整体架构模式文档。详细描述微服务架构设计、模块划分原则、服务间通信机制。解释Maven多模块项目的组织结构,包括crm-app(应用入口)、crm-auth(认证服务)、crm-base(基础框架)、crm-file(文件服务)等模块的职责和依赖关系。说明Spring Boot应用的启动流程、组件扫描机制和服务发现模式。包含架构图展示各模块间的调用关系和数据流向。为开发者提供系统级理解和技术选型依据。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","progress_status":"completed","dependent_files":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java,pom.xml,crm-auth/pom.xml,crm-base/pom.xml,crm-file/pom.xml","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:30:23+08:00","raw_data":"WikiEncrypted:KLd6hqS3YDnCCH772QA0H79opxzq6gDz6O6XbE8wXJCkKw6BpWqI3e9aCSSxRib9AaqPJ6L1OVYJF7K84J101oetRySG+xcKQLzp9l8Pv7j2ZRiuTuy6DI71pK91ZvD3wRlPxxBashmsPgKM2Z2FmGhnKZYuVoVvxpoXNbb2rVxATwZC4eYHLIgaJPZmAXkkfijxFRtw/TX4wuXlfEoNhUEukYgWeqg0e9GcsQGUwid2XILPfA6r7O4twKh73WJ7zXX7WyUpBUqz6dgZSn2L/bandVg/hrFCo0sMn3fxmcOQEUFUBBeVs2uB5V/ghMLGgUyFQ5vFIXw7H8rZTroM48rDTdPSCjpcXZhRbq4j4ku3pvLQ7LQgA4KWbZ+c7XTRMIYQgPO22h7lyyg99W2xUzEr4h0PXkl64FUv3WGcksuPqZuNbBX6feB31KQhLa6W6DrnHpOfFdl6WboK5RzONjOsq12iuBzWkgpUYVqBmwJWq+koP6NUKoB0gmeFjmgH/YfLCEAJe9IFKARkBzMTcEGpOegNBo/9UVhzJ5r/g3fY0fJzQmm2j+TJPfRtxWU2i749xCB7tqtnetYdqrYsITi0tpk4z5fV6nHNUV7z4GDk5M0ZptR9kSDYOkYEOitaHYPH3HGWKPexI3VX9V9lPMrY7AfN45d2YxTuCWSMem8ud5xHyv1fj+xQ7CliDZWhAVCdzczOH6MAAzQWmLbAyIuUQSjI5pLGUTkVNg0UlRWdzVoyf6x0rhX4V464v8rClpUEa03clBbH8jTT9tbwMONWwMDbT/l89JrDxr7vO7Y15PaGRHktuDBNBwT6j1WL2qzX9FcB83aakkTx6QcJb4IfZE1DUioaziSc7vk2TvEEH4ggGaUGYe3qJQ5PW7tRFPLtMK4xAcCTDNPofMNu0z9M/9F2MvhmWbByey5E8K2pFsIXBhwYzAa6b3NSSLNBvKPPUgqRvbxe7vzIsIFwC0yaWYIPo5Ppem55mxfX/m4Toeb6Y1FOnFk6yzlEjRxI/daNZtrW6xi88PwHmD3jFcKRyzqDxkPGsm8G09bI7Hm5v9LkSXNCp8mfPEEcIXXbV8vs0tQSBb5Q7WfoRfxLh5KBRwlLrG7hgnwFfdN8GD/a8Zbk4E4PKKx6lH6kqjjnvwBW8ekYmbuafg+/to304tzwjd+KZTpfQbz4ZoZp+9ZRAR7zNWn6OYrHZnzKUXitlyZ9i4m9b8u35xRu+qEAHw==","layer_level":1},{"id":"75cf3e71-a859-4739-ae6f-bdeacbcde63a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证核心机制","description":"auth-core","prompt":"为认证核心机制创建详细的技术文档。深入解释JWT令牌生成、验证和刷新机制,详细说明安全过滤器链的工作原理,包括请求拦截、用户身份解析、权限校验等流程。阐述AuthLoginUser的设计模式和会话管理机制。包含令牌安全策略、过期处理、并发控制等高级特性。提供完整的配置示例和故障排查指南。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java,crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-04T17:44:06.5486092+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YYunK8FILEqgWMvZvllsJllDU5w+P/MfXf3Ry0jkfdPEqBzJkJ268FHBZEcI79+HbHcSUVpYM5anDtKrAaex9nw5IciCCg85ga0YEycP99ifyADkyldWSKpYMigKa3Ya2c1XLgVKNZ8TDSShSRaam5D+pdn+cLWxoMt0fDdJn92MWW+d9nPRFs1N7x5IixNuPzYCWAvAVFsEovZd811Ze96aPIfwfrE1kgxWKTSIvCFbpLhTw9ZYEf3lbRpMRwzlXL4Pni9KyO0Wv22dBIMo57dciy1E2P2aOTP0mYOKp450brhPMhbqFCrdss4Al9YQ+u06nFaUKvvf5k8WYZh/Qzxv8QXZbbIWgKjZ1yyG7m2L1fKlUTctWO+VwGksgsDos9gfZ52wlqZpBfwHYuBjtzaHNhAfUNvUr+z8PnCovR9xCp9P4S+tUsxXebQMsws1RD/TLOo3XHAGyXo4yWRNO7lmyEErLfgPUXfV66CtU9XMyNE1McpAKc/m2IhmEcTwbgUxfDcIN2jLd2LyYcxvCAcIeacFVnyVQGe0kUN6xBfCS1ZNNaU8wQKnvwGs5MyrX584GGXyYVmvQmDhbWOKYoiCjL46CYwRAVKGlbuJZdeh1PHcN+e9nFViTRZTkIHECnakDRojWCjpM9lJEXB2HtDvxKQkftpWgnmMiDuhG+wULjatgAY6lf2sxo3A2s/4goiXKR9cdC1iRpazmB5n5SuJNgXqBjBFKR/ebzvNDSO2icoh1OGQvUG8tcIzSxVVRh+gjKUnHWFVf7JkFhFw5A5t/Bm8RkTuWm2ZqCvoyEJbrsyYFOjXfgTYXAXEHt0Rnci2o6QKVrxvzHS/TStF0JTJM68l8r5G4Dds2RZzqNogNQRv7IVKVTeRUo21Cc6BM+cBkOdWoFEFI2ZuMoStelBQNl6NhmMsKI3CAxFC8IvhaCYikNkDCN44h5TZzw9zAh70jGbEpp2+VVZIPYrpM05x+4hTOb7fQuTbEvrNIi1b7wTokHfShS5l0nL3Hu6EUxSpnVtFmYRcL5Fnl5Pv/fdF6Y3cww86OIJOMu0nx64BRZ5dZaqlC9gP2r4YY+vZJQq1rjspfpx9K6kxxkVxEHa27LUmhv+Offk4++jxIv8S48RnJVDFl/WgMPm/NG1gO7bCu0OvnK0v6oly6jJVI6VmR6/2Ufuf1hSyQ+70Nn2nNuw4er1Y1YyNcjHLzpzkPID89m18fdmbc1wlCT52fYFTgh9GyNFbHSD5IPGTPp6bxipVo406BwuSxkBdlJgFvYc3btdKnRGBYB8QOUWn29cSV+lTFmfM7fbbUwQTe0mjPHgGpUVdi4E1Q7bgWLf5QMsN0Ar8TEv2CdRrsFF9d14=","layer_level":1},{"id":"63b8b110-d9ea-4a5d-9eb6-0cd4aeec7c8a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件上传下载","description":"file-upload-download","prompt":"为文件上传下载功能创建详细的技术文档。深入介绍单文件上传、分片上传、断点续传的实现机制,详细说明MultipartFile处理流程、会话管理、进度跟踪等核心功能。包含文件校验规则、大小限制、类型验证等安全机制。提供完整的API接口规范、请求响应示例和错误处理方案。解释分片上传的并发控制、重试机制和异常恢复策略。包含客户端集成代码示例和最佳实践建议。","parent_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/controller/FileController.java,crm-file/src/main/java/com/crm/file/service/IFileInfoService.java,crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java,crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-01T10:23:36+08:00","gmt_modified":"2026-08-01T10:31:18+08:00","raw_data":"WikiEncrypted:Z+2lIkAHY5bnkLie2uX+xtPriHrS2r7MBu6LwRjC6flIeNryxSwE6tTKKEd6DWjiYgis08Yo8dpA0xYj//9uDC+SSh3n4r4YMBIiD35NRlF+yngyn3VktDkxt8ONk1niK9mSXHKpXi+1C36opxeVXQVRp/psEZlohbKUBBTiMcqiD3Y7s9DxcXKTOJ4byP42Tsdu22HGgw2I7gitSuRewQ79i4VKLDNUdxYvyXqqEAM/RK+oiADVoDcOBCLz6+mz4xMfiAqQr95yyXMhGolWskRLHiPL9pBuQ3kTPBe4/gXOeBYzY9Jyy/FLPmdJkHrInCIRrmYX9AhFC+nzV0v1z8vcjIN6euM52s+JjcRiXBzm8UlJYx18VYl3h/65FtWJT/tJmTnCpjpKYkCUUSK6rFXrWVVne7QPUVtfcXYU5HdYPISADtY+bTBIIwfg2cuRRjYzFM0gHUKj2FnQ4IOPGqj8z944dLYO+k/GtM74OYsfJskC8QJPT4217XWnnF+9tWnSQD0yBgHBn9lZ7dodsHjjFJBanZw1e8ke8ZY0ZyRPpv+twPckBBWB6kGiZACer5OpeVXsHhjW2GcLCBB2ch3puqLvnYb3GfnzT28P0ZLJsgC+BOgZJGRUNSzlGZVjRDcZgH7Mg/xEaM46BLhXiTNGj84ypOItV7C6jVjXCPAYMcMNdrET4vOFpQqkh63zWy+dTCm81xBWQ/sQhyf0PIaeKWFbybuASlzJ3OI1Vq3P+Wztmk0a2p9lAzEkc4qCkf1Old3yACFni2J5enQD8TDNJLXFUbxcbmNuWkc9xuAD9ejJ8WwlD4FxGYYyMzI2m9x2R9Au9xSfG6ZzmFcZmBqAGJOSzksXjIaLcoDsdOaiACSR33YozCirpRQRGMv44IkRsPdPL3L4rS/4q9H8uIPGYYLpT+iw573anMJ0/rlvNebbyOGYI4gd5xnWRij0cEn+Gb1E/l+KGjuxPKnC+EMTqnlteESHXnmgK4RQEqxZ+qdyWMRTfRSPfSpNhLfpkComg4QM3TGAkYOUzXt5jTgVAB2pcEw7THAsv8f1h+4p9cRlTDoRR2pmhY4Ch/Zs55n7nEx8p/Ibg4k9NCJJSB6A05V/u5Eun6lgYTZ01ab5YXZSCBUsDQnIFiE4NfIKkddgmIiHWQ9qmWsQQRQn3Sxjx90z2odf5QlJ/ped9zAhbnkpdeNRFeUfjdZYYOG+zYm2D/QktwA5uW0eca9beUQq4MexbrBTe05DJTsKUvtvNw6d0lf6jhqtodFhMfB98hWgYIrd4xJC0I2ct7ai+8PeytrF60mMVwNdKKJZYMbkC1AyXTn2PnW1Wv1+FJlmFjSRrhlNVs1fg1Ip25mhrPIRJrj4oifo7bSg0A3091Jbo/VBk9W/OLEegJxWn9cE","layer_level":1},{"id":"3c375076-c8fb-460b-95a8-f4c6eb60af94","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证API","description":"auth-api","prompt":"创建认证模块的API文档。详细记录用户登录、登出、获取用户信息、第三方登录等接口的HTTP方法、URL路径、请求参数、响应格式和状态码。包含JWT令牌生成机制、OAuth2集成流程、权限验证方式。提供完整的请求响应示例,包括成功和失败场景。说明密码加密策略、会话管理、安全最佳实践。包含第三方平台(钉钉等)的集成配置和使用示例。","parent_id":"6e92351d-04cb-46df-89a9-1e2f43b46552","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T10:23:40+08:00","gmt_modified":"2026-08-05T14:14:28.2401317+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YcEWVe61ncvcHAQ/jwtfRO6nsymr3iAj03wbEczPXFPdkTnCBFG7/2OfbbpeK1tBfymMkkI9XyA9US6+PtyXqh/dl0guhgpht+fnBqZUjLPtCKDITwEY8BQFVEwnrAfITga+QRBGsv7TBFSkaEtASwLlYLJ8+UDp8YpV55gwKwHQp/f09seyq1OaV3sk7/BUa0NOa4awOflPsg5XFlVK/rUGF3rqKJcuD0G1glpopz5m3uMHnV2ifBa0D4VSW+zToYa5InFXJXhuY+0gTKSGgsNeM7WfWd9IgP5nF1m42lXF2i1h8uMdxI4tC4Pwyw+cxIQgbgF2wBk2pXuFgTBenf2ttdk1YTAafXd4PnQaAtTkefXDaALJUyhsoVElwDZAoDJ8Hi3BbyoeDGX4+giN3elHH4W+0DoiAxehb7bWQL3h4LgDt61mM7eISghb7avmOf4YDre4tIVHy7db7js9LllH0MhJQEn9vD3bxy364rSM//K3C3REi5VY4+c2MkjObRNnUNJW9QmDF8HSRebX3+quD48HzuI31rEH/sgIyeK3IEKLeJ6pXkVIztfyr/dPATDArleKdh50Tzr/ORAaDwb9//Lp2zmJcKAJfd8/pTJ6URAyJ62B/X5vZLvcepdJRQ5qtjEchSxqRAk/3jlXbiBfehtza3tsa0q3bi64hgk0+hnh+dNCdw9NezPGgoBAPt8su1Xw6zBanlZPiLVYkgXeN8mgxaCwqyMlgHbLd9Ik+YTSAFvwKWy4OXDyQ5nQjLpsOLuoy4XepjNYJDRuAAidsmD522fRm2RdwI1VTsCbg3ar4YuRIYGCu7IDg4hGBz8Wh/MZthE6V6+1lDMcZPEV50kDhNAH9A8pLHZkFv9/g8w7k3xtwEzUCoe0pbBcT1Y6Ozat4RQnDHOxjaZkqH9088Zs7wZNPrglwDgJJeFp28auAoxVcxEcT3BvwgS8RdHq/tYtwpyjlgLk9wIVLCd74u0aWUQJr3Yp6ATTh8rJv4x9rp0mSu5Qj9x7zszzAQ==","layer_level":1},{"id":"99d97aac-8777-4bb6-aec7-edc5e57ac411","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"通用实体类","description":"base-entities","prompt":"为通用实体类创建详细文档。说明BaseEntity作为所有实体的基类,包含的公共字段如ID、创建时间、更新时间等。详细介绍OwnedEntity的数据所有权控制机制,包括数据所有者字段和权限继承。解释实体类的自动填充机制、审计字段管理和数据可见性控制。提供实体类继承的最佳实践和自定义扩展方法。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:32:06+08:00","raw_data":"WikiEncrypted:eWJG/e5ing0ewFH7hWSyzDgM79nSThP7ImW6wv9PEA8JEKVMy3UMkVt/vXcNfrDUzwvN1fofc1lstL9M9gzTUF0lX5sad/ZoKMtuphVzXHoefd46e4xF41p1gxABJbq7qjzjPp8B+0J7P7Ljmo84TFxlJR9NPmY8hegiskinS3ioVvbWll1cGkXx/1ZCnuFyStxkepIUDnYI6MUs0v1rSrivTXki+oClYl/mWAIJW1NmW6tHc6fjJQRXj9t+3K0+cHdzY1YeCyt5CZ0KxerYKqqmf9u6jTlvLbzOkvW2zzocgXHJKoEBcEiK5WDFmh+vU0GticOnUlmDvFyldS6ZHPCKqCPJxvExr4lX0vL6rj6+i5VHof70MAuU9urgPdvPy/Y/NMENy1thfF8z8RK68xJmffTsKXovFQjaQSOLYqW6UmoNjVkN8sxDaeyInewpXu5Nb4AO2qCwKYmUD6MfhF2gSWFdXEpLYdlKeHqQXttExX02SIfmB1a6ymXXsW0tbugNwDJXqbk9Kv2epsXV+NPd9DRl3MYr1FUMGCiLfSqSrgGUPXMnQigoOucOm/Ogdsc4kt3a6V2MFKHqNBQ5F7rNAG3o9f4N8hAW4ASF1T9+PJSpoiMJMBGsVKVJ+F6Bb+amzeleQ9nyCVh62N9VHnUK3rBzUv2079Q891dcuGGi1ONemsblpjfsg8QLTljMFUf4rs9FrbZ7RN3hwE3EuGX+bAhEp6XouqMH8+NBm18Cngrqp7UeCwqvevE20rHoVLeguvfmawsIIprGiKaZZbMDE9+24qrfJ93Mv18fkA4Z1zwh651sko3T2OfBXHNJ1v4zggxyPsKtUt+fJSY1h+rwASYjDwlHwK2PqyWvXdV3Q9hCmbN74YCy6qDHqVsphKQiQIevpJ1M2YBYB8iGYcIekAjNqbIdkgkzxaz13GZJ8d+V/8Th6Wx3W4JIJvAl3eHowUoYJU0aIim2QKci1Q0Z2cLT9G/RgUvGbxgKVRGOTmDC7n5Ho2c+QlMsC7H1","layer_level":1},{"id":"e722ef25-3c92-43fe-8ec5-3f18ed7dec11","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"用户认证模型","description":"user-auth-models","prompt":"创建用户认证数据模型的详细文档。详细描述AuthUser、AuthIdentity等核心实体的字段定义、数据类型和业务含义。说明用户身份验证机制、多身份支持、登录结果数据结构。包含用户状态管理、密码加密存储、第三方身份集成。提供实体关系图、字段约束、默认值设置。解释用户信息DTO的设计模式和数据传输规范。为开发者提供完整的用户认证数据模型参考。","parent_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java,crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java,crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-01T10:23:46+08:00","gmt_modified":"2026-08-01T10:32:27+08:00","raw_data":"WikiEncrypted:SmmNTSq96N8aZksVSKE+84xs+Cutn7kbuj+ZIuUlRi3YXrc0WDJga98Al6qkDNBI5aNtJUjXdc+R7udC17sK+I2mvu4rE4XfjfL9v8zKuT61G6rXxtkBGnFKGdk8gmkz6KEIe9jZyQKFn3GyLCQwFZFCBSx7wjCxoAbbt9yH23PRmU1tn57ElaQtj8ILZarCMnz22M5E85Vc+zTWj7NVBrDnd/HzOWU9yvBgFzgzKWgXrGwHGLZCG9XL4E/rSu6SvTTAcW2ojQXccz8yMR2LSp1qw08ZUf6te9HShAV/zkeZXwFlCk5qygjBMDimtBa/spJDqLmaY3MGSXpjL3poKkTNcc961B6qh6tjoq+OwjxreJknU8ipC8lJG2pvD9Ks7RD2cE2t52y9p5G8aDC1PdLuieO/rN/EIxcbnYUKYFIdGrgJv9TbxQ7IlF3i8mGpRBVGvxyZIgjI0KdLzCp9+kW1I6OGOi6u/DGW6PDvPex2GMkNMdU8aBpuD81bYiBrgxhoQre4y/dGfms49luWbxVLiQ5cniEFSW1puu5K4qcUYJL4NdaBImS5BwbV69SfeG3W//Z8vsD7cycnLamUQYBptzEvPiHgc9pnf4dQMKBltuuTCtjHZVNXPocgLIT9F5cSaA8EMyjt5mfCm6eZep5IjSvI2JghirUTGdajnQqbgbW6VnJ+n5ZCW7kFgrOF/19fJwSou3cM7hEQd7h3wqlq+3kf1myCG1bkUtJHVB25LxHXC+romWKupNdzDff0mMmifpvVoUhSV2ntPEHfUfeSSwn1oWaK1UpdCiYUCJSOCrw8hjpkdihnSA983oHrGhBsXlPxFozI8xm1E2yo/wfYUrDTdhZVnCVKs6sSQjXCOVYT5IFSXIEonJ2Aje8WO/MfGJc652Hc8KvfKGdrTxoDoOLLMPiAUt7mJTgBywvmMCrm+s/FT7DamVzVvimnSWpvuwwyWHHWw1yXYSIhjdZOoEBOqrkGwRHve+dGZROzOOsBQyLe6iLX8thC3aRYyPGO38TvpYh856xLEw7E2WAPltUgT76Tya6xiN1BR3PIAutNrebUjBnhjA6Duwfu3qQSFRNPsGFS+CkNelz+yOZADmN32z+8ljLyKHpBbUyj/Bxho9ojMCY3ywy/HJf0afbGdNCysR4nOpeXvk1uNf/xpiwAZg43x4e4Jqzh13H1exdUAeKjr63mPQAOijUsHUX1Y5DQvLJB19eT8JhYZ/RoPDALrh0kWkx5HLzcg8/PM3LMFO3pO4A4Q/tn3b1S7TdyHGtiTEHiAm0BKTfdx4CD1yJC4KEToFsgqMDHtJaJpXxEaKoTsCVJxtLRPRtrIAm5J7A3aEMJ11ryY2VteQ==","layer_level":1},{"id":"03573e0e-c8f9-4d34-aa69-f15601d7e542","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"开发规范","description":"development-standards","prompt":"创建详细的开发规范文档。说明项目的代码风格、命名约定、包结构规范。详细介绍实体类设计规范,包括BaseEntity和OwnedEntity的使用方式。说明DTO、Param、Result等数据传输对象的设计模式。包含异常处理规范、日志记录规范、注释编写规范。提供Git提交信息规范、分支管理策略、代码审查流程。确保团队成员遵循统一的开发标准,提高代码质量和可维护性。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java,crm-base/src/main/java/com/crm/base/domain/result/Result.java,crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T10:33:13+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9C40b3wrVqgUOe/aBj6phY0aUMIsWQ8Lw4ze43N3NCb2GeboTrOMujntTgQomqVR7fzuxFbKiv9cuXZxo1HPo79w+e+DcF/umkpBQOXyy54MdIMJfaBxkskPAxk7I5y3MSi1mJ9TZKimTQeLNM3EM/B0Y8newFBr27kFrbEmZfOH3WSkkRqv6sFvJeRmAIEVOeuStbgjn5YoEN8YnapSOTuaBvFhPgGcIOUT1kdOiV1Rq3sdPdzMAdxaZWSyjOwuYi9/RNveqg0xu/xcoMiSHr2SzQclqswoLypwXeyCwmsI965uR7vSB5CArOnFkf3AGFUS1U8X409T5vcNcm84Oit41sjTaytyiQA4dW2nvFoIV/6MlB4V/BftffK6VZFFOZK/H5iO3fmO6yy7kwaDVI2/uZz+w9GMsCmT77BEBprHRrjzGpp8auCPA0ErpJikzb9aYUc9SnL8KHyY0l1ZLIh+ayxNE6RkAdjQmH5y2KFi4yH1gCgyG3h5O2slz+0MWYg4JQF2KQWWpSjSZoA+1bJHh5bqovT32gtsyKx9uIeuJAJ8GY3se4nkyI8KQFXNEtjdaJN4lzih61cKiJPIFbAe5VEB/Wg7t/P+V9Vfulgu9NtvTcx+2nYKvGrHfE4lZMlH91hr0blhuMK32QoK/YQs8md0GKfNnZlmWHzm9jRlqH+l2BDlD+IP2GMLAP7LEEpPUoU3ZN05dZRyLeKAZTuCoUfCJrMAWNLERTJ7KSF9YyUhd9I71qKukfPInU/NeSI5BGOKP2yr+bLxvUruahNvagA1VsNa4kyehStkXYt6JPupfA5ZtHoBwx2TmTR4UeodsKzu+zbXP9egBg7MlewKxEzIvG202ER7U9C8zTtKZC4o3pe6mz0Q0Ko4TDaNsr4TLEyxSdvkjdZdt2H2jNsnikNDA665HXyHGXAll8lU9li0kt64YwCx7thRqI98N8RiBxFiR+R0dt0Z/61nbO1le/VUAm0yhzFsxMcCZX2okjFzi5Sxrue8rfukwdQkerle+rSJ3bzyNbUysAERdirhszYSaSF68EpLiurOTGaNS8LoMHmHsUuLrL/RN2YVBKgvl/L3elg+gg6ZaAl9XfZL7t6RuiSf21cTEGHt/Ow1Gew7yqbuinmX3Aia2HyWcjOfs9NqYbZids+2AN9QKQF7yj6Amc4RHQiwQOkDeWsiCReqh1Yy/pykLEzkfqmSQekWV2zRtQFKsPI4yA/DKxfIv0dsMqdytresE31zPH/Ny7T4vD+WKOeM0lrsEkGxm/1qFgqZu1kEPFeVDQx01KZaXvGNeumyFhVOh0jhXM4nxKkn7o6MYwXYwoIrpbWQ+Ng==","layer_level":1},{"id":"31af04df-8cd2-4a05-ba13-06b468b471bc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"应用配置","description":"application-configuration","prompt":"创建应用配置详细文档。全面介绍各模块的application.yml配置文件结构,包括服务端口配置、上下文路径、多环境配置(dev/test/prod)、日志级别设置、Spring Boot基础配置等。详细说明配置文件的加载优先级、环境变量覆盖机制、配置分组管理。提供不同部署环境的配置模板和最佳实践建议。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","progress_status":"completed","dependent_files":"crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-03T19:55:41+08:00","raw_data":"WikiEncrypted:aeKFMGEcevAvGLRT/IQFCqpj6WDzjXLrVIlQChodXp1E0jDrH3G8xRWv+80n8VNexqmtBGOYlUgd8BJVtuco9q3zUaTu9MAY9GkkHcx7mowiM6FtpJz89sNC0IYAGceFzCI1Se4Wz+FtlXnpdDlvDaf/TMYgTbLOPOIKXPdrcowG+Fj3qGmJYzUw7Wl9NuOQDlPUFNpwByw7m7K3VpQItWm09FLi4/FiOR62qzwIBLjtreMvnOrkHY1GxXmvDWRzlg89jhgHMwhNYHmJT0NFvZJUUF4F9d5N023C9bNrEz45x4vVuc4dhbI8k2QpHumHtQCf7GS808XzPWxv0q7uL+k3CrltEITxd8sxTomBW4fm1veEopFAokU+rVDNDOLq1rZQBeqddIZiqfUjosOi4U18PJ++2fxcpqro0ITXUmd6ChD4kWF8jhakTnhGm3flqy4FR3MFFRtIhgORcvylRk6MyRUzMvbfvhTgJ82idGvjN4AptNqSFVPEKcpVmp4DCdC57aoRVQwqN7/QkJGqDpUOjUwKT+EwzVKe3Gx5hcmTsVKA7Hk7sTW2dPBbWP1iCPQQGQ+xxz3+D448L8Pb+dFKhNHBVs5sS+uep+ZqYx8dU9vmwlXmuB7leWaxEcqTjnu9T3IhzcrI/CyjXd+VLKByyK91bKeQPQdJ2IBDklCQFm8aPADmcQHGnid5oR1o1nIsxkLz1GjyR5iuXlBiShMwousPk59btcbN9mQVHdE21Gne3678B0O8NqLpX9wdCex4ui8jtkLb8ersFPx5u6DGYPD3XB7pO3RpYz/eKx/UjhjpH80EWRTxdq3XXaIEoU4tVEacaj321uXH9itxnjQFdx/7wcGMCtsn4cKJraX/nVARp7VJYb3c9HFbWeExnXydRB3qi6qzPSkVLT16pYf+FcIw2w1vqNeTa225XbCc6QSS0oWnKyVN9XsD9QuZO/l7n/+xTbaUuKdLoh4mWSY8PyfLJA4SKJWZ97qK0pmprIvlET8fMnpvJQphAMc4","layer_level":1},{"id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证服务模块(crm-auth)","description":"auth-module","prompt":"为认证服务模块创建详细文档。深入介绍用户认证、权限管理、JWT令牌处理、第三方登录集成等核心功能。详细说明安全配置、过滤器链、用户会话管理、角色权限控制机制。包含认证流程、授权策略、数据权限控制实现。提供第三方登录(钉钉等)集成指南和自定义扩展方法。包含安全最佳实践、常见问题排查和性能优化建议。","parent_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java,crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/service/IAuthService.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-05T12:14:49.6781106+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YRKZKBkixVCJ7qLApKTAIAYMZ+KzJ+0/n3ivSkD9dNPuK+6iNZzAQ8+P+h8sHLA1ET28RxSJlIQCVrh6ke+HsBz0N8DgFAqEtp76KLltqslXTa6Fb0waWV8N2E75yi+XqZxLqJv2DRHC8SLVxzZy/IG2JziOdQk4cEvGuilz6tESjKmibCzKD/1cLUm6ixwlafv7dMAtTVxCLdzjeeJbJV4hlrGMI5c0VftOQvxkSiigsVyk5Eb1ALd8VaVU3aGyyMKJplGed0sSgjaKguVmsTm4rgYypo+k/UIfwDHuMaun12cXENP7MuIw2TvO+GYYJv/WLakUuqSqbNWGOslLDBXpbSRNYk/AnJEY+xM/aI/G0SaZe067cVOYSVbvXNlMFocvW3DpkLgoDm7eajmKv3MYiiHV+YUnn7M6MW2vyzx+uTgYS1Ly/ApqSqLZ2p+k6VH8L85CvKFepCWa5KKs3rt9GI2zeetMSEE4MevpTtGS24NhlECS3sSld9R9jcVjLbWp8N/oOJyTfShuy8v+wiYsaEW3AQOpI6NUPcR0Qhq4G9h+UFvnnWXIhU1+H/a/E8Q++K1Xn8DFmqhANX1uKyKCbPAoruHgF3EU+sozoJkWC1Z77HnKlu6iozvjp/EhIkPHYcgP/Pzp+uto5/two6dimXbmBJL811fAGIMBJS4Jg9od+cEPGYR4wx/MVDjK3vcgv8MlDSKuDTtTdj3gbPiabAmeX+eJ4NMj4H5te/qE+9yDqtUzfU4YEVJvbmKaAzVTIg4W7Kaljz58Bg9t5L5r3pY2zLVMiKak0uBzURocVIBoloXE5d1+uMBrUEWhhrgHWYDsaMVkOmSgItP/NEcBchqhlTWc7N7Egq0M9ZN5jCazcQTpJoJR0waR1IldYGIG3trXk98BN1cgscaztXjWN9MsHb/wkX0ONCoXznopQcqaQisnbenWQOV3iLY31q/khDtOMdxYNZgnRQgekIIZ0FLwIk/uMffEurlsfzXN89j3I/gpIL2VvAKDgOC8VFRJSPuNFiZB3KDuNAdZmQ7NpBiUqehMiW5y6vI7/Cv+Xm4uALyKTqUTiS5ddRXJzsFKIKb6IfxpmeEsalMMuaY/c4Y2M+AjHnIG22VW8nx5mbxKwyuwFozWBFsJ69JrRcKxdWa9ZR4xS0GMRZjO5PJfaj6MSbQoQ2wg5DAbYNSe2LqanKTadAT8nKKhMbUagzhOY3g8X6tuQukF14mqhQjMuwgOv9flsehfd0pJdtXnLcrcxBeMhQGc7ikeJUv6kRvgxGYQMDCnrAxYUX4dDljUJZdqgpdnm81g8LUupK5uy3BnkWHyd4J5qSxPlHc1l28vXXygLw0a/NoylyADJizA3fbLzxWETay1A/FCi3EAFhvJKqGXESiU+aSXJDCDJePtyYmhYXx8lt6UcI4LMmuyHcKP9XiztAXrvARUDSpW","layer_level":2},{"id":"fa36460c-e07c-429a-bed6-e6c66f7f39dc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证机制","description":"authentication-mechanism","prompt":"创建CRM系统认证机制的详细文档。深入解释基于JWT的认证流程,包括JwtAuthenticationFilter过滤器的工作原理、TokenService令牌管理服务的设计实现。详细说明SecurityConfig安全配置类的各项设置,如登录接口放行、静态资源访问控制、跨域配置等。涵盖用户登录验证流程、令牌生成与刷新机制、密码加密策略(BCrypt)。包含第三方登录集成(钉钉)的实现方式。提供认证流程图和具体的代码示例,帮助开发者理解整个认证链路。","parent_id":"65c8fce4-7186-4278-af29-31083933e088","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java,crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:46:49+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBN19feZhfLoLwYBGoJKvH3N1obTJjcW+FHYSJonLP3jc+A/sg1WcUJ9+F9Iioivnmhhv2MDjd34HwbZjdBDoj5xh3OPjkRHpGc9D/d+FmLVOUJ3NFdLq1dWu3AX7Fpr+k0sTb+9Z7hfYvdk9/XHtPEvfA1L7oBoGoVXeIx/GtYlSiQQ/uHHB6eE3SYezSUXzKG2Wp4Q8eFDUJHg6CyWMpEpbL98T48ZtjqNdIafTfBvV7nTT8u9ptqe940AiKwxjicuwFbTLxw85VNH5iCOrzKmR/Peiw7lZicqPii2hQRF5f7R9EqqDIEcEXWfiFsbI5lhLv+gL90StETqsEr1hWqO36Sg7JtaGPLxMhGJMznER5LloiBHThpm6f3NnRPjVanmchPZ35Y+pQ/kjbkFDOksSMTT3lxagr4dbOGSWfAyWircsxffSGKfuEu+t/VjLrUyc4Jdsbpu/JIeCimQagzemisl2uJpuKoJ7hhwSAOgR58lT0na/ZBsPHfZy+2CEs2cHWzpn1pAesEc98nr56vJE9A6bEMhzEHrPjv2rJRqhhLxQxpIduaiMK46iQtOSihkhGyHzNO/ijJe+MjwAtesD0WJ96TBN9+3He19GlHxNJ2Vb/rOc2682szfcQbD46ZeIRCgAgZ9MiJaLa+P0bJZva37tR8k3Tyt3yuXM+S8D/px87khKX+yK5WgRitPBWCgEkk38qe+X5Wdf6pvQn5Z3T6tppOZ537651uCe6giscJ1Fh1VFejHoJ/0QEmEtOw/EwwAXeMKf/+2VGEaXItFPtzi7cbn/YAWpCbh7/C8d4FAj8aVVQpwsRis2WqqB7Q6PI6er+iFli3ACS0mAqHa8hTaVlSHRlYwueGyfx2aiR+Va1B/OzMaZW9DXAUZvdIa8RY5U+NmHmu+shRglawfVWMB0JBTTKwExXZx1J9xAhxvHJcTrAZ9P1Pt42oe1jTYJX7RtoI2sMflVXUKlHiYJIA+I5iTTryeOzcY+V/z3iDRUqKMOJccyUyf+sptjK/44mBlEp5Rn3L6YPp8TH9YviP8QhDCUL/MKz4tR4iz44ogG3F3wUx95zeo3rp59rhTyL+8uxiqoBXtxuOgEvpPi+D8Lw9U/kyyIZmk1ayUzvbeSZqvKJG+filjFQP92RF4X0n21Hej4z9X58YpIj+xi1WhMTpDfCVNiMcJJVbJk2kozfO5PwDTOfq5RmS/QIbhuEPlqBRrlTWHH5hs2yXPle+pmPCiCjIbQSaOlC+/yQLCOBewwSl6YaO54rk25LSaAMnhbSRnY25MjtyhR0TIFKocimw3VcJt1hKZYK9XQmkfYD2144cO6Aqo0UkBFyqx2L7kW0R5/yiqIIqkpYLqibx7xLjEL40QBEF7ozyRuUw1X2zXYTMhc8e4EkHYCc2gjw0LJeobb5JbK8XzAzrJNcZB0VUJIfu2ytCQ04RXZVJWcLv2iou3wJN0y5LoIRQ==","layer_level":2},{"id":"cfda0d47-7134-4fb1-b1ae-fe5bc943bcb7","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据所有权控制","description":"data-ownership","prompt":"为数据所有权控制创建详细文档。深入解释DataOwnership注解的使用方法和配置选项,包括不同数据范围级别DataScopeLevel的定义和应用场景。详细说明如何自定义数据所有权规则,包括部门级、用户级和全局级的数据访问控制。提供具体的代码示例展示如何在Service层使用数据所有权注解,以及如何扩展新的数据范围级别。包含数据权限验证的拦截机制和性能优化建议。","parent_id":"23dd7f77-e190-4852-b94d-17d2b127f16b","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataOwnership.java,crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:47:46+08:00","raw_data":"WikiEncrypted:EWnmY7FrSrDNzKPUk9wUqVJbiamaj/WtxTUrb3BZ2ZijiB7KkRwwZde9phC+3XDz/ue79S08r8e4a69b+hZtK19Nr3S5bmAlsvXcgS9x3VW7TcdYOppI6JGQDvKOrhs2raSCPxohHagvItJCbKu0JZ1LnW3Rllt49eqY75nxZ/voU3p5PjiZe4t3a3QGCb4aZX9sH1E5wygVpBPWDT5LR+mHBtvy+1rd6oFqX0ATllpEEe8ghA8VgFikAtewtAK1A8Aal5hiDmFdIvEejZxv1wRS9VPjTqtgT337b6f55FGp8iRf78a6tXjosBob7kLArionaE6xlTX7sTh5zfLiVm/hUdxgw2W0ErBu8Sv01I3gCSQN7rsrJhUJUy6fKPGO/xUD/EePwTJL87uQERKaf+zvt2Y6w3VL2guU4rZ6LYeWQ/WeEEjjFAXBuZI0iCx9Sl/dRWBUNVe/NkooCcGLyEbUYPPLdzWCN1H9lgNRxQ2WmUtgq5EkwthJs6k7PsXlS+0QI8bb6OEURuwFoilBaO/mUdoH/WvDX95tmNfLT0K1IOToQACZoWZEYDS4ZKVtHyNCCCBhndXop7Knp7UAHuNwm+gHi+9jr8QvlkUDElcQzoEptp/YGDW2obdaclyY80jo5h54NDGybs3nd7fTUQg1UJKz9Usub4RR6FNq89CUmXn21cEhrjW8GXDtSfirLW18eSRACqqeSz5NP1ATdTXZKbbiM3fCwb5lRoJkyoWHGMA2bDdvqjYuoKBdVVmeTw5kQWUq/WSBrp34JaZlSsCYss2MJcbHmiNuYVX+Tg+Cqot/bkEdZwfiE4yeWKIzk2F2qDuye0+Mae1DxRSdWi38BWOxqERcT5cdAcYTm0DmTmpn9+WNu/YuCXhQGf7PGS98hyfPP+wLVmB/Ct24ijL7fmUn4cBLwH9h3v9fbuT9vgLTX+hOIGwxIMDBPDzObFHsijV9JW5sOKUFZOQVksXTXpyDzH1Cdf2cT7wzjsEilUrw1x9vCRFUAxeUByvd4kx1vu0D1JHXQBpygJUpC0Sg53x/jjE6oDQ0vV90iERJfK+82MhpvxU0dZYGfHqYQILae2mV/7XJGs4WRojEDJsxuY8MiZ4XWddPsUIz+YvOeIqoBAkpe8DEsSQcR//bpUZsASvh9nYlSqcg22mKHr0WVjxIz392dEkhzLFuRx0S7Z1vF1yNTFLremgj0G62","layer_level":2},{"id":"2c7b95d3-56df-45e4-be0b-d647bcd02b52","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"MyBatis Plus配置","description":"mybatis-plus-config","prompt":"为MyBatis Plus配置模块创建详细文档。说明分页插件、SQL注入器、元对象填充处理器的配置和使用。详细介绍自定义SQL注入器的实现原理,包括批量插入更新、逻辑删除等增强功能。解释元对象填充处理器如何自动填充创建时间、更新时间等字段。提供配置参数说明、性能优化建议和常见问题的解决方案。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java,crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:47:44+08:00","raw_data":"WikiEncrypted:R3G/j4uraRHb43J+Y7g6azMTLUMZtTrKIaD5/AbxCc3BA+QAxAxW1rV1cbrgN3X8LxK9i6uZwuTAircVSKZ2mV2ZFKRiwCJtZRkvol+KikDKo8Y0FRfV5j/o/gLrDOry1ZB8XS5S91H3BmLceZScPZLiPLFJyJjwCcV3WvdvsljjJorUXFI3CS60Z0M2WhxvsA+MS/jQd9BXx/nVOaXJ3LneprSVsjZ+azk1kYG4HF778UPiRrFmbJcELGDSx/pyJaIIXk7pSCj3NI0o68uwg6jMI1WrOBN3q8PSHB9a/p429/OwAWay5rgx4m3uoIAm3QGiJEA69KTzoxUZwYfQexdXRHF7wgx1JKIIwLUd9ddoDUmWM9xC6F8nn51fUoQBGia9oQupBnpkjWwcX8Cqssg+OpFSjmfq4hw7u0RU0fWuLJzirKFVfFvL0SPL2+qblWRHBLH1exAOiE/qBe5S27qFANu2zhECrQwzo2yCyWrmT0FEOGvo/YrssTD4TaPMCCtPRl/98iCTM9W+XquOJNMFNTlPG7JfnXjnic61KxflC2XT0iJ1TEGRVokHIPoyX9nBsCC8ea3in+g+tjpsgNwxuBiaWNhls36idR8+FjHS9hy+ZS+AqRsXgtQMrZpygljzjwUqg00dek9Y0SIqjE9oKsF5awzPpWPfYsMTSjleIV0HS6zvTWYQ2nNJ3ePeziJTJcFCKSYlt7ICA8gtpGJvGcH+tsWDeXRnWMXv6fYmQt+10rV2IkR4tTxS1eAck12LUSQk3Mpg1onG5xX6pHZGOcN0ldfPMUmszkdquvWWKPDzfclkQkvfZ7hTiZq3eXRQ1J3ju9uOOSa4C3q5Btl7WnLo6dQ0lhARdelt4KMmLOF4pcPsUPrwdHJpIjVrMiEmi1uJUeDDZf2Neonm/92zIC6T4eWD8AudV80ccjgirCz+ONRd2vWoLyK664D8eOuxEsuCzIQbbDPOlbuGrlbr9gPPx2wbOWk0anVGr0Fsl4TxcwK5VKjQed7ybGQ9q4RcasD5SueZikUObfDFoK5T8LchJgoEZActdSFqJ/8LcugIecXxq06uRcHtjtAQZQXOFrJFeMHsxNVF8jS0tVd4Ov9EFKjujPIMUeTsKmVfWVxJE6M/LAwSFD9+omDdsZrVP4XmewzzDvVFxIArLkBXmo6yi+0zDA9VYSz0Lb4C2TC9GMWkB/PQAGDQtFCp","layer_level":2},{"id":"d69a79e2-abce-482f-afdf-2b016450e217","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证核心功能","description":"auth-core","prompt":"为认证核心功能创建详细文档。深入介绍用户登录认证流程、JWT令牌生成与验证机制、会话管理实现。详细说明AuthController中的登录接口、AuthService中的认证逻辑、JwtAuthenticationFilter中的过滤器链处理、TokenService中的令牌管理服务。包含密码加密存储、令牌刷新机制、登录状态管理等核心功能的实现细节和使用示例。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/service/IAuthService.java,crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-01T10:54:25+08:00","raw_data":"WikiEncrypted:9QOSaOQHbzL61d6MLK2xGPwC1XklY/msrrXNFxJx7m2nyxyUlMigYzlIe9V3+mfyG2LS90VprjQ9SDyXC8LR1PB6RhlKw8YQpOky8PLRhHYHkdHlXQ/8PQ9AmbQpyJg1s3NR83N93UeWufZqgU86Dtnj98SuRgpOilY1iTClG6hGSDGdguqChJHcp7r3PiuN8nAeTqZ8yQfFF4r5V8fU3WWY6JuUoy+iR1LWQkCgxPvx5xZH99mADfgtAW7RzYp9jvO7YgHBA626WhVWqv6O7zNzOIo2x0n+UZHYTI//TSMpRP97QmiCLxDbuiw4Ff5h++8DQ2x7AUEaZAy1aeInes/Nomu/coouqY+qgrYVddc22Uzgz+bNy/PnG22I5K2bX65zc5cIPk4I4xIIlpwf6ICTFZN2Y++qiKxqc44b1haNl12EvFQvzgS9meu6X3DPZkKpSy32wP35vvHUX5b5MXl5gCL5o8mUp/Gk0foMLhMqUhBXXazaAd5jbBzGHym61Ze00Oc1B8Zn3/yZsUMz6/Za7QvBKqd0oRUQghnl0gV+8l9k+NFE1PPYGTnQjkxmWUIYqRNxgYUVrexuRuRybLZXVRxeZdQV3mHZPqu/bHJF1ZhyeqeaAt05Thx1CZnbSqbCrVLtB6OAvew+L2lQ7qt1JFkTJ1OKZboOS7oCwrFiD5cpomcWnx+Elg+AXKWcW2nZXmpGJ5xbnfvq1SghvKIL5J5l2Fz0zB1kgpnzZU6xNKFXLX7INlphYTJSeKKg4WASOcy5ZKOmr/kEEtEliSxDgSAnjVpuPWusPmImItxju/3r6hdsodcVmwCGvuuup6qzZfITbprhxbhIdeVMtEF837we0vSg6pk4hFMufAN3qvd/uO2+uGg4hBBTSTOuq8n7lKjFxwf8nl7WbJAJOvhHTt/jQWUNNdlAbBFxNI+GJGrxXwbQytfukrRNeOsYlEfeAA2quSPnIIrOkvfxqmHpBJDr6nlc4+9H1ncjEz3iLMyN2JZSiJKY/QKQYlDwzdzE4GRkMkB1CF6lcEsiffpEdfWj0txP7wcbzgmjLBI+xsjfCeVUoR3zhb94eMKl/Bd/zn+esJiL1HB7DjWl5Stu6wJ+c2sbxv5pCSWF4VjaNIiVoHMEP8Pqxcp12gG0/TfPf0mmNrkbM5V+uQsoYSrxuRE2mM7IuIYB5QCtuTA6xZZWmO/glDSiRfJe2+UZaVyelJz2J55RhYXenkR0fU9kl5GUnHvivJyYFuwuQlnQZtY+/Zzf1LnXtq79wbJOE9ATSv/6/FED84EtpA31lFPPOx3DQH21SBu5h7hn6aWip9g5XWf6nLE76+mvlOPGEAJ5HUqKb2Mnm6C9yI51ISr6Qy4wAbCYUmxO6mWr1Tc=","layer_level":3},{"id":"2d853bfb-7cd3-44ba-9bf7-a683edb4c2ad","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"自定义注解开发","description":"custom-annotations","prompt":"创建自定义注解开发的详细文档。以DataScope注解为核心示例,详细说明AOP切面的实现原理和开发流程。包括注解定义、元注解使用、切面类编写、拦截器配置等完整实现过程。提供自定义注解的最佳实践,包括参数验证、异常处理、性能优化等注意事项。包含完整的代码示例和使用场景说明,帮助开发者快速掌握自定义注解的开发技巧。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/annotation/DataScope.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:48:34+08:00","raw_data":"WikiEncrypted:VrTOMK0P24YINQ3w81YokT7HZqpHOgifbAbagg0+VsCbWv2FnlFkRhXiyhtutxmwsXQMf/rjyA/MBH+p8MPfYULZqxFtMwthmiRh1wQk89eJm6Df+qTn2P5+OsyqDca8c9VQ9pbh55BnFlBF9ULW23P3dhdOikPeNxIEMmK4Ahw7eUQjKkcZucKCxAkl22HnoZVjg4jkGZqQ+eQ/jcXKKncmmgRHQaWu22HpDEuyEcn+gvSUO4XtueD9hjo5atF9kGuRJzafMXmGoEQlbwEDUX0ggeC7OqrqBNiyERv4ZYYei7lgJpihBhkKy3ngoq+KVzM3rNFbIE1an6KcPvVQC86nwsxxhTH7VlVlIFDNcsuZBREZyMEepv6XroGkRQJ8w8BOUXMrNDFOQTxFWjrvoMeoMzeZzSSMfx2yN7GeRP9oWfUiOdHTp74ZodJY+lYM+H+kpVpFH7DZJh/fkJhUfBTDuEURHK0l/E2yeFZN9m8Jc3qMSs1TDNrn1KA+gfp0wmculjQbBd5XUn76E506gvhm6ynYNcPHL+/P3yeXqJOmyOv33qai0MPIFnbAn4ws35Zj8dad/1ZnskzV3vhmu9NJIOZaX48xdXZRSUdFcjqhp4lxANHKdZ6dnE8BRfItsTfzXoYa08sCIak37K2za6sAqTzHgKG6zg+WCufAcnRv8doiyD4ALmG/hcDODgyAsxniek2JcK/kH0DptPcEHHmO+W1C7rAA+eepof8FmzEzC0cAVLQhrAfvbM2LTjawLqMfE6siPTmFAN+lTZ+g9Lm+zmdJ58JoWqIoXzgPiuK1eDldZ7OpRjniP9CEfvR6UcIs09lk8BhxvZwkSfswgFCNIArHLoOtaLhEW2A5VVXtS4KoDr95Z0mQxnVYQwN8Kt9MzSLFVdJ5OtAuNiruzkjzW9rjjE9/Nhzw0Eq1T8Ej6f+tE7mBG6SSCxFfwrw8xY+Ap/kpQCHC/BDrZFqv7kVbA1fMfKI5m4dP+eD6Y5HO9q58qhSoTiIHfgRxRnG8q9JXTS09Q+gXAojeLFLT7RKQ1z1ArAI5tRya76z/EJSEssMHU+5G1ZZwuhUcCIphcFTzmHqmu6C8DCQnmdPLz2xbPG2iaNfyS+vha8vwFAvY9Aw7mTnOd2JaSDpNwBffE5fMu7nNlOX1Y0x8NqnhoNCbvM4pFk4qEkQFOtr/wG7P+wr6GeFmqHBMV4gBcb5QSENvZstvsL4kuIzCJFqPnA==","layer_level":2},{"id":"c870ee03-f2fe-42b2-8508-2375fa8a5512","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"通用实体类","description":"base-entity","prompt":"创建通用实体类的详细文档。详细介绍BaseEntity和OwnedEntity的设计模式、字段定义、继承关系和使用方法。说明基础字段的自动填充机制、数据权限控制字段、审计字段等核心功能。包含实体类扩展指南和最佳实践示例。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:54:30+08:00","raw_data":"WikiEncrypted:eWJG/e5ing0ewFH7hWSyzHmm4uClAAvkyiDqUtcCNCNjWGIxFLxqytgUvr7r/8RaqNdcZeV4CCbh/bMhWOA/YED95Y9TiN/ziM8J0DR0eSdio8+MEDLQBE+mDLvK7/E6ap7b9Ixc9RO8BZYux2I7a/mWlDGVJymMZ07copzOKHP90kORH2qCocaAgeGNrhUwieU9lbQiR7s6pvC8I+vk9acaD+hEsvYtL1DRKrkjjM91rcBzIO613qYfu3CKjYMWGKRbfQO3l2VrpYzHshNtxcAzS2YXWbAhP5Ks//CtvTkzmcmrQrdeTTLXsMCqTSx9ILbDlXoD81crPQLQh/V0l4Wcv0bQ5AzsTlPutGJGktQoORptiUmZaTxqE6bq49xFB2iToo8FEsJnOjL3hz8Wh8TnPHAmB704/B3yl4eUrvafZSNedeGicsklHTZe+Dgx2WW+d9Nhe5qPyUje8XVqY1nauxXZ3GyjH1Yaa0NC6z6e2cE6Dhif0nH7+eblA1iX7t89XdwnQm6pB5OWVzJpFHD7kSuj9uG/d0IhWL4XKatN7fTJcGPP/PxFHPlTMp206vuDVm8qdz3C1A/ymmoiHlN0Q85ese+Mli3cmO7hNMFWqO4miIiBzie21sN3ogOhVF6qGt11OxJeJPBxdLLx4BpPC4CSXbdiuR0mbeTj+8MRpGY83NHycyrTeSvJtrmEbYJo1WWMkoLbkSRrm75WXO7j+/XOrwbRSXdTh389WijKJd7EvlddvfWmKR54BOwmyNk1GDOwGvLeUlo6ojpu7Ug73OIYZ8XGvleD/tY7IDlw3OBeVL6RNEUNG5etVEzFJAaDYMEaz9WTxa6l1MNo3flox49w62ser/DKca3MGGk=","layer_level":3},{"id":"5f6ff167-f16e-4f8f-8266-00548ce0f9b6","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"快速开始","description":"getting-started","prompt":"创建详细的快速开始指南,帮助开发者快速搭建和运行CRM系统。包含环境要求(JDK版本、数据库、Redis等)、项目克隆和构建步骤、配置文件设置、数据库初始化、服务启动流程。提供常见问题的解决方案和故障排除指南。确保新手能够在最短时间内成功运行项目,并了解基本的开发工作流程。","order":1,"progress_status":"completed","dependent_files":"pom.xml,crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:25:35+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWju83LC7H/jAM8CEAvWT8huE5OClmQiIfNYNxHQ9s7RRS2mtAecmmvLPgKd6tawZUhB5KZnZSF5+8AMkH8jMNbukZfdZqdronEKkTAjb0Xui+g3820Sdih9Ijnkr2dVJTULtip4p7QaVr/sCbZvzEuNJ7fpWgmeBzNgy6EPgexjo7E/6Anh9tIPIwK5pbhrlOFOV4uu2QtML/o0V3TkPUJNRLHzPFAfj1RfX0NTGGxCmUcJBHtW26rVURVLG1SVPsaV8epeI67z7BsaXDX54AzJbWKOPFDsT6Mns4DededVnVAmcIBc+HWOSR0QgXcPmLUlkC+kAI+hzeEoHKQgD1sk/9fVotc4iC4aPAuyf71rygcOsJXEjOh2LBItJzkCD+RG0Hx7+d3T2tfy1dqjack2xxs3hXpi1nIC3GbqscmsPiuwCDMgYYTK4vgWiIBRVUG5Xd3zw5RttFvLT03rfQhOTJbJyDk/SCFhAV+5RDc8MQYcRwsF5ru818HnMrVEtcsSq/LSqgtpZJjipq5Yieg3wixQ5nUv8GBV8Po8cjva7+lil8gnUAXwBAYDESIMuF4cKQWsLdYUxnQXQICY2BBiW6hDjHjw7juMLIDGKt1eWp9+00+k2dgp+KZtGlYoYLgUx9yBAgZ2Yuj/NF7jE/+hD/w46zRRbrDUKNM/icU3ApRGfV83KvryPBQ/zjGzDqXBJTKEYWl8e7n0tMJFQ0IicN2uzLKvDxaJbyy/D/gXi+Vqa/2EDhdYnrhLDk5d0T4SlmgUJ1ytwslFy+oVr0W3bLTaOg7afgKDyRB+qPoAqm/HbAt8Q4PfprzZweoUUlXzvd9ABAA/HvMn5TCddpv5G1N9AblJZx9+gcZDb3NUCIBboAgQfUeJqs1pFLo4tsPsNOE4iIT+b46/7qhZKFswPL22LJbIBk/GrwZ8osCDsw5Bk4TrtgW351ILsPi3nVRwKRUT/uB+Qvoyngn0gL+G+m13QORAtHV3WFkFYQIWOyrPugZGHjxYHq3MQcWIQVS/avVHwUsb3TIO8MqHh2uJQ"},{"id":"44c82594-e392-4a1e-8517-2c526989faa2","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"技术栈","description":"technology-stack","prompt":"为CRM后端项目创建全面的技术栈文档。详细介绍项目使用的核心技术选型,包括Spring Boot、MyBatis Plus、Redis、MySQL、MinIO等关键技术和版本信息。说明各技术组件的作用和集成方式,如Spring Security用于认证授权、Knife4j用于API文档、Jackson用于JSON处理等。解释第三方服务集成,如钉钉认证、文件预览服务等。包含开发工具链、构建工具和测试框架的选择理由。提供技术栈的版本兼容性矩阵和升级指南。为开发者提供技术选型的背景和最佳实践建议。","parent_id":"673ed306-0e91-4381-a45f-07865c6c3582","order":1,"progress_status":"completed","dependent_files":"pom.xml,crm-base/pom.xml,crm-auth/pom.xml,crm-file/pom.xml,crm-app/pom.xml","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:33:18+08:00","raw_data":"WikiEncrypted:w0CkdCdnXCcvlN5xOpiEhEX3U68GI0Ngj6azFMJo9xRSxuOblJXg8Gncvj5vankATp2aJeXH/Zz4LVKH2Ep+cKjWgx16S0ipU3KkK2EtlvXy6LXaj2N/9K9DSP9zPH2uIIbIn+lx2VTPF7lCwvm6SoN8yoQwdBxCAKy4KBTfTCFSr+WyCBgZaGrLcSYHT6qbUyvzo35eeMyCwUi62d03xAuV93u+ejXWhMOgLFu4+XZ1+zNRYVz9mbEBcaqKpKlUgSeq4UuwpduCdv0XVcxFl0o//BwrvFUdu2jCK+qwgdmbQOygPuKh681hedcQ8j3GBhH8+SPLCRU/NrPhUspAXUiq7zuwZQ/7dE/gwVNhekMz6NM656bqZb/4EACP0yOES1O//2TWNd0TzMOkj7XRYUUHLMRDVs51n4j8aDIr6pzBhQJlrODWBWQ0MmRpFsbO6kpAapRk1ori60jsu5zbdJSOq/Wzc8yn+jcqTjm6PyvTI/nBQKWNJbwgBI2lBn/39pNFJKndXt9t1FYTL5Z87WN4TP4WJ2MqYJ7xDlJyHYp6lQg6uv4ldq+mwfjEWCjDvMN8ic9MsQ27W9751py+fbHkty9aJNpZ9m+iSzjoKc98YXvGkfGtKXS3NuhfwyGjuxWBQZm9zylI+/6jtu9xsnAiI3kb+6+LZSMaBWf9M6yZSCQ8Sl2lXfRxuMjS+9HdnXIpxK5LbL9AzE27fTurSC7/yzPDrFhvHpb3KSZTkkO/cb8oaKpPCKTBEUTmKBdHu26wzEsLuaTkOrvwIEvag5nbC3L3jnpHP4Z4oaWVf1/BWPw8gpMgbIFdEcegV+mHnmEjFxjywgJWZdi53GStBB8nuy/jN2idGHuSv085JntemmMusA9UYV70DbOX1mzoV8vecinqS4oetx/7cl3wilT4MY0t1crFZklV1Cr7IXLmHQjNEg4Pzh92UQMWupNxCVydWdPFMgv/nUZU4dm6EOxFzUnSH3nUU6zMk5JWl2pvK1KQbBOEKG3RJapcj6DriPaNbaiQqfp5zHym4eQ5BfF3qCXo+SPsSIG51SRB0tGsgCv/O5KGyGn3AtR1gKmP/yQRJWAYQUbQoBkbVivSfaraKjUm4DM+WFmQbh0W2HY4b6qlH0f+7fLA5NrNLSwf+KDSu9gBVw63uYCELp9x2bw6+jnRc7rQSc5gLzvmiwtmlWdOVgmLRXn3Nwa4Ra8AMTkFkc11yZbid0cH0VAYaw==","layer_level":1},{"id":"65c8fce4-7186-4278-af29-31083933e088","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全架构设计","description":"security-architecture","prompt":"创建CRM系统的安全架构设计文档。详细描述基于JWT的认证授权机制、RBAC权限模型、数据权限控制实现。解释SecurityConfig配置类的作用、JwtAuthenticationFilter过滤器链、TokenService令牌管理服务的设计。说明DataScope数据权限注解的实现原理、权限拦截器的工作流程。包含认证流程图、权限判断逻辑图。涵盖第三方登录集成(钉钉)、密码加密策略、会话管理等安全特性。为安全开发者和系统集成人员提供详细的技术参考。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:34:01+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9Mk1JVoObLAcbfPlMN+VTvVmnuPEPQzgOEH2CHPPM25lQAQTDPOwDdnNeykeBonmEm0tTOQl5Z9cL4cKzNR+/AKzhcATTGXf/Nw6wHp5y7hqir8GpN7rXNuwlqhyHA3R7LnEiVvBkB+MYZPL/YwGHFnqA3iSlSuybpH/e677Y8ZHdW1Ld6Q83N6cdc/cxZf9IMJbbuD2J19btRW/3Bh1Omf4AsRmbOVSkN8GIvn9bYmIHZ/7rSyNfIk37P/0bkj4JhDxpHEnOgrCTYIFrZODOmijQ6daAZzYmPo38+FbrVDsit8xZINhpnxhzXhh99hZB9WwFKqxWi5dr44difJ3vaEUcg1WrkwGSb911OdFhV2JyDF7SUMgBSDHVkCYdgt6LTcU/8svWW0lOyISRaUVMm5dy5uEe+ERmGXcIWvzwmYnUT5hfa0ts/MhnC9copSeTIlp+8ywPYl+2dBNRkmP9KEfs6gyTEDJ3SWinljmBNwVZQcu6V3Prdb9LNlpNmMTKdG/vGHmxE7rlAu53cFgpItiXodFd/i+C5vdaw4NXA26Daeoiv0zYUqjxGwYAA8diat897PaIZ5xy239IaZ8P84UDtjocvj2edbcRP24s1IR/G9+lgkRKp75rwZaR8Cv4BqCiyy1XtOQ+1Y4Zsp918q7o9szq5InCWsUwdRG+K4axNcFiGO6x/tu3y5T5yC78GNt1BGmxM67tpt8LWIO449onENhznKvk1q+nJ+vkdx9t8684Nud4CUPju+V6IX9LgPsl54m0mLSrsPsHE2z043RaBX5T2UR/i0d96u45wK2BrimyKPPu2ckMKVj0SzrtxxF87Oo0wWcscrOoXU0G0+cDYW31BwGTEqAn04jGuQiXuF8/LQg5bCtN9GrjKE1TEEgQakXctS0Mw9w7M0KAm8sxlL7jlFM2Tzpl6MgNR+UV4Ttg6RZH1a0xVTZDIJaygYsSjBBK/PoCjYOwch5ZYz1/W7+C5MPUbFXiSCRIZ7CeAdNL0MPdX0q0SPAmq3eg5DGCvCO4H5q9IduwrAV+g21TTNOo9VGboxzU3DgMmT+6WeJBzroHExcF1y+UF6jX1EZRU5MiSyHKiwIQx1R4tMCvAtMLFhL6R8fQJ8A2PqGW7yPdBgbi63I/FhaGHSMztXyQJDWacCgF46hzTgYjbs/qlhbhCMDUDPi/9a8CXaZ71vlm+xwewgkuzy1bSYosCxkkuKL5khfjbyTQ878STaczvNY1wjNz8nxv38Mn3cWcz1xr6rPONJawyZnDA2o+GJtwU6H3SEMp27Y7sSUcB6BWmqmeNs80Ku6+65UwNJPmBn0tKCCATFbWH0PNRwdI5yCs9Rql8eO9F++5WzaeYJgLaUP8sW6MGw9/WL3b0b6sf1Zl7z4/s7C24J+0+xeIZpDEU3xT+rRkH/d98cVQlv/B8TRzNsycvwiknoYh+8nFpf/HaFZdVyqi3Wbyx63ez4CE3jSGbhcKV+CAj69lZvRpk63dDfciKKRrQdbpOVlOn","layer_level":1},{"id":"10fe110b-0599-47e5-aca7-ce0be9725463","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"用户管理","description":"user-management","prompt":"为用户管理模块创建详细的技术文档。全面介绍用户实体模型设计、用户CRUD操作、用户状态管理、密码加密存储等功能。详细说明用户与角色、部门的多对多关系映射。包含用户数据导入导出、批量操作、查询优化等高级功能。提供完整的API接口文档和使用示例,涵盖用户生命周期管理的最佳实践。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java,crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java,crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java,crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java,crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java,crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-01T11:59:25+08:00","raw_data":"WikiEncrypted:omFBm9/VSXD3WIUtSV+9ITUDa2v+RYq+C/fLa8IO7B4qQ1XHnATlK6m6IxdkTmn8NY2ajKuiE9lLmBkQDMFcURRqkg4TKDRHcFEDVnbYWl/dgd1oOhtlZ+3c9jxTb4PQkXFU28v8wyZT/8cTB3Syp/0/L1Lfz6Qy/YwWTSd57sEw3CVLLnlaWZaagpQS3vCCsuSC683+r0GekuWXZ3WnfPFtlcg74Y1Quvv/Px/Qf83fm97012UtjEJTUmjeD6+j5Qq1biZgkkp9UzToM/eH4GfEsBUKOeUZYqJZdSL8g83HjeMZZpdsf5H3XvRoEU5uDhiWoKF+VdnuHZc/TlGR/+/y2X/wH8mUpP+U88/YktM61wtm+a06d+1Bqps9zntqxzm8uMWTjffxI+vXsWlVV6Om3tNIiKUaDLdE7RFz3LemADBpvRb2Ek3Z163NArwTlI9+A17BcxGPtsY16T0MkNSdmDaBB94lsrexAB455Uj4NmvJPQeMcq9RTqFlCxQwNNmOvk0dl7lN6MijCbfXUVlXvXK+Lv5AJxIvkZD1DzCuPv8c1omWgoYDOQPjbTzXEqYVn6xk1A/N3FwcmpJN+Lqeug9vDbxXLHvYyuY9Z2BuYCqwU6wYyiqcsAtfAtR0pvh3T7cZBTCbYm6pQQXI3er4qyjLbJCFic3QoCOJRZtUIwo2uqbPnA9i7K6px6AUcbXxv7YPt0kQ/DOCNsXif043ADwxFxR0BsDZv/NhFaDSxwGR+Te/UApHHMhN/gKOoeedrK0J0Dys3GzyTrOaybXC5SFX/W/IQxEDHinPKPUkJBvIArpxo03jgfE16wdspZpN/jRDpuYkCHLBEpbgX8GuHE9h/zRLm884pMl2I+ODc0M85n3gziIRYxa8UmKvO2Pkigv7zl//33xWcVb7tSk4pjxJ1hmbNoxw70YZPpzTCtX1rfXtqY4UD8d2euK7LGQeKwVyXo9msbYp9PZVo/Ts6NCuuY/Tj8cz3qnINfxxbPCMmtNqiXUMGhrAM1WXjguNyztL0LrrgER47f3V7crdzB8WOAhUaf2/VJZdGTQyodF+9qRlRwtqznmpu+/rZbKcs3ZqPJPJ5GIaMScsQUNrQls2eeJ68jG/Swy27Ar7kOZfrlrrZW00EazC9aToSjCFYzOM/ge26EYHrQbPqj3RveapB/gX59mHaev6bCg/lcONcVgepBaqX2jGh7TX+oi9WKgjO6kDVm6UeCONK/jZ40YBtHG1x7hwkHdkNBW8xu35R2o6rWARbBac19Bn/P96VzOZ9i3FKuiN4amlov71yBnVTCL8aG8bCD+6g5w3gRO86pV+ncNJutXBlarh7nCFvFatUjmUOy58ej5f6TBwtHJPEuD09OUD4kuc7p+9XuPlPmBf+XLSiWurKybmnhVveG5KRpcCWwbGVBGOqoH6TGL5BcZKgr2rOM8rxejnHFlNT+5IWKPYOGpgMwjsIlt9NFIo4Z6VG3xBIFRS45ljJ8uvyd3Eb+CZXORyQn0=","layer_level":1},{"id":"6d5b5dd3-2110-4c67-91ab-a4af568b1fcf","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件预览","description":"file-preview","prompt":"为文件预览功能创建详细的技术文档。全面介绍KKFileView集成方案、支持的文档格式、预览参数配置等核心功能。详细说明PDF、Word、Excel、PPT等常见格式的预览实现原理。包含预览URL生成、参数传递、缓存策略等技术细节。提供预览服务的配置指南、性能优化建议和故障排查方法。解释不同文件格式的转换流程和渲染机制。包含客户端调用示例和常见问题解决方案。","parent_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","order":1,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java,crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java,crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-01T10:23:36+08:00","gmt_modified":"2026-08-01T10:34:15+08:00","raw_data":"WikiEncrypted:dxMhctgo/8krDJJIGvp5je7pnWhEGjPpcmzQzTYORNrHS89p2z0ROReU8lnJkh4uXBOz6IZfJJ4ZaPZsYZngPVK1yXZZDvBeVxrSz99iZIwZrjsWDcO/zHRCBXofWF5ppeJ9kiFjD0xAw+58zXgbLfLTjqPSl+cNXnPTFCh3zJIKeR+MVLajfbfP0TsN9kCNycb0ad2IgHxBJsyIrJpR8BkfgTdO7g+BFLSItYUR7/ra7DlU9oOvaJYbHbO6XdY9qHeK/JAsg5tUmTOJL6NalK8bdAIKSu2ASMHVH7iq7OSCupvPcUV5Lv6Qid58UIkulru+QTRUoTBbdOoOA1+7hVywnXS4ETxAeE7ZpOWwbZGc1o18U8QYSN4QkGCRkM+i9WCEWccvNKkL32bgEL3nO4jJurqmGDsck1ME6c2OxzoLCNOlG1hdu3S7UXZ/1I4g3tJFhob05DWMoGwFUwTt4LRndIqWwrq1VX6NrQD7VDlpAEamjfjx2+D50YJp1wTotyjGAue85eZwUI/O7uFTX90R8BWv1QcwMyQSmbtfDk1FGuIwVs4RH/7i8E7Go93z2awjMGeOASQPzd9Q1DN/knciKoZ3fT9zvh6TuZwmnZbnlO3/7iePFcvhQtKiuFfVgSz7oD91rmgbrRz3lg6ZIbQK1w7fHfM8fLNoK3Er7xJTJParYYOmcU9VeyZWK/Hgi3dBmVShiPuQbAFaW8LEiSoSLOetpUpmiDK6gqhaPuhV5Hzm0kCqwpVRm8m+T2Td2lBBxkwVogRQEVei/EYenbLJ+ScpFiqicf+RAZPgDAl5nnoZinmmzhbstkbCo5pBZiEqLOvuNLy0NmZYmaqCyYgCzYmVsNJ143UzFkzQRkFieGecHE7chtcN98Phnc74NbopkEgy/8T249h3HrBWYE86uaoybR1n0EE3Vm8PX/mf/OzpVGvNY3vy+0PLn3ViCkkt+X0qAn1fgNKdMtYtrdihPqXMJ7u4HOJ9VMa8I0pnw8Oy+2RAVQw4ceO8H6gSYjdKT7eT/1K301dVXX1D9ZL+d6Up2vpj28quYe1Ry/nFzYNZ01evQgq12s2wWMBd2WgDbVERZUvmyzvpAY9nTbIbg+PfTGEa8TpNl/JNV0Tiq3H59C1NPvwrBnb2OsS8MX7Y1xhgyCKaBh2ITYAqGvbKZ/3aNTKhCE4fRr7cmCqDGXJw/NqhE4hVpUMuXhW6","layer_level":1},{"id":"944b8007-7a9d-4625-b67a-994c17444047","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"系统管理API","description":"system-api","prompt":"创建系统管理模块的API文档。详细记录部门管理、角色管理、菜单管理、用户管理等接口的HTTP方法、URL路径、请求参数、响应格式和权限要求。包含RBAC权限模型的使用方式、数据范围控制、级联操作处理。提供完整的CRUD操作示例、批量操作接口、树形结构数据处理。说明权限校验机制、数据隔离策略、操作日志记录。包含复杂查询条件、分页排序、导出功能的实现示例。","parent_id":"6e92351d-04cb-46df-89a9-1e2f43b46552","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-01T10:23:40+08:00","gmt_modified":"2026-08-01T10:35:11+08:00","raw_data":"WikiEncrypted:gWB8HBj+8+/15rQhXgtMjEKq2kOmky4szsRWbrRCDYWdhl/hPhdkhdxXx82vgK0Yq4YovLidZUwMzKENzTC1iWLHZP7CVhc6MA/Pglf2CXvMqEKG2yvSGc3y/Z/VXVn1FpYBolGlyUFwRtfohsXNYoxrpja/fQuNWUmT12jSfYFB55Tm7n6TDp4zFH7k94Wwwh85nBGP9Sp1qHHpyICcOzV1t68+sjY3ZmSOCgOAmvRKKlgIWsMUioaMHMAtmqOTlkPlUqpeZyjjXnksLfBSeS43nyEUOUthyGbP8JXY5TUJmTjNsCVMVZrqEcuw3mR/3l1hS6DzMgAyJfNk2LCsGHm3Pu8qB7w+j2B9FzSF85Dv6T/FGFAmhQbsx3dt+tUD8YajzQXFUKj9Ce4Wjn+hHfnsUYqPgw21xr02QjmTAkfIRmvH7Z8C19ncMrrgq7rlDbPZK8b2PlTNP3py2NCirSjB/L8TDMlawckMow7JiQ9Y5XdSuCwBiR2ajf4EiHwul0VGD1WMoeO5u40vkVW1F+BL/hEIh5ouDXR0yYK/d7b7xRaMHfAoel9uDPt3mUO/om3iyQe/ZKKMUapY5Pk1KSl4+jQ7+SzQVZ1O5w+sVTvhMOGL+tQmILsnZ/yPu6IHQd9SWtE3qw5HfdxhypeSOCGLhBycFGuSuZ+RxE/2ItXNNBZAeOaySFzmRGjjO3jcGaaMK1FrWCPMiPSrmEXltZ4IzM0C/VvF3U9qA5DSSX4DjHw48i5hYLEA58yrc+c3Q1bSE33m1Bob5EXtKOSfUC/yPL4X3CktnKTC3E9YGlCOUCZGJjEb+ogzAxZyWxv/YqKi616rHCzDtSAmzCEHdqKYlA9p3NTn4orLMaq+zLYa7G1NBj4zWGhY7SKUtDx2AnqDxwE1yiZ7NigkBeJlqMNNa9P6iNRgcv+XvsQjUhJmpS3tbxgqbwO1RK1ZBcu6zdwFUpZION0Xs0INjXT0gMhE0zfcZjrRx1labVSXZcf6v65gQ020BJ7p+U5rQNAQ2S9cOwrCC6Frq42bJ11nw8CMQP5WSaLvp3YO1V9p/301GM5cifMoNqMmozvLCzlDwAwF+oJ51H2Kn+R5PL3IthEzNyuhLD3Z1IgwJ507TMqSH1LiBBA4zAJEa6Zpwb6g","layer_level":1},{"id":"36b2b0a8-2baf-4ee8-8bd6-9a92f4799c8a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"基础服务层","description":"base-service","prompt":"为基础服务层创建全面文档。详细说明IBaseService接口提供的通用CRUD操作、分页查询、批量操作等功能。介绍BaseServiceImpl的实现细节,包括事务管理、数据验证、异常处理等。解释CrmBaseMapper对MyBatis Plus的扩展,包括自定义SQL注入器、动态条件构建等高级特性。提供服务层扩展和自定义的业务逻辑实现指导。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java,crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:35:16+08:00","raw_data":"WikiEncrypted:5LF7XW9XcPQyjyrZizRHIAg5yfQq8gr+Igxc7dr/JkZ+iHvLFy+fvt2l+6zK1Mk6pgy1AtNNvhs9N4YswM9d3MJDFFyRtBYQexOmkYd7Rq0XQ/v6r/SAt5WYx6m4CNHsi5QrMjD+YXb5hxAPQyeKifRcaagvF3AwKgVQT0VP4HSV03xcSvfOXgSPV0E2y1DY0QD+Epxc4PdxM5qBQwBjGKHjoPJwIR5IVBP2nXOw/G8v8HKUvbUExnNNEXz9YcXyh/+aRP6ibonmsJM9yfSZ3VH6lyAH5YiVdBvkE9Fg5YXdLhz5ZQSKgd4txpjtoUAn3fNjM8QfKhrIoh+Ihdkvz9E0gfvWuFdmv7vvvls3yHuJmsGRCNTs16m1hqMOXon0pWQCWYiT8yTcCjcHgyvt+EiCxY13OD2I0QHMIGqkSbE/cEkbzQMe4SM3KI8EblypMjkK0oVeFMnLZYqZNLsV9cJsgE0Phfr8NT0FxT2dxSN7qxODAZjWpHPTYsQG3gTKDUpP9Y7um5NOkq+4TkIrPIE6e+Di77cDKGWK4FzBn99eZd3hQ9LRGjam9/tARwUBWEv3OcjvqQ/HHn+pLttRgIfSlAHt2cz4YPT7Xm4hNVnR6HY6aRJ2rHG31PKxQT98b0N9eai9jWl64IvFsKbBK6ExpniceBEHrSnAqbJMIwgsGQqDQZOediPxpzWrJ4OmBPCpSk10rI4w4xBuWQbYQC+sT05i1VQed4wW9G1Oe0mu0A69N7egEkArqpKvtKaYbTRP9R6247Rm3RmTUCSOnAWT7+MzwjZmYDAO4ZeZ6sZAZb1eYpZrC1zU+9Qw5Pa1Rhplw18XLHP+gIgH8fy390oTnTao/bbFh/fah9/8Xj9EFGoeOCJR07yn4EpvXVuNuwkFNM4V8r1ueh1Wv3YksOPaAKxbLegz9OBw/Jlpz5HQWoWLaNBixawwu6wwFVCnlgGqcF7+PJHUIZJSt753NtNg7UXS8tMY4PkrUdE2eDaN09KOPiQzJCK/oJY1HA3BhPkMhoe8jOSKfnXjwgNmhbY2lQcy5OUbWtq7LfVCBP5oQY+ZljwwcdnqMh5BFvdy5dlXVrHgzdlWFui6lZIZDTA47Wh2kNy4vOuTLofIL3BaSTnDhvOb/4sxJAI8cF7Z","layer_level":1},{"id":"93798792-5525-4a76-96d6-4cfffc0b6918","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"权限体系模型","description":"permission-models","prompt":"创建权限体系数据模型的全面文档。详细描述角色、菜单、部门及其关联关系的数据结构设计。说明RBAC权限模型实现、菜单树结构、部门层级关系。包含用户-角色、角色-菜单、用户-部门的关联表设计。提供权限继承机制、数据范围控制、菜单权限过滤的数据库支持。包含实体关系图、外键约束、索引优化策略。为权限系统开发提供完整的数据模型参考。","parent_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-01T10:23:46+08:00","gmt_modified":"2026-08-01T10:36:03+08:00","raw_data":"WikiEncrypted:arCjhUL6OOP3tq0tMlrtoET0MkpnpLCYrhUowNxgsxTcRY2bN2fxRV4wLRIZYRVr3pi7f8L8Omoh0HgWw2jB/pthz6wvbifEuEoYIsudSB0hM2SYk0fyeYUsj4HcFuL5yWD4ZUbRrVVwBSMakUT1hktC0m7Tihfd3J3vge+lkDM2To2O3JY7EzeGUKNKxxn0ia1dLdf3ywFeycd3GXTG+dxoxovwIv382EyxEqEKKODPA1Tx3NOaK0m4WXzW0LoFYa6FoEw+SpsjU/fR14+jKoqVCyWcM4xcO/0tJTXhkAA5oN2YxtyTHMfCaUtDQuVPD4esnvF84HoJD2g0GumhmKWfKiV+feWUbbCM6IvDvYN2Y+AaSzKE8FckzEBmbWvSbh4YKuKyaEFm2dOFlAUSV/+5w/2JjgoSoeBvpgVOJH6Euinpnfqe5STeR4enG0WvxkS8JSblXmTZw8UDwKqJ9zTkKRmmxNSfyYFcSQFiwLpxAR4AbYjNs8cfpM37QgKzAFgvytoyYfcVOMJjUvEkGQZFLTYwfeS3JDVToIDdMXJhc90k8BmgaZEH2e7TP9GDJgJTQV731bqWkoPPqEvphB599W11tqnRjj77CPQm7w2/JX0eTD6lF4TXBivtsF7monnQyBCseioCruxY3nDIhXz1o1WyDv1hRzXCFE6KlJXn+SN8Qh6TVES+1FKrH1dIhK+CDlyXNKDoFHh2SJuwW3y4mNOsJ3b4DUs8+Ulqgp2dSWAOADqooMWf+NSOhjbUpWHeZAvY1SuyKMGxcNe7q/aLYDb16Fg1G65lQ0LQMFCMHmowfLuF57Mh8C56dELgIUA46XQLcdFfYHZ/9X5sK0o+ioEBG+MKhGjN4RZ6a8Do4WIMUl8TCb5llEPBwEBIIqgikY7VyCOp4QW3xFLgDAU2QTMmXT4Ua66zvytJ8Y8eMcyeh72ZEuaOUP/gbWLwHk/EXpMXbHahFusKxAHNCMkidjGCl2HPcPqzZ9ZQnGISB7EEfA0swVNfOu6a1ES65dVRUjSxdAVmjS0uk6GlBC5f2pj6R0arfZFEqphPyf9kF/K8W51YX/7VWmeT0SsNSHDswWKvAY0m0+ekatcf1ScjT92b9Gi1zTfw/a+avaNLUydnAIDyZ+J50anxW47kuajBHSMCBrzCSE8lCNAtHDUVMJ7GyCsHn0kJeevijVqYtP8hL6pxVGPxNhWW9MwpvKYfH8/cZu384XsWhDyl/76ZsFgYCsBr5EcrUTLI3AE/la99zM8BxplywfusBcqFeukPGgj+pVuQG5kHu8lemjBmxkWxKeSiaDsbC4DBOUeE9KkGIVRnu861d+weEdB9r23sqLHLE1lbZsONYNvsVMFAjTcUbcaCk1iU/jjEywQQT5lAc+Jibc2Yh6asTGNY83Q0XpqNZmxwxOSVfbB7Rx/flkb/XOixKIta11v9O+g1izeeViIAgsqzkN5zbZAcsHXegIyqZZAK5BocWEL94uhaDLbCcA3wYUa4UtbLLoYDuh/CX0VGUa6bngMHrgzNuNfYlPPd/QBWt22CIfzhfeXBUn2fEqrbkXTS5nIUrkk=","layer_level":1},{"id":"f361d96e-498e-4429-aeb9-97176536e9f4","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"框架使用","description":"framework-usage","prompt":"创建全面的框架使用指南。详细说明如何基于基础框架快速开发业务模块。介绍CRUD操作的实现方式,包括实体类创建、Mapper接口定义、Service层开发、Controller接口编写。说明MyBatis Plus的集成使用,包括分页查询、条件构造器、批量操作等高级功能。介绍事务管理、数据验证、参数绑定等常用功能。提供完整的开发示例和最佳实践,帮助开发者快速上手项目开发。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java,crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T10:36:12+08:00","raw_data":"WikiEncrypted:09EvoZqOsAftfa6x0cY6Td6Nt3LX3AYa8SjCt3eFts1+TGD+h6Gz3gyZMlUyq5Bq8REoKfPUo/y/7DCab+Oh4kHKINseYJTbSpjiZGJw0FYftv+7dy/lLN+ibX3GCF6EBYEGw3p5BIOqv0VnLbR8P/HnnVT2wnJroOYRdgdBeAEezoM48A7/O/YWSW0HBeat+DHgTPtqut8U/PoAn9EYtM6xNXalUJGUbqxVOPi2I80ZiD/lSYgd7kpNxdHDfyrbcnrFIhGqN/pl5isB4izKPgSKiizWIqUbbePF8olBnz37DPFJPyWViM67gq2OFtAcA55fcJnwTWbDDtOBP1D2GTNkOTjjOTXfDrP3+WWdOOFHsAyxQocB7mzK3XGtc7OLgitmVf6pgitwLfpb3O/2HgORdmgaKVhXuuCoQr9XOAsgI4bCmzKRO1OfLUQxHVJVHyvI6Egn1cUjIcWYFKKPw738iOAV/iootqZ8rVuuDf/5qmWfIia7hka7O/uJH3bKY+6Oa+jOi7j7ga/Y2HzpxPUDM74O8mjDcF1L2ZKTXFCOtbHg+E5AcOD8OvFEi3ph5hYKHeMsjBedNhYh8f0L06d3RHcwaRlz97C86AN3bUcCgsW3wuwdlzMtbQhmdQhE3StBuWvvlOeYP0DaA8WmiqcDHj80SHSx5xD+k50UIeehmODgMFaNILykSZi/CzamcAqHx3cXx0vbiJVzlwE5T4AKTHc8MszJT94QBmg1oiYzknDBK4gNUnAH9bMfbLtL7IZEUiJgjaLe/tmUl1EuuWPkPy5bxnR7+hd9VBaTWB7J053SH0L/T67wNpYTUVvMovoa6cedJ59xwXv4WBCE3j+XOfsTMr2jZ8lutroDNcJ8CgSPFRlQdwpbeK3TD5nwGTqu5drkB7pfurGD40F7dF27gNX1BnC14z/i9ZMS717jnrWsNb6YIbbcRYPr/Yx1XWm2EHFQzVvANW2hbX5VJ6mEIwBjUkPTxTHt+K7TAHonDHT72ynEQUcdYZGqBY42dX2sl/JjaAHGIBodSzKcLjBsv42AmfBAE1VCGaQ429CJuZUYMu/nHil0E411zcxs+9TqijvcsmwW0cwZktoS7jGccqXPiCVoxSp4kp6QXAUAQihWICua7KaXTMuuyJYB3k6gGW94W2LYRi0ZJ3XKpFoQRp2rKwcI9lvJaSe+SYnI8cZx/9VaXcSGPmK+LVOjgTe1F3to1pOVL5Lj9oSurjXiuh6PjxfxqwhoVtGK0+4ByOsFyt/x2ysJGhnPiF6sL7TOJPVIQUHGWQss3vW5GPR0qzcEoE4Ho4UghSV257sCM/OAcuiz5+38jS3JOiW4IHAP8OLYl/XVb4ZrPW/0MDYPkd69tdqkQvIhwLWJrEq8PWvmY4V4kOqTNgvU4wS4","layer_level":1},{"id":"5c0faa41-8ed8-4869-bd14-7c05941d011b","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据库配置","description":"database-configuration","prompt":"创建数据库配置详细文档。详细介绍MyBatis Plus配置、数据源连接池配置、SQL注入器配置、元对象处理器配置等。包含数据库连接参数调优、事务管理配置、分页插件配置、自动填充字段配置。提供不同数据库类型的连接配置示例、连接池性能调优参数、SQL监控配置。包含数据库迁移策略和版本管理方案。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java,crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:36:11+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkFIbPLS24lpjasA+uCz79jMeOQpuJhuP44OLRhCn4MTH7aBT11DiXe6Thcw/3YSVSgf40f904eeFYQ9uvFUD8Z3j1UT+NAzNp3CvGaQGiA1HCpDsGwO0VE+lTDSplK2ERMIc0i/lAsq1/YP9fUHnoH1DUa1gq0NkYLB2rVwjQN9DLOm8XC+mjowAf0iLzG9ack2BctGQTMFLFcmX1NXhc0gR6coLDHNtgbpNlO92In3Mk7urgzmJ3nhDsXwiFtB1dW0J1p8wJNrY2tuJPn3JqnfY/nfbJ9F4mgG7HVAZKG1Rin1UflKTOf6K9PrEfyNviMjxGqgXXgkLEyhnA7TiAXe2gGm4ok2nPJbaZ0SQlUU/SWFSSAgQ1Tp18zeUic7NhGxNsHycD1NURf2pIqZhX9it8I0dL3Vx8+pFOXfVXifmey1a39iKwrfYUbj97ZXdrPC4C423ntORA+enwH6MoVbzq4eSFEOJcWDlyblI0ClX9dAMnPwLiy0h6W+vizeVeg0HioPRyyVjGoFmKrxLSN3JUVaCoSm9OVjzvpwMat11B5N6yixXzZoZZ0oS0w3xraKZE44lA49SrG89Iv7K1tI6Gqlp8F0Kzlf+aXRUuk8Dqm4FJkIFV/+f5Nw4hI61IQ0O6CrL6LJuLl5SYBqXDcycNImHLv1nkvBd9c9BwgW9ziAY4bge16YIWgm+UWeBvFyPf8BgrYsBLlC7N29iVJvW+2gJikxuU1SIqGuGnOsW0JdiwJwcdvwDwRwRBvG/xV8IzKm5aHYL3nG3tYDqOPGKGXsUwFDuS2c2Fq6Me6H7x5G9xPfSA58wdJFa5iUWR4XRR0HNrKS1tLV6idMgD4q1JVHERJGmUQ1rshd2/WFWH7vyS2id5EBR9i9rdS81QQg4ND5D/2YCL5h5t+I403Yyx3i/cyqMuJybIN6ndlwjtA8/oZPJpMNev0ioNDOb9w0i9xoiagtBGCh7j7rXfU3bawT9gokNZnIV+dkaRqDjU7zILJURYf5rrRpoZTChiEm+AxPSbpTjYrLgMF83NkiwXvHzCZqj+jl4tPCcYHIk+E442udBEQ7YR31DmDwthknlfVUoEd0bCt17/hwqyuHoqJQTQujJGVG21i24CogDmqSevn7AFaq62VWNW/i/zSKSeZjsczfiXCH3kvZSUtw=","layer_level":1},{"id":"08498174-3340-4779-a2a5-a6806284023d","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"基础框架模块(crm-base)","description":"base-module","prompt":"为基础框架模块创建全面文档。详细介绍通用实体类、分页处理、异常处理、数据访问层封装、工具类等基础设施组件。说明BaseEntity设计模式、CRUD操作封装、全局异常处理机制、MyBatis Plus配置。包含数据权限控制、缓存配置、Redis集成、雪花ID生成器等核心功能。提供扩展开发指南和最佳实践。","parent_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:49:11+08:00","raw_data":"WikiEncrypted:EHSVcmCAsQzmydGtOOwq3fL0iqVetW40IaNzOLOkSb2/x1tCqpll8hTV6ywz0M49dboIXJwMfsp6rQVTFZbpsKvbXtCBUTIiCbDCywBKjxfAS9xkZxU3F44ycneuQoLLn4ORpkIU0YCQrdRJVYW8QwiuPJoKexTNDp4T0pfr/OqHUEyQmDsgpt1nN1q/OdjSPUEe/MUhtfuT502TA8OlQQ8mUeNKKP9dI3CCbq/xtGfP4rPgYwLEXS/NN+IsZ0u90IheP0tg1cLCEFZRzN9mjBk8QYOEfMk1BulzQ2QGAZlf681v0DxqKSWWaRV+IoAy8uQ1UxGRd3AUqg5BfdK6lR36nAJNmqpj9JbgYi96+YGhVQCuplbD84HlL9JlzjkYOhvHg8XOaWBqr4QqiwoQdz8t9JdP6UfCuD27exUlTS54/smsu4oX/1Zpgc8pz8dc4NGHqNinmjIRzSMv6xYCKFcPLdvNbgljXKB2fu/PcofdXXgPetTQZ6N1mo4srGQkZwGXT7pTM59qbqNPpYQbDWKZZ7UKuHHSZNpFLcxHDHFxFZhiE1c+hMzN1YBIGO5RoK26+DxLxmCUn5XJ2tvmNjyaifG5XZG4U4OO2L2bnuCSDUyNHGOrJM3vXESScxe0mEsHhRR3hu4bU4ZIrvCZaDMhV0wrS9NfyNOrSHGmloKx0eKi4wnxe3eJ6x+PFUWAcAFK2ok2gKiL8VmPyqmGbebI1R1iBx4KWZbVxm4ljI/d6XCnODgiXunB/z0qDUFOWnqNDrS2Nai9eRNpNPnRQVdmXqAKdD+qNAVl4+XSO+INV6apIuWf6AQDlB9xUs+v9mnK6umk0SWVT18OXT6ATTA0b7xWJJ0gSsC7tCFT3NZ7LtfDE/XzC0R4jv6JgWNKpv8wHH7NKYcSA356nwaLkBxF91mq/06CVraYOaaw71ytdNu/k4mdVokqp1YvjzE1wKSulOFcsz2a7JG0yVjqG7K6cJv11UxNrBwE5DOV65UEK2bLtEHT9s5hhy+Mo8FpqxAoQwtWOnyuysT1AAmw0yJnD5PZOKEWiFoN4xhUoWyP8aJdx3ni5I27YpLtAxBdSHiF+Kbh1OH5vCpWO6Kb8W72acXaDijWMq7cwEV2/ZLf0bWGa/dv/usae+0UGpH9Kxc9Q2fYY5baa8nxkzNM+EYQ0D7aMuDGUSyHQECLwPNCrxo0Z/JauyX/9DPOLcWltkejghA4UfM9FaUiBnCH6kdVRJt3ThUzIqM1FoyDhdrNxv1trP6r99n9Vhm02EFSmHY7k5ttbg2NcpHnp3wRSaU8pyu8ZUmnU3+0QaWRcjFiky+TMidiCPSowNUEwfjUC0mnc3C7OAaVqTG5Vmxs4D2if2a1jkL7owHP9BVb3zISnwS2MIx2UQFuqq2VhpddRJErI1VDAw0B3hJEdIWGa+wg32LvNUC4PWbvcPR5JKE=","layer_level":2},{"id":"d2b828a6-c055-401e-aa37-67d9c9fbc9fc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"授权模型","description":"authorization-model","prompt":"创建CRM系统RBAC权限模型的详细文档。深入解释角色-菜单-用户的三层权限架构设计,包括SysRole角色实体、SysMenu菜单实体、SysUserRole用户角色关联表的数据结构设计。详细说明PermissionServiceImpl权限服务实现的逻辑,包括权限校验、菜单权限获取、按钮级权限控制。涵盖权限继承关系、数据权限范围控制、动态权限加载机制。提供权限判断流程图和实际使用示例,说明如何在Controller层进行权限注解声明。","parent_id":"65c8fce4-7186-4278-af29-31083933e088","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java,crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:48:57+08:00","raw_data":"WikiEncrypted:Jgq9fCpm/NkqSNIWYhs+n65qPUPaq4NvEWloehv03gJrSw+5Oh2lCz6oEq947lSA4auBi7JAuodKRlg2DrF/1XSSrqkYNXPPFp9USTAvjm8JgXSppCDv9t3x4D6t6HXt505la/+0gH1Iw74jWoS2P7yYAkcYwAO3nJ4EAehJD2rMHPek+K82bazTTmuKKEDQY4UV4nofp/M/bMyjcoi4/9mJ+cFPS3PVPQFx7zX44Qu0D+Y3Vw8QAtZdG4GR+yKTxSUAWfOuyjALqXx6pUKYQja/f1vLI2SB6T2VpB0Ju3vWnnunyIIft/VErWyeeE5dcnOVSoT+oUQ7hlkUmXTXWa5rRgFpH1rqlqdKf3DwAgLSYeptBKI8t8evo6wEPSul7oy5bUBAYH7JADmUI5IhU3u34JRFAf7eZTzX4THZPnCJC2SNEeB1g/0J2BO9lTq0sN32bGerUTqmiLgWku2qNGqob5kIH9RavCmXydO4PlzvQzDdxUP6iRuyvOUE+xl6FEK9v/ItaaZaCXhzOHSIQUPSqrAUWpqA2UwSi1F7MajFAVd22+IZZuzv8vFDR+j4oKv0ZBk+Yy6cmgKZUi6omRxXfSYMBZeipzx28F2A6fSHw+SqHncDhrH2UuZIw27YiUYqc9AZKztc+gJX/PNRGtkRnxwCKcSRQFa+tb6k3Q3FNswgRJNvcjVUONAmTp2iZuBhXhc5n7mwBlPtyX1PSB6xQmX7n2zLFVzG84JQjB5BzdodAuj0J/xsTgQ1uvRLH6S54KPfOIMr4wpwQUFiasQnXXWwc5eCEzkyOzL+2XUgqoSF48hdMFGDUZIol+DTXJybw9lJZl3PurZ1Uhr6A47IyWlac0CsnLlA6BIJc2dv/ovDyr5oyledl30yseFM6Sw0auQA92dhawYmi+UUGgXLZDQwbf0dOctrFIyfyrnsNXb4TUcUB1fU66Zdjp6g+uQ7P3gbkl0j0L3pzKbzLoDMs8SPujYYMEgVPQrgT0c7KwFsOWsbaeGMIu3Qn7qR6OW/niAdc0j4/gSQgBz0bWoreavu4PgpuJuKrPsm/4uXW9GfUsq32v1ltdTMF9RZeXrkHBozz2HjbQ8fC+NJuWvNSpcrOJmDMnllYsRpC1eQyLROLojzrIxRKnh9tXTGiclsmYW7k9u1REDdwlI0bFf62WJL4cYLGvVSYUZsiJSAxblMKzQ4gDf03Gp7eYCwziX8+XVDniIvlHv9P4lg32HqZ+/Q8UYtceiBAJ+d/TzCwkuV/x7CW57tSplQtQQ0v7F92DDASMPD1MLN1Fls5OvaeWONZkytq9nayiR5LYtZaAZGb9ArlJdQ42Y74z6KdZ5NwJC/y6YSxjVzttqqeHfUu/BLOtCCcOQzblb1GE+sauxFJHLHXxevAUZBvzExLSitjQGEhzTYxUYp3Ay6VrWntOVUBoo93h4JB2Yw3cLTPvEfzOg9MJisB0HlSmbb","layer_level":2},{"id":"f30568dd-ee5f-4b57-adef-92341e4f08f8","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据范围助手","description":"data-scope-helper","prompt":"为数据范围助手创建全面文档。详细介绍DataScopeHelper工具类的核心方法和使用场景,包括数据范围设置、获取和清理操作。说明DataVisibilityContext上下文管理机制,包括线程安全的数据可见性控制和跨方法调用时的数据范围传递。提供实际使用示例,展示如何在业务逻辑中动态调整数据访问范围。包含常见使用模式和最佳实践,以及异常处理和数据一致性保证。","parent_id":"23dd7f77-e190-4852-b94d-17d2b127f16b","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:49:36+08:00","raw_data":"WikiEncrypted:yP6vl3GzzNMVOI7+ToNUFWjLEyz6qJnoTjlCLP4h8KvB9GZSFJHEPlphDkGPkwC5zWVtinGpzjxNq/oBK9sMCODd37X1fxvaznqehhePGzvuRdKKFfJVAiV1LqwkVslddsr/kmnpFcQtmCz3ngn7GVb4GESyQjTMlWWJwf433A0ysX9HGziCDAesC1tMboUI0O0c8cJcaJ3FPP7H3f3x7pG86dqth/XBM243KfeQEZ5kCBdvLPxuGd51pVuQf48Y+0ciH8BHUsoAls3uiMuRujJ+uAh4r4oShCSjp3EBaGxV2UT9gHzgEKlhsUrgf+uWbmWUv4VfzfUK1MOlgi6lCGMEeAGR4knDb/9eYPDH6KJK/y8tBbT+j0xT1eQjvMJhvbV+EzZiMZNOjegkws0YXoYTZNzAjexZYISDsm77iz6YXpbLbSbUmX3NHHOuQ2R4OfwmsUjGbpwRvBr+7y8d0BFn8Dggglrme917f7Cb8HgGeVWh9QS387kZIU0+UBiyAeYRdXCr20E7eZSc6iIuwtUvs7X9dxpu8t+X8Ku3w7JgioOGAIh8W2r7qhPzOiAz9evrYwlSME/Y6KWYaQP2YO65Yidrh5o3SdGy1kpKZdn8C8XLf/S6ZX8E/sC2HPuZzNx5u+7565tvWSv2VI2za09xVRwboM3urc4LLzTaIKnPUWCZNaChWXH7CH7Ypq9pFgGoYiua8dp9enJHEWwfFb83u4BgDOI5gWRV17bW9Ph8lqAHFd8Ap9R5I35+xnFTW6SnEDibmjd6YtG7GyYhU6Ja4yNAfBrtFuDK9ezzFx+z7gzlmMePJrWWkQ+335BwuzMC16McPMkpbCBczMJTECLGdxYrtktsinDn6iQdUpki0wqkX/FEDvIrvUlmi10bOjBMWBI7LSHMyfc5ivg8DV+HNGgZ46L+HM/iIKuEYBqeKYfG/zTWG1KRGRT3RjSsRGxXwGJU4ldQ7e1x//51H3jW0cp1iMiLP9jILfrwIR4/tNmAm5wisupKyEmwLDlN1qqkZ2240ggZj9XmPm51/Tf4s23xMMkxErQMxpEM0zbRJ0wNHLVm9A+pWhWoSLyeFIZNhIxsU7CYuZFJCojFEqDFMXFAwUVBF95wip+3k1Qi6MkHX8jBHHzB13PsUQSQt7Azo/u5YLkY7V7XmrkgLnp7P35MJSF1uyBfUFDJpmzXaq926uoEQk3I7iLGhM84R1FbNTAP1Aj06ww1j1gbhw==","layer_level":2},{"id":"205f602e-3460-496d-8aee-f9959ae1d4b1","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"Redis缓存配置","description":"redis-config","prompt":"为Redis缓存配置模块创建详细文档。说明Redis连接池配置、序列化策略、过期时间管理等核心设置。详细介绍JSON序列化和反序列化的配置选项,包括日期格式、空值处理等。解释缓存键生成策略、缓存穿透防护和热点数据缓存方案。提供Redis集群配置、哨兵模式配置和监控指标收集方法。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-03T19:55:26+08:00","raw_data":"WikiEncrypted:iqPJQzVx1dw/J2D5HnoGAa3GlQlFd4NfIvCWopKSIlwe/Z6QhxuFm/9C30Vy5wugfxkJbRV5hkN5IJFFR/eTAOjKGaN0L4MDv7F4pgE6jzRovikSh2aaYNFOkg4Ov9k7oKAZavegZ8xbHAgjqS6C4/i8iSTqRqQi0Q6B5NUSF0C/1Rl6KYVC/dgND4LponSOT10pFcbpAULvpJLDkEZJEyHO+lYakqUYBhwi7YalMopm6jjoNCySG2GIDxgyC0oml+dR183aKlIROEygsTT/ogzlqpmllWzkB7yr923pEr8ff6uQgrKMC/uXtRVx/XG0ap4Hktw+kxU5iXCx+QcB87wrn0zl5zVK/Chv4VbDDYHpAFUw1E2QfVb0x79NKwahSmkxiIB25U839oFqS1qKnJwE+tyZOBbLP6KzGG1U3/TDlRQaEyCKgiABPj33CIHDWQzPKDEqbexsz1HlK/z+EJVKthgNDKvnUmjT9D9eePvU8SzR1HO0wixRSgAg6iz94HoEWcNdRRNMtFewjg2o18+cMnZ26VodNEG4eFacW9tvVOA7/HJkwilPNVLnP4XNZTyJ2y0tcThVylWtM26n2DPDmfFPMQtR6aDoi0ayV4/JQuS9kqCHXK5sqiGvvxl5xv0sSD8GFPUTuK7beD4ocR0KyPSQuXqeSXdEjFpgi/1ggI3PvfTY9RDemwCYtqScOPs3tij/QZUzwa4tvActlUwSnD5bf+NVpf5Mr6gPkQz3dJ1Pj13zTzmgYY9gsHN0oV/iKl46X1oIC4yd9rxCMTGM09QWysob83eok+pSD8qG4et7mGvLrq9v4o43Z6YvFQsYUgw1o5VJAYHjF++IjG+OYz4CyOo7dc/v4kknzgpFt7TaM1RPs14CefPQD3mpma1/u27R9cBeNeDBOyP64LcReqLb57+kmfzKDWsf3LeYD//9QZNh3jRQ622430nq","layer_level":2},{"id":"24f79255-1534-4c47-9d2d-1734103bffb4","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"权限管理系统","description":"permission-system","prompt":"为权限管理系统创建详细文档。详细介绍基于RBAC的权限模型实现,包括角色管理、菜单权限控制、数据权限范围控制。说明SysRole、SysMenu等实体设计、PermissionServiceImpl中的权限校验逻辑、DataScopeEnum中的数据权限类型。包含权限注解使用、动态权限加载、权限缓存机制的实现细节和配置方法。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java,crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java,crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java,crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java,crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java,crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java,crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java,crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-05T14:15:12.8293219+08:00","raw_data":"WikiEncrypted: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","layer_level":3},{"id":"d016da08-6253-4c3f-8900-7211fdd0f593","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"分布式ID生成","description":"distributed-id-generation","prompt":"创建分布式ID生成器的使用文档。详细介绍Snowflake算法的原理和实现,包括时间戳、机器ID、序列号的分配策略。说明SnowflakeIdWorker的配置方法和使用方式,包括节点ID配置、时钟回拨处理、性能调优等。提供自定义ID生成器的扩展指南,包括接口定义、实现示例、集成方法。包含分布式环境下的ID冲突避免策略和监控方案。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:50:03+08:00","raw_data":"WikiEncrypted:YDoRcNsKkN0DDXOHAYnH4GQk2zDwyvq/e1QirqdzGRl9CusldeDWAeRxPrD9HHfi1hUA/ggMh525AhMOfdv7X5lujehW1dZEbNObgRdgQucJfoW+pXqrQkMP3xgqFB0yHstTuSXeq8cAbV2NI+tJSGGRlKmdK6KdGYHKmGprGmxhnsW7jKOJg1YTnEzfutw5CEfI2AAMF/R1Y1mbWzT4Z4AyPDIJbzAgL7d+BvC+GHHugNV39nJPIPgWHvhmoXVgEi2tBmgzQf0g2d9bCwLkqYLV50/0+lxIqGxsDrfVC2urDwbiJQLQonX7p8Z/RlDuiFgueGvhgIvHpy0ozY+DsN7z9n0f9FcEhmAA2IRtaNKB/oAghXX84Us3XES5emxHL9+13bCob3lvtTJbOnPnk2MhrKRz5I8uEcT34j15ydc8IqEgHPcDaPRHff4pxSG5nVD4NIU3uZRZDJTsmld0a0wmxVSYshlsoZQdYYdoyurmCGnlLS0WCkztAbQpb7VFcQ1GyqX57vaPQtFqOvhQypJ6txL7EAnx/BndB9H2VPwe9a5hOlfSrYIq74snT/6LGiO103jCLlN1HieTPSCVzem6xLc8J3dYxLeooJSCYsqK6xfp7ttG7g2WesRasN7qycKDkpjeVSloo8tZHNu40ZVquGOUysQ6kaH6iBmavEWWnOyPoBoLZGb0cCUhkjxXx8Bkk7gmOnkzAxzRbLkQgKwfXm2AXylMxvFuomP1rSrKhCkAhEX3zs3Lg3qffH2btil9FJDOTMMCO9O649zoG5OrR2cYE8xnPFbO9E6E+YRDhdSYd3ZZ8Ju73qkeneupeXlHGnPw4PchWo9+/9eOFR5M/ABZOBoZhbQvL9aBZAMYNsUb9KWNc4Z9mfLATMLppjNTkZFHByGHuCaV5prLmq0nTg3/U/bjUJB2SueeLsHLGCkMJ2qB3cHkNhquRHiQssEEyFscsK+3qxFU7Mmq1cigy2IitYvCVRitNORedW8GeED8Uctje7LBXagY+rlxDLrTzrsarpyBcyJsNp7Ngtzblvck7bYtEeB/BkolTHM3Ca0bBPLf3WIhhfmlTk3lYv7cHikBjixzbCdb32pLfeKKmT/eAMHXFyVGgOpM1p+6JANSleZnq8l8SvNJ68xrTsRLiiFY2+UPfA+69cYX3SoNQqFSuS85Ub+D0ME8lVO6L7pBbulmLPOOouMRLBqRgzeubMWg0CxZ9pQZe+Ko+w==","layer_level":2},{"id":"38d7de85-c5ff-48d7-8a0e-c4972f5d6800","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"服务层封装","description":"service-layer","prompt":"创建服务层封装的详细文档。详细介绍IBaseService接口设计、BaseServiceImpl实现类提供的通用CRUD操作、分页查询、批量操作等功能。说明服务层抽象设计模式、事务管理、性能优化策略。包含自定义服务扩展指南和实际使用示例。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:55:14+08:00","raw_data":"WikiEncrypted:vMsgMax61wW2sTWhXd8DH5MWokJhmuibsTyKEKUwYd0jU1wt1a6cO9gghJ3SefDQsaJpomzBIOwbaVKYW0PJL9py8nKaIwDUmdhq7iNekda953luhCFyuLK0/IIfnX5jcyNbFqNZosbeD5VrSmMLbakG+DYvsZ4fx9udRhcZMQbzUQGi4zuH9tKPUWPWZHvgWJLY+aYbvV4xLqtQ3UCw8WgFcBdK/UdJWRuFa24B05W5wj7dppHFP1AiHQZ9AI91bJqaL8ceog8X+h9kI9++GaSvH2pO07r6hitlvE0dkLD0fh7vJbW2Qmy5LrmcbaayX/nGW7qp8jGg8AdLP/7bX8SJpiJ3F4OTM58R1dJ9kdILl3/K3NGnh2hLmOBug9ivW+7MTNGOYbcGFP0yWVoEQdRgiptMqvYZFaFlV75WlwGU2bCyn9cpMS7v/BfJ8IcVVVw/pX0z6krNR87RAMMD2dhFwa9xCsQYMw/D+Lzc2BKTg1kHTW0w6Wpek9rPJUHhSfydn1LOJS/XDf9gDrTyrTffDfEtrkD7MwnVyVldx3qkswU3ra2/G2ZIefaNsCCjIGJKVqZFYwNU6hs7vN7Ixd9TkXHbcAm99MTQtPQ3LLp7tcWhHtOOvX6H4h+O6DWmJTis512PzbiLb/e3SZ9fAyhTOa7QLXkRHXgmHjQtFq3RLwNtyrbpOx4qKdTOv6C0NpAhubZhF/ggiCMvvkbwMisq+LpAr2n7EyXz5LpnsvDoL4iFpXYHWsgY6WE+/mU2AJfwKNUKYVyAF39tP5qbdPEmLdEkl0we1FllZyfnt9rU3PNKmd9E/g6psxHR/E04MxjOshDGYL0FJCRKDbSwE1c++YSLImCtfboP6ZC+AIw=","layer_level":3},{"id":"1b7df2d7-ac12-4df0-8bf9-b70d107236cc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"动态API权限拦截器","description":"dynamic-api-permission-interceptor","parent_id":"aa92acd4-8a14-498a-974b-5385add01858","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/security/ApiPermissionCache.java,crm-auth/src/main/java/com/crm/auth/security/ApiPermissionInterceptor.java,crm-auth/src/main/java/com/crm/auth/config/WebMvcConfig.java","gmt_create":"2026-08-04T17:45:25.1800287+08:00","gmt_modified":"2026-08-04T17:46:33.4519067+08:00","raw_data":"WikiEncrypted:juMsv69HY0hjMAj09/nIlYUwGMwwWHyRczX79yJUy1ZCBBsTN4dFEgaHJbybij2vfkMVf2BKNp4hnb7UQSZOnb4Lvu4vm0LGHJrDScvcjyWwLXWLQYCWaLcZQTQ4ZE94uNsML0oEzyRsVaSYfzX/s5RyqUGEd4iquIfB/KpWcSou1HynbOHE5h1KXcvJ1TeM/hg3+Od1SFd8PH9iK9RKocgwlJQ90Ye1yBrRoePV8shU9hmewxuUQYXmazuCvDM29th2BP1iowyBrVsJ7nn2oBPaEIwWG61uV2e+HTEhMwC/qzJTqc5NHcm+a4FOkGDjftgo7ba+vC7kTqRwewsvRW8AcGyyxm4GizNBXucTuwhAkCPzRA0e6dSPLKut6zr1dJyfPfbn8tXN5FdTJHsfdfVt+kIwDuv/vcr720qWA/dybtq/yf1rl9ygPKCWZTKZrgx9A6L83WcR1oOgyn2cQg==","layer_level":4},{"id":"6185fed1-d9b4-4455-b998-7973faf0fd03","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"架构设计","description":"architecture-design","prompt":"创建CRM系统的架构设计文档。详细描述微服务架构模式、分层设计原则、组件交互关系和数据流向。解释安全架构、数据访问层设计、缓存策略、文件存储方案等技术决策。包含系统边界定义、第三方集成模式、扩展点设计。提供架构图表和组件关系图,说明各模块间的依赖关系和通信机制。为架构师和高级开发者提供深入的设计理念和实现细节。","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-03T19:27:26+08:00","raw_data":"WikiEncrypted:Jk0nNOIGshX80o3G9X0igBLknfZT5v7zZXeQ+tv6q9qpFyin4OnjRV0gFu+HicYJzz/KlPriLK2NWiMS9xCdlAVCxwfSyq0PQjIpTWD7e/K4+IO1wu/GyYdInxDNlo2cy2CVRF1YaFzqQcTBkERIkMB1zNegRGFDzQ52Ibgkk1mSivTvPzD4gK4QrboWg/iJ3Om1hougDkYhkLS7VYotSyy/HcCdM+sQ1w8t5EQ24z7xxK7WAE0sPqnrV8pKS7SzZrzhKq49/lUe8aSKHCgX7auLO5MQSvM8rxLPk45Iup/JtszaTxoS158aIbcIyt/F8OqkX45S5iZ0SUhiO/jFficeCtadp6bN1lzYbNW8FecfjXzBSCrha+pbON3wv8B36VRnMpDWe/Qbt6FPEREUGvzLDiAgckB2OObgBHPz6AqTqdhz70Rnje5OZhVHmaMuehgp+HeyRw835/GpQO3+m3JJcF0kB8l25g+V9I6b8WVHkCYeNfE54zF34EpHjr2trhvj2MVzTh6+LYHlJR9SCQF4AUR9hipize10G+VTKbV8TIMvrxvHYBvoFgiXXMM0hM0LnX+CVEtR34xNVXeLv17dfI1C+0/SxVJiD6ZW5kbkebmf+BMloCWF9Bpigj35LpyRXpzehPiI/E5rJ4MJDUE5tHgwGSsztlT0kFixi61eFyt4sZvjieu+6KQA8CadWxXQh3KBE7Qdvd6zVHccsbm1NaCR8SCUK0C2dVOA2mzQzYGBFeCNUaoAYay9st11BjPHXCEaMXZq+BqJBruTwrf+Sq3a+ZxbGHw7wn0A/aWBIOz0PeZNxTxBmf09K1xKS68hJE5X/6OvuMrziTuiuqIwDfSaCf2zwu16xPdpJKdECsOB/mt/6UEkOmdgsNkHyAjH1SRqbB1trjnjbar6OQjrOBDpD/k7IW/XJD0ID6ISfx3gk3/CX7if9/shg7av+ga9NPb+tc8dJZwJiqohbiF5s8m7S/uQM/YvVFQMs+hfpOTAw9Xh2hRP0JwRvFUtqm+5M/SSulEH1NTrTsM/Yi0wAya0FZjPPud6w/K2gxwAYEx2OML/YvHHvdAjhnVWVzo82zaQxHOPMx8KiQYrZrxdTEPerq0zO5+xon+9QBuu6vNftMMEvJtDWRDqs9CgHX7/ClERnPiuz1OT0Qj3r5SDcLOzSTQqtrmOPA0GEpEFdpB34eD2NE0iKWfpyHwjrLx/xADYF3femvaYgDNqxihk+IjLgQmhKrzKKc+R0wj9/FyI21Nq/LhSvEkb6+ccZwZwXtpAV4/iPyhzOWJxRe0KAkJbwgVIdCTcNv3ytVVuRlxeJgDwTJRrH4mm205FleRBzfaR8r7a1AhiJpsSVw=="},{"id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"模块说明","description":"module-overview","prompt":"为CRM后端项目创建详细的模块说明文档。深入介绍各个核心模块的职责和功能:认证服务(crm-auth)负责用户认证、权限管理和第三方登录;基础框架(crm-base)提供通用功能如分页、异常处理、数据权限等;文件服务(crm-file)处理文件上传、下载和预览;应用入口(crm-app)作为统一启动入口。说明各模块的包结构、核心类和接口设计。解释模块间的依赖关系和通信方式。包含模块配置、扩展点和自定义开发指南。为开发者提供模块级别的快速上手和深度定制参考。","parent_id":"673ed306-0e91-4381-a45f-07865c6c3582","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java,crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-file/src/main/java/com/crm/file/api/FileApi.java,crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:37:45+08:00","raw_data":"WikiEncrypted:MaEDad3+dpW6rLlXdYaTGZkyTFh6cmeGxS99eK7pO0oCMOPGMuyzcrM6rTjywBYvU0i9IzXjFB6xC6fZMUbjAuH5VCCSA6TRT64oNt85vZwqEDJoiBVRjwsZSUL4wGbOZ3zyoOnnvNr5TiqHRfKI22LXn7RnmWkLvcH4SW487tvfPWDreCieEFrz3O5chIkMTwf3sHih+qOf1nVXq0rEpgrawzHNF8pLjXZ/UcW+glya2oI3RtmxXVmNjsFJdblAdqjBK/LmTCvMAIbp5NmVmsDLxwa08/l1YKPMj5UUq7/FNOzrFcjpwwtxsUWaToDVZ9IRityhQ1Hy5qhFXxXfErNhqO0sXOnc2M0EkoWJK82PxLLduRjDyItdhz0XnSwqf4t+2k2FTznIOcTb3ga9M0cPJGac+L3j28x9CStkpngzqeRp9Pw/JCprXJuDtFSIVhcAV/uRKLp1nF5JeB4tR4o1FG5eEWRDopccyMv1gsSG7c0XCcDXBepF0NGFc1U0+uUChdKG2UWEGFEiDW5xRAtl8Dfl02pwoYVbdBOMhWFsAP3ATLQd39QY9tVfJ+172mqYtn1AcDSSw7z/jlmf7uEkm+w5nm42IW+Fk9DXU9ZdL56UsfE2kpMT5xY9uA6tAiALEjUVwRHLaiHy16vN5qQSu9Hp5NbDAG2yxMT8aHkUxOYzMLpDRxL+dvevJwnJQF7yI4zAtJlSoZJxpbzTl1THvBilQnH3fai81B8RxxhlQpUo54vS/6h9d65aFGRqoOQ+T/FKzMXle+TOkPTItQ1YPnZIfxKKxuiBBfR5RtW0ehB7INTXYOcItnJ6sQSNZeT8o4tkFWLlT0AAQ1T+yQ86nS/+VwGxA4OsmVtXVyRejDOSAoBBcZW0CK1VUzh2bibaVG+L2qb+l+Gi9YbVL7uul5yfCxAhs92bMzh24+1+CpFcD0iFKL+wm3+Y7E7s189F6di5vT7Ivd7EZ4awxT43OrdvZ6Z86DPA0Dwys167PopLM7rDFoEDkP8LNNNUNlF5hLFStXNfP6mVn5uetS2y8M68sTZyGo7uu2aNfq2UEYs37mhptcXZlJKrDcyDvRhjHiHVok2XqXJxMMt/f4BtSl4hR7o4/2Z+Pv7q6hzwirJSNuhT8Fzy1tuSFqGXM93zBPdu8z6VKYDgrC1cb6jEY3EtRurUrR/zJdsirLhRjdBVNXlXOEcMbVt/G9vmMGODo7XLGjE2MqB4ykHF+SJvEJbkJrqvSEUBffGO8hvNh2RZOIuPF0Gc6l3VN0YQPg6R9evFn2x6dVD3lVWC2icI594lscq0xmX7FSJvOJDGBtp8+XrUh7hzqJ0vuUMeb5g7nxQcGyT08TUxdZMyTnSmSWRNRJEfsraH5Aj6rupMj72M5y8gmkIFgXgrGD0GsUHT+Qvhh2a/LiaLIVluEEcs2Q9AyJ0W6b7vJF6RVIe55eQUxiqEV/lgOQah99M+mE27sHbIZvPob+4irO6UBzmXTxUzcqYrvyzBRZcUBmI=","layer_level":1},{"id":"84d1852f-5d73-48d9-8e67-51c02f002f84","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据访问架构","description":"data-access-architecture","prompt":"创建CRM系统的数据访问架构文档。详细描述基于MyBatis-Plus的ORM框架设计、通用Mapper基类、Service层抽象。解释CrmBaseMapper的基础功能、BaseServiceImpl的通用CRUD操作、分页查询实现。说明数据库连接池配置、事务管理策略、SQL注入防护机制。包含数据访问层次结构图、查询优化策略。涵盖实体类设计规范、字段映射规则、关联查询处理。为数据层开发者提供标准化的开发模式和最佳实践指导。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java,crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:37:08+08:00","raw_data":"WikiEncrypted:M8uljGDGJ//mcfRJly0hh1hHWOIms32MJ3U91HA7c/phHaR80FWWIo+sljEWTSBoo//RwWSzseRn3+ZQkrtKmt8TG9fTUtuZ/4PStQSND9jEeLnyhKz6MGO+JIp5U9vMyyXYXCXQTnKW5IvDiAQP6ITaI9z1A8w/fYKcUjXLY7DpMBXG1/wfi1+A19s2CQp9GkD6LxWILERjNA4oBe+t8p59lqNcWi8X2DGZHpkgufv/1cKl18VKylKAcJgu+CcLXHLJ4prKqL7k1qMeZt0prqH8kpo9YlJglz0PZVhB4ZfvwZTI+SjBXvownXCCYLO+8oxE2d4MAyaJkaWJZILWn0TH1TbIZMQnQkjHb/zG9ptK0sTKLgfx+m0hdn+ylGLZ8l0t5WbCtk7nhHRAvM82qgSK+8OhMwsqMy5y67z4J0HIYXAlNTirQgd3O2A3ofw2t3KzstFRnncggy1gQHa+a7l5bjbZGHNw/szf/2MhP+Lm4juzmuQceK5vPVJB1X3ewf1Fw2DXLg7Jdnl+dQVIiYeCMsua/SFpMOnGghdF+AqS5DafG4Pi79QwQS3TYcRE7wgWqr5RIh/6j8sz6LmMH24j02JIzzof9PzipKIlzgPDXlcBifhKepHB1rEATqdO1FTGVn6XEuiWSoYkT2YEQ0HUwHzoy6PNafWa9uB5xlkantohV4Aa8/1d0KZKzB8cnGmQKYPF4Tejmc8qDjKyIwZ1AkYAvE0iAHB62OkcUxy87Ku+MGMA7rc88hi9BqvCkxaBlHaZ/3tXb1P9pAwpqDoMYnN8HChtHm5z4zxN94TzvJvjmMsJIpYcV3wMWFSy4Fzh+HebxKe3jRRbVJ0pMdjch4FW2zUfId1DiHRCrqMVe6Uvxu3WSnkRiFUPll1wlT83oqMz8PcGIITRhgMbpKYKLbhhqqYZulQV2iu2IVHW3KDp3RikcNHguXry7e4RbVkr6rjd1OtV6CaHJwm43e4qi/BKH3oQeBoE+O5ytrfKFO4urj4GF+UzuV1oIOsCtrZ6/HnZgrHrtQtiLlHcKopCEUYmSwzjidV27NtmWbpkY7m/OJQyGWto7PzxCeA7plS6pYyoLNIvw74mCVc92VwK77GNYfjPsChzPBnAvxy9y8OAScFV21DCaql6cjI6e55FCYtOkAPZ2dVhhpJW7W1iqWcRQaOhwybXAB2pGEybp/2Udg3UmMS1IFwrcc67spKFQHyb3eptx9NHZeJ6x0L1dvOvo7BuEq0FCa2zqadqnHvPfZ98pouCmNuX7erZEj6ajhtwor6aa5AhHjD7g42mCCDjnOrzg17wgFY5QRf5DADgjyXRiJiJPVkC//+Y9d327hVi7qtM+sTlFg54Dh01NiH9u/kSfUN5wQsRYc45ExCeDXA6V6bc0DfHDQhJRKM5hu5tr7Gfvf0Sz0BS9NDfME/jk285qkwIJEN0Pk4=","layer_level":1},{"id":"206132d0-398e-47da-b31a-d5a00714ef04","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"角色权限管理","description":"role-permission","prompt":"为角色权限管理模块创建详细的技术文档。深入解释RBAC权限模型的设计原理,详细说明角色定义、权限分配、用户角色关联等核心功能。阐述权限继承、权限合并、动态权限控制等高级特性。包含权限缓存机制、性能优化策略。提供权限设计的最佳实践和常见场景的实现方案。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java,crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-05T14:15:15.2241292+08:00","raw_data":"WikiEncrypted:sqopOHmfiR5tcNE/geHOiDzr11nX9EJ/HZ0LuytBVakxzFZU0AkpFD2jxzrkL4LOIkXMOqlsLLtNEoxSMiyFNVQpbKRqnHhlyjxn2vwG2VhuwxITEVWACuE3bHLTSAkcfkNv74kzpPswbfOU+RdPAEKKCCOjpo2EiuhVydRrvrnmYF7FsJMayf8P8x93bG3W3+eaT3zTfPtSla4mpec57VJ0dTmgwYs1Vrh82YZYYtUpCGLiWRXQLCp5Q5jIsaR3uyeV+5WxkkzW5CCULOnNZ6X0s/Eh28niibLNpaSbTxUnzpUOGFQBB8CFL1SKFw3l1ImYHekpVw/Mu8E2GRPaETMJBi+TT4T9O6UeZAg4UX1GumKAK5nJGoDxxOxE41xdZoVNa17M7JZaxeig6y4epmi3iUzj1eRo5FBVZ1hcmnP310RVdDGTOzCwmc9SAVjeaDfBZqyilD4g9sokVBg6aeeNihxTOKHSlw5GrOEhvUxCBqXa+AW8sbQsmLhNUum/A39G7HZtJZNFu0x8b/gKvVZq88+J3E/OVCQdgF5PS+D4jLs3S+/c63N8FJ7mgwLRTRpK/cWApuZOhHBEmjVZSw2y+J+wGBm8hoyrwJ3R5/mHBh126zoGVGDp5aJy79clBw0S07Dtzj6uXhtOF9dWyVVYt95vg/Duiq0d25bOLjP87s+FwzMMgziAtCmGJPiD6YiUkdoKFei9h8wSycVrrzqiJt1jUARokFI3uOHEiMb+7K30eKCmrnam7FTb3iz7lmAajpwDGZ09UhuSmmiKR93sTC34MGPO+TEa+uRk46Dv143Jm4xbLzDXRTJAzfol4eoYz+YIhOMor9FiX2fRnVhnSoTiEdjASQHTOT2kwxZkjE7mjiWan/hF61LUVqQaTmqukjDcd/geTcM6CfgehkOBuhwnJAZPStk3n2vte9Q89WJyCGKz+sljrtO+PFKUX8/QQM8NPNaI/1Wle3by79bd6StmNr8D9nNcZntSbmGZBIHrCD6emnjinSZk9sMlp6g+NgMc93DhLoAq16+ir8wqJrOChrCC8WlJFNYtEyxc0DlSGUjMXyPbuOMhZStodhM4V661d1lNGFNB4oVJ6QwuhkbIVJjR6z2h6xhip3ss32rQHzq+mzZq/iQTjJ/gLiuexKoni1fQ/LrZWgjwaAd+6pKfk5cT/Cbf1gZFUmjbg1mJRmjMMUyOkHKhf3hpw4+waJZpKkDjRY4oSXYWqbkrkHX+KzXrFaIDvMFjBig=","layer_level":1},{"id":"be63d49c-2198-47cd-a738-469331301903","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"存储管理","description":"storage-management","prompt":"为文件存储管理创建详细的技术文档。深入介绍MinIO对象存储集成、Bucket管理、权限控制等核心功能。详细说明文件元数据设计、存储路径规划、版本管理等架构决策。包含数据库表结构设计、索引优化、查询性能调优等技术细节。提供存储配置指南、容量规划建议和监控方案。解释文件生命周期管理、归档策略和备份恢复机制。包含存储扩展方案和迁移指南。","parent_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","order":2,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java,crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java,crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-01T10:23:36+08:00","gmt_modified":"2026-08-01T10:38:08+08:00","raw_data":"WikiEncrypted:9FtCQC0DeAGG21+hIR4h+Dd+8XJeekoweoDR7tBC2uOo5RNzHKFCvxq5Iktjn8MQM8j1ixYZ7PPJ0qiibSTfzMnmEzqKUm5ab1yje1/w7qa0FxynwmDf8zPTT0lD1WuuJ94qzXZ/WngBglbSOfbyxNzd2EiomEv44b1jDtNLCYwsPEsF8VAiZ/9RpMSpMrF8Gh+gBOAReYmPdRX0YpyA6BVWMooOWZngB0K9L55yXSXD+3TEeKndZnV+NM2D8+sRoZpTwfgX3Il1cJyyxOQNcAa2nv4/Z1k8Ex31HEhmqamnWEqbkHVaxs3IHCo1+wkTQZyRvaYpNH1ypERVfFN7k9IhSWNLWzAgytET/RHnTseTnIbFG0wD/53P9w6L1NQ2OSTB3e6MBKOJe8FGeI1T438PsOiEw4VVYSgD+kGR13IhcUWAgPzlCJtfElttDJgP3RPiq1ua8ViikO/S/3/sAJTEiaVl0CL44i92ThQFivXzk3sstOF9YOZ86qM/4q9ou7FrHSN+JHdGXrlxwtxsSjuHWdwOrTj7KMXwsZA+utz4H20bgbHEqq/LQA2+KVUxfw8njUuF4PGGjupxtqcAhyYg2FQFjL9vCfOXdvuHKmgkdfnvEqypt50AVEPog3NVd0DfgupPqZ6EQkMIsvaDYuGFTuoHi2iBRRrdJifjjwLM2iAnhDd5smAWD5fFnmxc4wKeGyeNUvNTLirqIY6HVUAZ8GjgJvv4vwpwOEXEpxiR5LSpDNvhuuBzgyxu/o886bxwBMbOYD9egSaxVfuBTupP1hqOwqQvQ67Y6hKabNixf3J4EGILclWJ8JaemkkSDna/IiScgxyKtTyAcr3HMPWKIZtUSIF2d0ITwTSj1wdTIEojwop87toH9fBWjA5d/b4dTAFvelEvXt7lvxmJfpLCZOb8bqR17PRO/dVB2OxAeQkanMiX3qtT2eopB2WefP2QabHsjUSH2hdEe2RAvATrJrBW0ercuxEDlW9CViXJIDMVGZKVX1MwgzosVsX9KpSniisJU2pWkBfJCBOXa2v5pnYDfDEsAtprpcxzGDY6mpOObFkbkh+dMYtuA+rOA9J4l2Xfn33ZYbTiR0Z1Fz9BLdDkL/BuSxyD0mJ/6ngczZrF0FGwUV4b0dGp5VKMzkyoObK10EsrUdMgjwtEBBWPt0N1c3lLpPzA3XKsfk338we3iMb628PiWsjwnYbgJgEN0fwbzyUN6WeheqtIV4FBblkOB04rS7l8mAUkElTLYU328aSGRoIP/befbI5LOKqOxPS0yVPU9LWQHmyZFew4faeLiSnDQPcN8abA8esuzthkVsKyXPTAgTkFsBZwjO76ohl9iHL+m7jnxM9GXDLeraMqAsgd/BnH0Q0IpVE=","layer_level":1},{"id":"b7dceb3f-2af0-4478-a20b-90dfb2844564","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件API","description":"file-api","prompt":"创建文件管理模块的API文档。详细记录文件上传、下载、预览、删除等接口的HTTP方法、URL路径、请求参数、响应格式和存储策略。包含分片上传、断点续传、并发上传的实现细节。说明支持的文件格式、大小限制、安全校验规则。提供MinIO存储配置、文件访问权限控制、临时链接生成。包含文件预览服务集成、缩略图生成、批量操作接口。说明错误处理机制、重试策略、性能优化建议。","parent_id":"6e92351d-04cb-46df-89a9-1e2f43b46552","order":2,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-01T10:23:40+08:00","gmt_modified":"2026-08-06T08:43:51.3339554+08:00","raw_data":"WikiEncrypted:YY0OWFh8RMOtWS0p5fnjpCjAJC+C61c5k5dLCj17kZc46WpB6154WMU4oi6b1j+tNeS74LfprNeAxHa9jjkOTNSGsPWO+zC/KH1Ym3OleuIuq5VIrVqbnqE3+lnY350paLmsrMSPels4eMMxvEkrS5dXmBToPFiywGQUF2IW/qPmkdOd1r+1yF9vqZHcgRUGAtqVrVjr+4Kp68Kunmwhp5Fwz8xQsQ0kfshTOFdK5mmXMlg2uLLBYtWS8k0KYs6VXIr1NlYUH+jRqj5eDkqOHereOkh6WPS2UjZ5vrr253EbBQGVZrnlcE25ntj+77zDQrbL4X/j9lD0w1A2v/APRYzYYOynKA9Eeku5lV08u1IB75nRAskessqK3ChD14teHBWxrz39PimRnTONYIH+ucDjt1NGCqxRbf07Svhvy8+Zi6gY+lZnRkxGc0yVGn9JLD0mDkudvF3WLJN7QDA5neu9347MOKbwknmzbPVMT6KH81uKFgqWGElt1xhKrvmWjhhtLF0if6O1zim28aVL4aQs6ee6doqpSRSdAQrSEubZAHFvwatKsitwtTRfpxIQJafkA0Y1soXgUYyfzNJBOpJiU1HepCuNfiS4Y6r82sG0twUpAiimUiEKzjkM67GMAZAT8IQRQEl6W24mHeNfE9WPyCWRbfITQEb1XT710dswXBMc1WqvlT0NlGRdQnvDNBRUbfx+rIV6T+8a2amMTp9tFbCAiywvvTdRJ/leP9TKQRWdGpmgeqWw2n5OFzP4WeEdnV75J0U+I5WhDNnEQr8yZPv7jrtstvFm9UsPmHD8GzH5SOoBi6zLSaiLopirI42dqJ3QyIO+av22cNy86/qj1mV8xuKZ46MD/UJecuZMNgIr1r5wtVSUG+LXTL4xEY+1cqHRYeJ0tnmoEIkvPtgbP7ugsRpHcHTV/rDOuTe1VxRhKWyrCy0rqgu0cTWROfO0QwXcwnMpb1I3aC8B9h+HurOoxIQCjn1w8T7R6C47v9KX0eYp3XKrZvnWexMSEjVyEAI59cXl7DfHTVP+5icDl/6A6nj2rcEOK+/ROvPUu+ohuS/liz5CeTRJvl6k5A7r+wWg0kZdV7EHhOYHBaxfOJ9n731wVa2eVvQYFWk=","layer_level":1},{"id":"94ba65d8-c0c8-4b05-ac7a-b2fc2bea1ab3","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"全局异常处理","description":"exception-handling","prompt":"为全局异常处理系统创建详细文档。说明GlobalExceptionHandlerAdvice如何统一处理各类异常,包括业务异常、参数异常、权限异常和资源不存在异常。详细介绍各种自定义异常类的用途和使用场景。解释异常响应格式、错误码规范和调试信息输出。提供异常处理的最佳实践和自定义异常类型的扩展方法。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java,crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java,crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java,crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:38:36+08:00","raw_data":"WikiEncrypted:RgZcxlS28ITmDGf4sH7fKcx/KKgHynIcKtHjdIlivuHRmYu6dsiXFrv8J7zlzfnmDRGLfDz3rvUx1D0b4Qjf4FVbJeCQB6Ajv0h34sxvgcR3CV00qB1fquG4WhH+QLJdpt0uR9Js3WNQ8EFfGVN7tS6AMz92TJ5OlphawvDR2cspUnx2DmzGNeB+cLqjexBmPCs04JB22bWStOqHpKbmUa2PY5zTaumMJEr8oLf30qezLDwzEOedC6IwG9z1o7ntbW7SzSk9Og0BBfXuD0RrN6szwvhrhctBqc+hiE0JoGHMVwAYZnzNQmxhjqRpJxnJxZZdhcET4tZ31SeBqoOkz5C8pA3ymnRma0L8IBgP/4LkhL8USNiRl/R1y8aDoW4Mmpcao/ejGgrt9pwbCqJTZqEvR+xQj5/CI2IOFRCZCrm8GVrU8D5cZMFbjnEso6yErI0bA8ny8+1bGTyph26kcR+eg10tagdLhy4AdtwihQqzSQowaKGvDC+pruTq0Xd+VFVSQmhzVCdUGYjpYFoPVuExspMae3Epk+bI678/HeM/Um9DWNdoSHJaoOR53vpJ84Ks6Q7IgVt4sPZglB/0kej9dAK65ofNdZ7/hiQqi0obtva2XIytHWezgVvQF4HBsgp0dKLS7ff21W/5jPmWMnQ2xYMCx9ruHrKzRQNi1ZwMu9xB7v4YMrY0mPehxJkn7q2AXd+lWE4BVAiCEokMUkIwQmyJjHs2EHu3xDK9CW00Hm6FJA1whr2YN590NGUM9Rm+qy7Hz8T3CuHpguOvIu4GFMmwBEPmaFdoc9I7fa8JetLgZMP8ZZfyPIQVItMlyyaSwSyOQnc10UzRFn5JLnDDWXneDrI6KmuT1RT7Mkb6XP6SdDVOoLiNG7r1EQWuq73QVS9ONv222LL1ydi6iijMvZvHum2tqPFQPE0/R+4zvifLGPRXiODWA1bZrX4QC02AzQzV/kQH/W8y/jFbAJ4Ja4l5VIy5wjVlFceuYC6dOi/T8Mk7XD8tfDjOokryAa8m6UX2LfnnJw9l3dsVtghA2N0tJzHkRwfmb0t3etaZhrWavGZoNESfXtCbHATrvE+8iiof/RB1giAFZjdkzKfpbSm09VOlSBplhyBUM0/TwFy0/H+arUfa/yXbdwC10eRyA7VPdoGT6JHZwh2J6PbSz0yXra9MHiJqdg4hP6qmOoJ2pxHNaRuP+Eck9XJDCH9S4td9BDUthrPutpc7dt7mPOnJPDmxpijjV88cc+gbcm3SaqmgccK/gr3w7PqWTER+5aDD+e74dDBzLi3MxjTzL6geZQcDNj0hVfxCBmvp1JnJFsxMLixR8fvjYS77Dste6D0tHQj2/H/0EhUdnn8z6KRwiC61JrOF1NUmK++/+sUkNLpjfmH4r4TMMTRVtNmDIakutzdnM96SwW8r105M04YC5nh3fOFO9jPVLgY=","layer_level":1},{"id":"ab8b3963-2438-4d59-8c5f-4a99380ab5a9","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件管理模型","description":"file-models","prompt":"创建文件管理数据模型的详细文档。详细描述FileInfo实体的字段定义、文件元数据存储、分片上传状态管理。说明文件下载DTO、文件信息DTO、分片初始化DTO的数据结构设计。包含文件类型识别、存储路径规则、访问权限控制。提供文件生命周期管理、断点续传状态、临时文件清理的数据支持。包含文件索引设计、查询优化、存储空间统计。为文件服务开发提供完整的数据模型参考。","parent_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","order":2,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java,crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java,crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java,crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-01T10:23:46+08:00","gmt_modified":"2026-08-01T10:39:18+08:00","raw_data":"WikiEncrypted:PS6QJlpgHxZyZMwNYt1TRGCEVlUL0Zbmyu3abotMVf6L1IBhFcuSmeyzNGVw4j2qaFORjUm+VGvInLU+tQEGc9Pud9OuLRywihmW3bOO5sIlLqis5gTNilcT8OIpbFLBliNomUnLRx0u8nTlUuY22oOd8UruIZJ+6i1z07RQv332UZODEl1qYSPSk2GoQNjX6Nlthk+q4audH4j4kTQn7UlKqmfq8P1iTsESiTHNdFeK1UnQey9BffG6JnXuPadOTkVa0PtXO9mqdop+KIfDSv802zISyrjoHnWmtZGvfQjPIWEctG5U836pw9dHyNohBPSJvZxjnKWNgcp3vWihOtQN8hqL2U7xtmPaWZ/O/78Tu04kw9410a7DUCyAM5xJjpezhqpyVaWqmLkai78eNMIK4mLy3meRk6g6njCPJZyTH2NZYlZ0+fQHx7cnnaQYqfJSkJbB3+cD8djVCQaueDuGAHBPjeQKIQISg6iGm+UqstPC3nvfS0d644QjHGf1TSbC/lqCp2L2JxNhiSnA7UinjrNLk33ZIhtoBKTO2W4XBU/fUO/DZriM4gkblix7U+9MbYmQdmeid3Ov5nKoUFoJj6jq0HbpRv3m4z+K4PL4OvDR3EGn6I8pKtvaTritaz3LiP/1i3A0sAib/nAbDQ+s70ZtoZc8MkreDpgshqeOBbfQ8l8RWyZQAPnk25xXom/ixPfIG/gwkSCWJKbiEjxh5c13ehRqGSvBcIGTl9dJxXVmlnessq1+8r44dlQEDNcYio42fi7hS7Ddwkb/GlXmC7AILppN14tjz5X/h97W+ZIxPVdUJ+ekX8ORWYMD+YypIRL3ky4g84wt8Mzghvdu88uA4q0WFAJ8kJjUxlGLre66S7GGzVlLYAywWec7i4hU1PVtvpxxwdGYSSvUTU6Qd4E4auIiAjFpFlvCMLHAZ135CEUXObU63XuEqoc+7KXC5bW0XYKllSsSlPpan80uNcquzgefuCRpc8vpBVUogwFMfNv/GtsPoKlaAReNPNxlu2ZO05dCdMwK022a///jcxnPJ371Ef0iCdlfLWNzV9w+Ua+0iqSFWIbz8SMPBGzdSLtPZB5mgJFh8JJIbV1p7xiVUo/kI3lqbp5dEPpg4s11Gwee0wQ+ATXaIGZglUAI/VWjtpukCrEg37NQNtiYYlcrkr4JFHVL08x79RvZ2gzWkNaR/8NOwYylps8AJ9ffIbx9ypyisiG+4zb9Eq9a8DL4t+9eoFDVOvIojEub9IvZ7Xpp/LMKzPReFBoOigncVQyTBqE9pMpXbTVPJr41OweLWPaFsNQ/9QQh2wOuWZjmDCx5PwJN6/Hg6pOAf5UOcrDY5SFmeiHw5gYRSru02YL6zItsdhMWpgXhNpbViouVGiWCvFfQfL9iUJ4cLG+FnwyoTHbvIcwHdqRGEw==","layer_level":1},{"id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"高级特性","description":"advanced-features","prompt":"创建高级特性开发指南。详细介绍自定义注解的开发和使用,以DataScope注解为例说明AOP切面的实现。说明分布式ID生成器的使用方法,包括Snowflake算法的配置和应用。介绍JWT认证机制的实现原理和使用方式。包含缓存策略、消息队列集成、定时任务开发等高级功能。提供性能优化建议、安全编码规范、监控埋点方法。为有经验的开发者提供深入的技术指导和最佳实践。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/annotation/DataScope.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T10:39:39+08:00","raw_data":"WikiEncrypted:qSUmbhu+RuqdVWUcJ+wGd4e+ZlhOlcU0FTi9snO9I31pFDv5klxFooIMNUPcliqF/M2nmJ8YIAXOaLMHKbF3NmYeq+661MVMJJskubGniC64s43dSZmMvmnpdHdBUbSTZgsQUKM5bnvdSi+eWIVVeaU6jQyBLCU2wAViJcMeeADBW+V5d4P5UQqKYq9eoxuf/+/FoOg6ZMJ6YoYI/F7xr2vOkHS2TK3uXu4fgcuwQdxCJmKvKMqW/98QmpBBRClWAhh6J/+M7O8iyLcPMFzfcDOA96b1v/UywRLvJGW1oZ9gRQXqJhGVJjfwQVNlRXffmOIhYum708jUOuW8/otzOHIHiDTeqiNlcNJcblztOEOEsjiS/eQznrYolVZzDOdKuhkmdUFnGOBYuRG598jZYr1IODSkMwVwgRoiw3X6DOxEhjnHjUIqHi3GsHcWKrC3OvsqQ5flK5oOTi0CUbQobGqydMbBUaSys8KaO+DlBlLaMYIg1uq4QMJtmDSeOWgshdjCFeK4VziD2CY6400yeF6N6UIapuUxLj+2JqlKmi/jo01BxoF3wAqsNXdUk0ehPNrRWhHeMkRoT20QlEr0oM1cV185z1lR+gFd5/oneg0+Ib47WF9A6Xy7KqXEbZAwmNi531Rw7sD/L2sTgqoRVtx/st0AW9vK0tjB11cG72NSKScvXgT+w6TfpPsARdgK21rOBotfT+wGx0d5GGk2EzFajIpAuO1j3G6CXw1TU9iBsAlpvQddZKNhqW2Gvci4J+feECsnXg0IjDo6wOJ/dmY2fa4wH+BTzWIqxC3fD7GxYy1GYdyM8F/4OKEtNaegzgExip9UWHO/h0VGlrSE/d/a198SKmTK7zQojQH531OeQPdiGprf7+zBcfui50N50sf6OgWyDL/tZkSBQjXdtS8NmKJg6Jwz4XGU6suI4OkddPswYC4a9cikZDq3SphJbW9gjoEfqbnXFBZxHTfNB7nEU9yqea/5o9ZaK5YjIbxv0ZeSNFhjNu331Cu3eJbwrZTp6raUg1N0sBbg5cfP05ZRM60QCfLkLUYyvLT+Q5tufmKQx7s9O7v6ns45Fn8mXSsPum7dDtFD4w5a3F/KaQgUbR3rdEQx299GcTv6rfczGzzCJXP0hNSOzcvuvgva3qkU9f+RQePzNbAot4d0BLaRqB5kmBWiPw0heJ89UwUn51JieaEc21Lw5srZ6cvR7OYUa0v+V0MncJ1w7ZAntjyLxAaMNbYJHOPyisP2jmlCQb48PAKN2oGgN64RYykIxTBcj0AH0LcUT4hhgS9Rle9Naipvjljg9QvXFMCii/JHRoO/DQ1Lj4C4hFAdJV2qaqvUQ1CD08GdLR5d98x8hVb25kbNClbcw+uVXBJcfNfEvVnU0IwrFehIKxBpe3bkKNlDl9y/JygRYMU0YCxs/+fcOeKHRubOv060sviQXAs=","layer_level":1},{"id":"efca4d87-f0a0-46f2-a4f8-67caa3f933a2","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"缓存配置","description":"cache-configuration","prompt":"创建缓存配置详细文档。详细介绍Redis连接配置、序列化配置、缓存注解使用、自定义缓存组件实现。包含部门树缓存的实现原理和使用方法、缓存键设计策略、缓存失效机制、缓存穿透防护。提供缓存性能优化建议、集群模式配置、缓存监控和调试方法。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-03T19:55:33+08:00","raw_data":"WikiEncrypted:qF2VoNuQmlFJjqRbYbbhOn1Gcpo5RLb2/0xjtWV+uzqzDk30tb9Rapo8M/sksKTrQuCXAIdF7thOcMPEhfurbsvjhdmhDDrwJ2rjR4prjndFdPuf+oFry+kI3BuU9ssEpzh3rV8ZEuC6UJ94oJLh9gYeADKJVV0h1e1Fy3bCeyEG0ThrgVYroYhZ7jmUvj377MLVi359qHNht4AzPGVaMmT5+fqP7DqSLTASSBM55nqXBi6lNZYXvjRafNeV9GNu5hax0ya8ZbZGV+aZ6vqNZgI3KkzvgKuOlIj/a6x9y99PgFipY23RCe0PM+htFOdgJbb6gKe/P5aTepvJ6xe8MrRK+9HFfL5ylitsu9GMwZO6ytGXE7k/mmdXcjs3p2Zd/EMDKlb1SmWbiRiHDR8AFXLRmeBXAgJ4aAAhyHaoI3X7kpJh2OyBhUxL8qacl7drmrI4tdsoGJDpXTZGN8Ut3ouWO7WL3NOTpC2+Eyy21Cg4xSyZXWqySZ/veStjDYvwA4ki0m5Xh9+oED8qQHreBGu7ruyAtgvzl7aB0lTpp64zyvdnSO5aDXcz2NlmlhP+AMUi2aCvbfNgfo13OEQOKplnajok3EwfNWXXR/tGnDqxSY6L4iRb+AaNLvFNqf9WxLTo8MHpwBM9uU2AaRwxHFVwQUHm5idtp2qoRKYO9HblGfoI7pJbaLvx8Jy83H98MkDW6Dr0VTtHSXkyDj66XLpYsVDkdCmKXVUm02l2704BuAWzDlMfS3z1tSWPpg07/wS5e61AYzXXM1kVw5Yd8zuSZme7l8y1C6jEy8dIhDG+nlG2aFqBXRPQzbAycriHu+UNOIfaYrt89UI4CBPx/bwSxvZTRYtQNIbmouy2+j8W0F1h4bWEctJqFXnhgdAV3h1yaQB/j1HI8j7atAjiDGiXlOczjCOijloVl8Vpn5NLUwRE7ehzSRIsWORZmf4bL555unx+z7VaOQCTeT53ZA==","layer_level":1},{"id":"3cc4b9eb-c8bf-4cf2-ad89-79086f5cf862","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件服务模块(crm-file)","description":"file-module","prompt":"为文件服务模块创建详细文档。深入介绍文件上传下载、分片上传、断点续传、文件预览、存储管理等核心功能。详细说明MinIO集成、文件元数据管理、临时文件清理、并发上传处理。包含文件API接口设计、存储策略配置、性能优化方案。提供文件服务扩展、自定义存储后端集成和故障排查指南。","parent_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","order":2,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/api/FileApi.java,crm-file/src/main/java/com/crm/file/controller/FileController.java,crm-file/src/main/java/com/crm/file/service/IFileInfoService.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-06T08:44:04.739267+08:00","raw_data":"WikiEncrypted:YY0OWFh8RMOtWS0p5fnjpHV/8ij8a4ki9H2wJm/G2sXNzJIPNcOpyIJ6gc5Uw69oVc0vq+gGh4m1r7Psu5enV0f4XnAZVOdynht3aro3L6HJvZs8lkjI6PnFbnueSgitsmIv1Foqmzql4SXZSjCcVAcdHN+uaj9RaB5o9JopCdSI4hkEUBkfIG4mpLb4MOQcqmwmjhWr5a3f7lh3HpfSMkc8ECvtsq9uq0tuSUybdeUDDyDl0wMi6NXP6BP4ANP4DhJPgB17Ay2IzWRGbJhpTOKgAQmhlCncVaps6Vs0ViYreTqT8EN9WLlKzCM619P0WDwlZqAU6zZL/NiEpRYsm4fHRYqqOsQczmK6hTZmj7YSsTXeUG4bgp0X8b+w9C8L9fNBbQ+4ipFhYLHx8hts2wz92HRYSddoNBlDKYXKvUpvJtES7xkXAlx96IqPuDaTESBq1Qq7oEj6QxYOCDjUsMoasoSlpr0m1cj3u8u7qd6dZN5xfoa9xLQDeZp5JaIsSwSlCy4xYtCyEDspZUnvqOnp2Q9iYjEXgJrtCYP90jSzYSNwUyyJLIHMJWHcMh57hG39DwgPI46rtlO6+wop6n/N4M+ZtO1B0H7D0yErVTDD76RaF/n/YUSkt2uNYhQUqHa+ytJF0U2w+BCqWoE69kBNPkWIXJ/kyJTi0rmwLQaHyY4g2zROCwgyW/9fu5ZhYxCXsuZN++kShlE/9Fhb+/Fqu97rY/Ugv2B0TXsIy6/16/lrT78j2n1hMxty5VzL/9K98AlpJ4Yhov0MczWnhlSu4GBWJcawYfwsZnGKHiiStKETIACXi9MvpsJ/PORAWLZ4OOENGe+GeZ/OkL3o5eX08iD9k8ROPf7YDLZUbZlW595DPWJpdOfhyMrg47AoxIZ1VG4UKHJ8yPC2GhKMrVZJF7b9Iit00iKLwOvKM1frfGeILDeLs9UrNsIZz0+6tH4ITmanaKMasekM43UgTsaVL22GtVdtbEj5jtBYpRK0BXoZBOfvm5L1xSiKSBKMqdf5DiDhHVPjfu1dyOklkfoNe2Xjj14bmXrMFRUnETz8nUUopdPNyQy8I66gJ3jQVSmPpaJZdnEtSmwhp9g68ovlYrku7Xs9NVX4Igg9Hv67igGLjOtuP7ErDKUiIkg0k7VQdoQooYtP/RMfVR4qzbpZJ/1rEbi8YyO20ACLYy60pSXkKnp7W9ABowbDZLAT/Ku9teJmaokueC+O4rWnVjEeIbmqW8g+LeYCPlT3BJlNwNy7Y05bYVJrPtzvJbcyGpFI/GZmmcqCU15BdTjTWoQrjQLtNt/Dib1G60sX1SOhhGVc2XaNW8P3iYMmEuZIllful7UQzW0zKzh+MflTYKVqbtQ32+HQAcsArOdNjdO0SMrFqLlwIACNtCsT9zzT","layer_level":2},{"id":"2d22b0d3-cb51-4b9c-8ee0-b4e26edb675f","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据权限控制","description":"data-scope-control","prompt":"创建CRM系统数据权限控制的详细文档。深入解释DataScope注解的设计原理和使用方法,包括不同数据范围级别(全部数据、本部门数据、本部门及以下数据、仅本人数据)的实现逻辑。详细说明DataScopeHelper工具类的方法封装、DataScopeInterceptor拦截器的工作流程、DataScopeTables表的自动注入机制。涵盖数据权限的动态SQL生成、MyBatis拦截器的实现细节、性能优化考虑。提供数据权限配置示例和常见使用场景的代码演示。","parent_id":"65c8fce4-7186-4278-af29-31083933e088","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/annotation/DataScope.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-04T17:15:13.3135414+08:00","raw_data":"WikiEncrypted:Zb5TNaG1u/mRrgPr+sDyCqgXGXRc8KJGye/Svh/7L2rqMTxPVA+L81dQEV4bKKMdN92fErReKwf2pVVL5mSHPQmDAyZi+3SsnJxz6xAIQ+B0PPNodvj3DzRlLihV/CuWe+uyb8Gd2w0H4rsZF7OZgU0nq2gJG/PxcKhgWgP7aUlVcrMQ3LSJv8WB9TOnEJPgdD3ig5ZKSxuxQKhsJUn128R4sZ7+2a4wrUn3mtQcjsghLkdjenrre1Pe/uW7hNnXZGZ1p8LG6tAuOgWLxE5jsiunqiAqiLZzOYUUopRePjGBpDgwTJ8sd8b7E/Ov0cNZMCtR7iBj0/WFHS7zwFOUDGV2oc5DAKzwSWdbUwVnoxtpim2q8XMhGvDDwC7mEtLYTAn2rIO2PAdYfPeWx+QbKszK7bbIVle0ZE1vmrxxYsbkEwYrZXglHAx2qmCTHSe5Hu51JU6zbiLBYcMj+dXCUEBkEnjsn2Ndhl/eFWi//TjHwTzVbcmCEm+lajJ58GkALUUosA2+l8fVAYGTwVIw8fGNjwAWRoRXwZwXtIJCVms2o7cw53g8YWQGiN9jeran/cqkWZkj81POFKohF296u+ngpdkE0w8ckwsIUKIiWxzRycdCG1hH+39EVziCfulTgK1jRjEbkku2mi4hRTkksnt3mZDXdNoua9LeF+m5JB5thJR0h9AZfqSiE94rvQMxwd2jVABMxj4BuSQtd68gZZ5O/dEGSn/G/NqmdJSXG07sFG/aX8mfaq/pjZgEXcRG0RNhqEeB8gSuQyfP4AlIzyiHmcEyNQca/cuQvKK2/vgXXrDnFQINacIxHpUtNF+cND4M204l9kyoJY+G/55E5/TQximrxHceteK/qFWnKt5kBWgidI7o9W6IA7AJc0nkrGDChPmcU/A4WwPuUo3Wv0tmZCmnJ+hJFSPrhSUQ7s5HgjHAhkI7T53YG6vse7cAe/sbXRc0If9pwSZgb5H6a/FDiSx/pxsfHGXHrsjPCYLl/Pteq/trrf1JwH1X6jqCPMCh3cjA2+2VwOKG0uIzPyHuGYYckn4D94bOZ5dA/9iqLuJtW/WvAqCFcTCy02O6MJ/+UMIZP3dtE02EtaWMwiHJxOul2sipBax2hLo3sInL2o1Htzy9v5dnbOepaYGatPU0RSuRNrmFmPRbIenXPjNPrw386I9H89nqYNAz+kcWWZY/53hBNApKNFjWCmvfsXDv1hANlYb+OLq6zhBUkZfinR1fG8MAWU0ckEHteS+/HpQdhbZHWWlnB7J0ChwkLShBF0W3SKWtdb5jdBcsSjrsvD+1dl0Fdg4gBp91fK4YmlI5IqdslmA7QuxDIWYiyznYYapYmNYw/irwwhEKUkD+cjtxk5eZ8cPtXL8qg9JLnxWktQTf0Zl8EGuY0QGARR2mkObVV35TBMUXu5AzhCQi4qCut8DK+tdCEfbKniudxDVo5z2D3hqM+luylyb6VrI1IJPXhs8U6+9U8dRGsw==","layer_level":2},{"id":"a1ee2722-ca15-44e9-b4c5-f8dd54e74819","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"用户安全信息","description":"user-security","prompt":"为用户安全信息创建详细文档。深入介绍LoginUser用户信息模型的结构和字段含义,包括用户身份、角色权限和部门信息等核心属性。详细说明SecurityUtils工具类提供的各种安全操作方法,如获取当前登录用户、检查用户权限、验证用户角色等。提供完整的代码示例展示如何在Controller和Service层正确使用这些工具方法。包含用户信息缓存策略和安全最佳实践,以及常见的安全问题和解决方案。","parent_id":"23dd7f77-e190-4852-b94d-17d2b127f16b","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/LoginUser.java,crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:51:10+08:00","raw_data":"WikiEncrypted:7GMpDAULkInIjOJUaNlZ4k4sWkUIXBOYPi45EYUmwrPFY2pWRKUikRVaXDdAIABtqFiyHF00eDZK38rFNHqYRbYFvselWhCvR1knbmS6vQYTLlWGuXSiYHE70LDK1R5a2LkxkcIyZvlUQFx2Oq+uqeqwuDhgJ8Nb/MTTz2BPLdP7TYJlYVI2Uwrk6kKxxh2D8GCthjmSDzDQDYUYk9vF+NWffAwb3OxJhJTbRs//DrJZddq3NsPRuvG1CCFQudoV2T4JUkyPGKDXGMfv9PO5XRV5MwaOLZAacRzFnjkJqbV9BNU5jpOYMta9k85Ebg/RrdJ/BHc2pqc+2izdsKMwyfSZLEIkMySRl0PT11XuqCXq5tQBFCRUhboqkn5J63wNarc4jgGE9LQM5cnooF3W8JPR+BN6WGvNw7bw8pUvW+YI6LKp1l0w6YGOYVrQ5Cwdy5Eub5kzRG00137jetpKGOrsCVFdqC/4GlyfIji77+pOfX9xRsD0r7hmVzYxQTmGLNFfUX/DQ371JAnXxVwoy+PR8OMgRzG6o/s9+Jh9iLFkgAcBeJ4zyKLXEethEbVMqAMoxbSGDj6BnJWsazjRHogBFH0OBnL+YLeQL3Chy0vKuOXL8f33fGG+zmvMV7UYi3BQpjJ0gSdKj2Q/Q5v3ajn0Z3asmwOQlAtKLi67jpxzjlQjsVL4Pj112anewuTznarphctAN6rL5AKnJJcjB8oGA0EpKeLCGgN0Coc9CkMKb2rl2bymt80VfXvHTPAiSZfZbcVw1wNJjybieSwuOJp7mh3EyN9/Enmk4TYUxREsU648ICYVp6BsxOyVOFbE7Zgl5wx+IoBLLMoRRe7mF3sWSuq7IA++J3vnglb1xf17o2Y3Xozx/Vc+CQSO1T2m13drqKVyXKcKotPhHLCbdzBFO9RVaggY5VNLVL9dzQlZ0KqjrC9idsju3CVvoMGx4Eb/ZsHcIlnQ1nqbcc+gfJzg5x6xNLqFzIohqmYFWXfg9DLqw5tt1GzeYpRdiEsLlaJn19dmNbE0vPQ6XfNFejxWEEnPL7xsTUpjiLMUzL3qZdNEy0NRfb/00znEyCRnQ7dlo5XsePu/KfKGIRo8ow+hnTX3FTzdJiIJ3Nedj4J2VW8njl1bV11Sb/dJHgw9jGLvSB5KLFOuE/X7Ak3RYa5xxI1p3vvYejj3TU6vSZckKcHsGIoG5dDIsXWu3fJiLTA8ZNzK3wLCSyBwaogfqpxE6I/O6FZbGiiQ1C6Y/MEia05jxwtX2GZCQemmbbo6","layer_level":2},{"id":"ca56f7cf-bcf1-472d-80d2-6e0b42d8e0f3","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"Jackson序列化配置","description":"jackson-config","prompt":"为Jackson序列化配置模块创建详细文档。说明全局JSON序列化策略、日期格式化、枚举处理、空值过滤等核心配置。详细介绍自定义序列化器和反序列化器的实现方法。解释大对象处理、循环引用检测和性能优化技巧。提供JSON Schema验证、API版本兼容性和安全配置的最佳实践。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/JacksonConfig.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:51:32+08:00","raw_data":"WikiEncrypted:6gHV2se05+vRhSnbu3WMw4KxU0jJVC8iMlh2Qgu9U49loQjb4k1RXosU5jdqrM2L4yjlxwHoquWYRwHspZZMFz4bv8l5ZFhp+jKFywUSZZGFJ6vstaFrfFf12YO8I54aCugWCPTu6Ak3DkWmeF37bqnr3IQMr3yy8aZaFm6uuYMQznTUVZc8juJhbVKp9/XyT57KHaLAwULHeer3X8JVBqgQiipy3psj8LHksWx8xE68VRlLBCjl9eRTuoBuTyTk1Usdw9tkr//c/CwZ2M1KbKXP/zl81JjyNGov3YCNifOCoduTaOsoak0S7ljEOL1MztXF9XdB9iljJW3IPWkYohkZaY7Ob7lfhn9EDhiDAOboj95mlMOVarYd/NkeHOsAHEhhwdpTpdw1loCOLnjo9Yt4lo8HU3HkgjreQtbrHlNQTTYtj5WGvccX6Jn269jFROg6RfF7yx/uagY1EKTbCmafTAVd3z6LAk4A/YG7KgHFljfafmOgWoaEIjXvNXdwswdYOqG9KbAGlfxQfZYEbzibbDwqn+y6NDS4O5udvYSf4/vGi1+jOPboxvllQXnDPUsTuOIVi5k7c7zKFuY185Cu0PgrPTmMZzc4gIeBEhy3+QKVf3e3jzhNs2nXim9HzP6xcmpqJn7FRLdG7pxRA0bKdkbSojrOSUmQZvQf23rsV4n0BbsfHn6i4fS8HClqffiEAaGXhBXRXzgOngF3Ul3C5EY/Knu/Y/O+EqbcYkzP0sQ1brcYC/PEjs8N8/vsktZ8Fl793NdgHEK4byV26SL4u40lKtWJ1/8HqTGSScFENfxZWZKc/R4/aURIQO0xjIN75ZGNfbLfTjWCRBbCcU2LOHZSN5uFlTaFkIIY3yyjF8c4nSmdehXJpgl5dWLHDQ5I7+Q0COo7xQgOuBNDSQ==","layer_level":2},{"id":"beac3859-3efd-40f8-bb6c-cfdd3d22cb0e","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"第三方登录集成","description":"third-party-auth","prompt":"为第三方登录集成功能创建详细文档。详细介绍第三方登录架构设计,包括ThirdPartyAuthClient接口定义、DingTalkAuthClient钉钉登录实现、ThirdPartyAuthClientFactory工厂模式应用。说明第三方用户信息映射、账号绑定机制、登录状态同步等核心功能。包含如何扩展新的第三方登录提供商、配置参数设置、错误处理策略的实现指南。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java,crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java,crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java,crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-01T10:55:35+08:00","raw_data":"WikiEncrypted:WxCGFGSl9zR6IDeUdkqKNG7ZGOiQN8xJ0Zck8his54pxeVD/1lpKUGNE/zAfWgzrvsZeg+WvYulWQVP4zXg8KC1sWV2gfDxqUnfqFZt2gGohZBPN0KdZHN4aX2pMTr4NmiaIEH6NdlFMa/JVKaxUCbilvap/PVygBukZoCyxTjoKXrcsqgGOPUfl66mfj70e7qRE2gQjmpcv3yDRH849z2EyhD8TBOlwqzRoGmTihV+j19mD7XPots+GEa/ZGtdY5Q6ON8k94hVDiXKY+R9MpIDbaIE01FoJoVkVki1+u4GkqhdiIRoNcgbK9KZdP7ciDbCjfGLckf5PNBvKUegUIrweIEcA/sjM/Q2ynzADGf+r1qbN+7fY8JXes+z2Jo9A+Z/kRYYEe5QrA6gan6PnyGx4ZHux23mkm7OCAOgBn6g4c5nzKg3nnNxRSRVcymwF2k5HfEHd+tion/DdZ/fKAaOSBCPP2rCnZhPFjWDALCe9GJcLV8sGjqgkTYpWydehHpZKc4/L6ZDIISCNQcx0NVBRg277krTymZ376ZhbgCJW7kquMDOElb8nu1BudErVnWRi+X01SErJoB39gxJSzI5H4xVGr2u75wgl6HgUKu69eKMfMwV1LecNSR7ICUVj4CzuHGKJYefjCKQmLyj+XgvsoHptCTWHVZvDqZ9Rxs0LETJWXEZQ4lunK9mX5/I7HsAkHikRFvgHTjX/zP+6zix+vDkMflOWjo+JqsT8auNZJ8tfXk0vDzU95Q51t6UXoVcIX0RbP9dEbf84DcFbIAiY466eEt14vXvJRD8EbmHgTc8N37CdTYGZGVfYyKUvVn/ZZanzZtcIfAxRiVmatZZtrQFU0PgUqfTjf2Xo0P3sZ+wVXXvnyAsi6qJ5v4Iu2+6rxZQ3QW6sH5Mwbig2LT4ItwG3TgF6u84qXAXrRXGDDgU0qxCi7EK+Mb6w9VEPg9Vic9AEZ8Vy75bXRf0iJf8DsJNoI9P/PJvsGCk9Gx00Wc8Mua7v/uJXP8plkBooOvBHcQ0rKh7oE5z8PZNCuO1i4NSaiwaILMy8gscIRKqwDZEtwQYH8ovfy64Mznwy8ujvh90u8N7RNtV0jiX/TMzILQD0uEk8LqGNMLq+7LMI8jRuCTRqWCTz9w+py5EeDUZQ4Z8Lz0kfdyqJRALRX+jw63ogQUcRZ+UoWsWdLmnBR/IRox88g1EaGlN3PjqWsghmVkeRcY4rwZ+Mt7yk8F611Uv5VmFhigmu7pRsgw8OpLJh8TuCBZ0SB7CcZ9WBmj7cbjyLrTJTrefUAgw5bDAAMzGt0aT8JnzReof3nBWqKgZsgJ6w4wA9p7d9U/zDJIkz50L+lpJn4ThqYGYQgZbd8bBHiu90B24iuanphZE=","layer_level":3},{"id":"158c9c2b-ea3f-4e40-9c9f-a26a2316416c","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"JWT认证机制","description":"jwt-authentication","prompt":"创建JWT认证机制的详细文档。深入解析JWT令牌的结构、签发流程、验证机制和刷新策略。说明JwtAuthenticationFilter的工作原理,包括请求拦截、令牌解析、用户信息注入等核心逻辑。详细介绍TokenService的令牌管理功能,包括生成、验证、续期、撤销等操作。提供安全配置最佳实践,包括密钥管理、过期策略、跨域支持等。包含常见问题的排查方法和性能优化建议。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java,crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:52:01+08:00","raw_data":"WikiEncrypted:8ebUGRa7qCwWfB8YHyDHESvFrQQaaYoCnwBeRxsXQ/pOUkfYcBJg9tanzNivhH85kJhj14qq1um8K/EP7sUILNwF7LDpuQ/bkaYZyJBZFzl8FcIcKcZgr9F+/fEUlBFkWHBMr948Ar1aYPb19jv86MeOiNk8y7yT2CP4hpuMGpUr+y1oxMxMP0fK3xjJ3Usb+fjncTvsmsETOxTJl7V34iOnK583UB+r1qMIwQmbkTQb+wl3pcjtpkN3M8bCpHXchohf4VY+vvMkedsfTIoGoX8EbqwbLlMx/Xq1FEJsGM3Q6IWbsFRUQf5ey7mUxc2Hzgu8DjbjMU2pFBm0zz57P5YQtkKSneFz55vr5c0Kl76K/t2IsDz4pKQQAHEy1K1aKspzR1Kkei3avCP+alpRkA1S/mGMPmyyjyOQKt0H2Dyhwe+yoHSVhVfXQeQ3qOuaguikzSqhThhJGLoNxgCWtpKO1CG0qedMMkt3pA0l15ESDgg4NiX+gezPhUhQmeCOm4mUOL8tBdib0j/DSL0N0geyIr+ApequwPEw2Fy/0USF7PvMKqsLh/JqguqzZDD8k8waugxCSqj0ef1vHKYAeD+ZEkerTqeYDQw3F+I0RJi5HK01EIS9PbJCsZP9RzEc/eEXLFVwxLOClkwW+LgPHCRSIy1/jz17cUKkVfphWXHoCpHEo9U+azZxaIuLJrA9ED1qYmK78wq6TbZbXK3G7sapF0+26mMhJyndH5lNIYJXMPwk5KhNB8cOrCnQKiNsG53JYLYXMt8uOZnMDFSq/cWBmCjNm25gsU1wd3TWGB44oRyC8SCOy2Pax356YHdfwBdJRE4OXrsh+Vw2SPTsfAJdjDYB/cmIV3H/a7XBYErcuGa0QLNIOSMhQM6XfZcKfEElia42DEFsCNop2+SCCg7qpWto+gnTRo9G16yJ6/RJlbC3FCk7Kj6nmMVbXRFx77T4YL0H6ZK36biRMLlrfklNt0sTMXxXWi1KXU/tYiovNjWO9ulF1eAucA7MUtDpayaqEkaz6Yox5FCaDh3xLN+CqKbd5t04ftQws8kxWKE2catjg4E5ohF6VnKQiF2r6wt6U0ikkFSA/b+TOSVTAvfBejO+11upMtQX3pC6nuzR5yCnfdYJ26cXk8zIK4CRpcIbC6yZVIWo2uUOHurlOJ4b4GEL6iYXFqLN+z6FyZPOqWyOzS5fBUxdN+v/9MDWioihCQUp6BqBXaMW9SmN3JTm/4XNdEZnBRKWseEaNczsrTmZxvKjgrx5eHSNWYOOGycYVWu4wsEK/+6BuZ7TFg==","layer_level":2},{"id":"0642bf0d-15ff-446e-9a9a-2f43a53e7d70","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"异常处理机制","description":"exception-handling","prompt":"创建异常处理机制的详细文档。详细介绍全局异常处理器GlobalExceptionHandlerAdvice的工作原理、自定义异常类型BusinessErrorException、MissingParameterException等的定义和使用场景。说明异常分类、错误码规范、统一响应格式。包含异常处理最佳实践和调试技巧。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java,crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java,crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java,crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:56:16+08:00","raw_data":"WikiEncrypted:RgZcxlS28ITmDGf4sH7fKcx/KKgHynIcKtHjdIlivuGYmPqvzEBVHR01xnhoCJbxF6tU+oaFpWLe7rbeqY+Zoz8gcM7OdNVIBtrMLKyfxRrlyakQNvAAnTChr6Dm/JL2pbb3X1qA4P8xiY0UHjAt7Y4hBASvUt8GcwmNTaIEXNvtyfrAg+CnZiIF5R9AWNHQnVOVN/JBzCr0cjLWIwuaMSLmgjpADKfkhhrTPZ51Re7z6O/d4OSp89iMAKKKPfd6grxmUs3L19D9WtPx1XQW4MHOqyv6HLi04VE5jjfk/euEoxu1QFpIf5Uu9iqLkEdj+cYcfojzoW9jS+aiN2MK2ayagPJAV0hB+lf21cIlWRrOb9n4TGi5jX3jDW4H+dnBGuBygumWM1f0+LBtPxTLQR21sUG3MMgtTmGcoEJYDi6WIuyyyI3Zujkpn5uCApCT94kT7OHZgeALAqix53mHNg16VxtDrLTJ36UFO0XoAjwF5ujovrleDD0uuNqwV9lordmU1fE4faYLjM8c1GJjbJLeG+mPAxWsfO7PlDdy31Bxg01BYHr15NK1yk6u9/NZjpD5IcpkHv8tdh/iBphJRfXvTcYGKVEmVegI1vFb1kfK0Ozf6cE7VDFzXshILV6nzN1jUWMvbdAe9hx50Udkh/U64m1XvfdL4X0fQcSl+Q0zXcvHJ0BrkHfXt6h/hdDut04GjdNx748uU0ecb8AjZB7wxKXaP98MAopvklgKaaQgKgtkXpZL662OXTMoazKFfb5YUXmitf/TiD08QMDRBHSAF/il7hDg3CvZOzdzujmNe5+oOhntuVd6oFZCnHwJd0Xn8xPOuSYPw2Pqu45HrTISFB9FmtjihEOTt8nr8hJr637Zq7GbpyWdQQjdgAPRXYmgaaPmq2E67kvkiBS9OTQi8Clx8VOpcatqRKl9PrArKYQ/bVSa+pgfLWVrB9+cWWb05JpKj73Og9EOQHumzw9tq4+j4nj+dL4PkgAn+lhjWqIU/wFAMyi2aDXvqg4QpwoIboinEPvnpt38cTnOSy5TOfzcD72o5mSpAXmpTuv/TjaJb+VOglK6lMxVulozUsjt3T31cEr/3cmyDJS/i0NaQcr8ooU7gU6QcUPIENJF7IS2m04nBuHfkEazyk9We8vLHje163Nt7SQceIvtfVktC9vCP4nrsLqbuq52mL0i2RL+cLf0z3yemu0pvMgAzNtwg0HXWjWdiEyiJLnX6P+X+Kbopu+k7FN+916FlVTrmLemf8ElKKDoaCuZewHx+as+ERnCO8ln+gf47TpPj8gbXRfxvNX9B4L5p/8uSFw4Re7Y1LLz4pyRh4mEYVBSRJ63rHkf8j2FJhqfrTd+2g==","layer_level":3},{"id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证服务","description":"auth-service","prompt":"为认证服务创建详细的技术文档。全面介绍用户认证、授权管理、权限控制的核心功能。详细说明JWT令牌机制、RBAC权限模型、数据权限控制、第三方登录集成等特性。包含用户管理、角色管理、菜单权限、部门管理等业务功能的API接口和使用示例。解释安全过滤器链、异常处理、会话管理等安全机制。提供完整的配置指南和最佳实践建议。","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/service/IAuthService.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:27:24+08:00","raw_data":"WikiEncrypted:BenkIlLPgjbiADCpekIm2EVwPUhkZv1UDZrM+ivgPjmqjjCngX19I+dyhc+fcrP75gdExsv6I+8pMcGv/504P67NHQbFaSNd+97P56DqZ3f+4/N8gp22O+yNOq57ZRqDCJkD/m/5NhtIJW5SRgi9ViHauBuqWUNhZ/rGdp63pjL9HV2OMNrq2MsazHXxL7s8MjxUaxhysusTKnafDfNNjtrmfjdd9gTKe9jXMk8v8BAWny/kCjoh6S1Q1p3yoE733B/Hb3W5qniQmv5Sp2wTGgjH/0T2qLobM+6mKJKhXdjUoq3qVpTW3hEgKqh0MSECJhPAxIGr3tyeWimuEQfhmFFZHEPSwZhCBnR0kkzzkTL/NOF8iST61/Lx8Uhv7K+j81R0TsLBaFqXvdaQE1QFIJCHUB/eL/1Yxwzl2F0frxBCCeRGUAABAA26qqKVOPF5yzVxjJ/n94SC0tWtZwoux9duIwqUeIeLXVaGnJ1jWd8Ic7IRW+TNuMseTz6gcnsh/7XykueZNOsQDyg9Pk2urV0Q3hpB+COwzETbERBHTueRdQMi6r6jp5FuMTgb1ddqgW7yih6bEVBD/47OQUnFgoLgvKsN5PB+JHrTNmgqbUIZOoyVmFCbPGiWHZgeVYAvwrPP+m1sMpmOk3kFs0DQKMI9ashw3qKtnOpi16ilxymhNf8fuDvMLr5NKK0+Aw+Pt0RM2FKe1yiEs4AOQenS2e4GJFxhoDMKystUSK7FSi//AeNBd8E9ylvDLC76hZoqYUgiyKnyUXWFUDZFvmAcXbjaJb+V1y9xQGOO4aq1EWyx3n++yhWeztJQVf+usFlsNsPCrwuf1283VaRwOBETfiVx4Av4ntUxWeNFS5NqmhQWRHQAQvqMKsqRhWnuwa7VCovLEtdbulK2AGwZwkJw22PlwN6M3zUx42qbDpGUN55yXRm03KM8dmmWIdi25p04ePAr+DhGxJXkId7hov9FJzNIlHlj7t2P9MiVdPm0wO5ECEEcOsnbLH/wdfED7z9bHQZYTcUqn537l48GYezxc7nanwB3AQKPPMJZWbkEVZsJod9wn4iZWFTZNk5W4q/cUrantNgTG30WHpdzyaapfNcoKJh2Xfq3pXMStpjRFKc6WPEmqhfzEpiBPLAnG3nhSF/22ZgCLycYnxGHmOYVSPY7TGCFiwSPORYLv74etM8/WzpWz0bPKxVGsoEsjVQUAzPDg7GhtbouVPiFtsIdyVToG7x2Ed78ggdQYXBKBZ99ULicsM6U6v4st10JRag27W41NsxpYbXSudgshL6Cyny0hT1kdnawB/hdI0T1k9n6Emy3jdWbkxIzNZ76vm3H/b3NC6LA66duYJ1EpwATJZGb65zSs07V1sV/B5xciWYfJ+yrUxic0EUJ/xBAsfIrACNljnz8kWeMGP6l5ym59w=="},{"id":"a131dbed-4290-4582-bef8-49b15054143d","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"快速开始","description":"quick-start","prompt":"为CRM后端项目创建详细的快速开始指南。提供完整的环境准备要求,包括JDK版本、MySQL、Redis、MinIO等依赖服务的安装和配置。详细说明项目克隆、依赖安装和首次启动步骤。解释配置文件的基本设置,包括数据库连接、Redis配置、文件存储配置等。提供常见问题的解决方案和调试技巧。包含基本的API调用示例,如用户登录、文件上传等核心功能的使用演示。为新加入的开发者提供30分钟内成功运行项目的完整指导。","parent_id":"673ed306-0e91-4381-a45f-07865c6c3582","order":3,"progress_status":"completed","dependent_files":"README.md,pom.xml,crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:40:06+08:00","raw_data":"WikiEncrypted:1aHEw3M2aeluf1++NE1n1HTCzLNrSYNKzc2IVp06RQtbuAYcMEXChpU7tJYS1f3O0opR6Xc/vB+l5keQe8PgCRMXTuFik+f3C3rFcP4dXnar476ml2xcaJkPDVPrG2IY3nGMxgNM0xgn/XUv83MjUsGTLoJBhrq8fcalI0KdODjCIQ4ci/FmE5LgzoB7PMhgzR7H7XYD3sE/nW36F9h1CiYCUVKV7ST63v2zNrjv9TEHmDxkJv59IGh7xXHvH32NEmYBgKf9EmMaZN3nnFiz8GVmbRLo6iYtiN7sEix9Kc5sQWFYWF37eYA09qppBrInO3xC783RLudu+33ECt7rOAxvW0O6BKqUykkyUWkGdNgrn+NDjqsq0iVe40cpQH8g2hLC9nuZaqKw6gedybz97+rHZ5agXbEcig4TGQUmMsY/2qNWZGv50UWiGiXZ2JF+YC9ACFvT4DWNDTMk7GDCJHnBRwPfb3KEwNTiRRO8J9DkDUZziN/jzUjjnqSj8A7SKY3byhqY8HvudqffB/iLpd8yJZhj/4ONHrdth5tQVb/IPiXTxU6rT8QN7A+TA582MHdOu47b33ifZ1d+pV9BP9F4gcEfya0hDsSYA7CSW1+DqWO0T9G7gcuqE5FjDYOf4SVegqU+jPmii/dE/WdbFKt7pcxYF3C7C7LlllJiifeEH8DRNUF4djcC4Z2bjwJrMDLrg5LtCRp/yz9Jzkq1WfvHzilYTyB7iW9XO1pF7vQhJJAhJBa/X34nx6oiG4RtenWlyO0/5Wvudav8J/kHesGEfIk1+0S/0VhuFG+HhA8Nuzk//CBloOWoTDrEOSsBftfWRQNUbNBNSFi1kk//gCRfQ5ijIw7gVGDn6bwKRPhq5VpDX7DzX81YCTtRs+Uu0/kNjXpJUwV3NxAQD/ewv/GIkYKiBRh8XyOuceAy6L3OlmNKoLj7EK9hSAmSSWTR9KXxzTNgekMSb4JRete0RXkw6SDrRyWIEnZ1Qd46hzP/XkJEqivT/H63cCKMYBMRex0JpPWOEDmscmgwdnKrzrEdUN4M2rj7PDHCDiYYgyesosQpwNZRE88r/kzKdIrabDBSvY3sG1zqqzpZZd5sf4bAkpGOU7RfF0A7JCQEGuiSBj6V51CGftxLCQAP0FZaaSE2nVlM9jVxPm2EGZxkQM/SZJdIvE3eZrCKnmno4vtFqdI4Abo90LFLd2teITMqJ37e6pUxav8vKFOp94Ig+L1IojbLRnSU0IwnqtjQ8ERKrh9CCvGKjOkMTfz75Xg8UUaB4ka1ZGBcZwbV3WghynxCNFgwQXbMKIAMqbLnF0bniiBPv89sIzi24ft2M7Ga","layer_level":1},{"id":"903509ec-841f-47d8-b6ee-ee2e202b6d4c","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"缓存架构设计","description":"caching-architecture","prompt":"创建CRM系统的缓存架构设计文档。详细描述基于Redis的缓存策略、分布式会话管理、部门树缓存实现。解释RedisConfig配置类的连接池设置、序列化策略、过期时间管理。说明DeptTreeCache的缓存更新机制、TokenService中的令牌存储方案。包含缓存架构图、数据一致性保证策略。涵盖缓存穿透防护、热点数据优化、缓存监控指标。为性能优化工程师和系统管理员提供缓存调优指南和故障排查方法。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:40:30+08:00","raw_data":"WikiEncrypted:6+tjrG+VnXc4xk7AT6U/byJwOxViAkFqvZEtcR/8QP3UxPJ0HYIl/rA8bKGAlUL3bGwDrYHOC2WeAZQf9gCnQ9tjZd/DfaHvHz0rfqkTTJBwvAFDpwLuaoY66glZTK/vzLXfhlXVd76+Ry/BrYcmAE0BlIlJixKWlLcevNR0clGgCYfOaiWUnDJLxOTCLGM1/NOkzL/Gc9H04dC3iXr3egIBRkEK3qmGsZVlRv/VTUFxzq2bSM9sg22pWDtmFfZcCjUJwLkr1fme2LyfGdP/qcv03iHzIcRSpI5xpPP9G82aUR2n8ajzAPXEnUIZEsFRRsJJ8gDmv/czDs6tv2VkL1vvykrbiakQRGcWPL1fx1MqsxcUuE9aOtPzTauN3mwDWZkVsLfP10MnGCJqfRgtCBQmfX7a7PMLGKnf3vXKofBEntU/Q8M8lomIEkw7nz9E4YCJvY8NNp2wEwMIXzE6asGRvM3X+ntBJfDyeCPVfX3hMqoPb5pzjscB1z5bwYbWOSCkNPkMsY7PhUEsZMarRm8wBiFOxoX6Uadz6GY1HWVwW+H+WDUmxcjcPnh/UmalrMPqYbovNpP1aJV1v134ogDpRjsRFWnfEpLRMWis8Z/jpoTh6FGItqaNQHNC+DLLwy1UGdGcvee7mRl8LPk//atAQUPXkPQwcdR8T6VpBmVxNEam9382X45Ifo0B1ZWJ0YplE1VgQuWq6YzvAqNlB7H6C1aLe/StH2jltXI4dcc3Vn9AfdkypidNQTPTdjKEY7qfE10IHkSBgUEuTM7wVN5HfBAan2Pi7VWc94YCgQb9Ax329W8osZfZL6dVoN+uwffSgWKFMJXUqKKySzvBD6TA/ONCISg2bxPTuyiDr4m1FYAwA/vuyu/dhU5SM7gZRN5NcLNN5q2GpQ+eJN8ADylDfjQVSXijNF8/RLx22eE8n0hpr8MIL7MrStfLBMxhDdpE43z1xBEwhXX3eJGCJ2CdqLh1Xzx1SZRUQXbpfaKh2GsxU0mE+jFSIubHO4P64MgTysWmChQVlbkW3IqP1sJw1LjLGbBZvvHl6lQEfgKj4j31s4F2zf/5fTg6BFepeBFAXqFJ/uG/L/DHAWhoE4eGEXwScFGr0MSwKJ3mOGBGuV2R7ArBoZtVdSoIPqwAtNOVq2eZ4olufk6QbTboqXByRuS4fHYFCLJApVGh0PI/VN0e4YOY5ljVyUhPdA4IpNBaYE8otmu37M9Uh+3YGn5b7JX2X3fzc/aYD85bxela/Gj37jZA8GKmGfQIS+iSJE9guD3TCCJPngTqIPZlyzkuUsas2soUQMHW16FrfMyTn/8gI6k7X4ohVGVOzGM/AOkQYAmTdvPoYyOlP4bd0g==","layer_level":1},{"id":"e8319196-8371-4fce-8507-3ce68e0fd862","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"菜单权限控制","description":"menu-access-control","prompt":"为菜单权限控制模块创建详细的技术文档。详细介绍菜单树形结构的设计、菜单权限的层级控制、动态菜单生成等核心功能。说明菜单类型枚举的使用场景,包括目录、菜单、按钮等不同类型的权限控制策略。包含菜单权限的缓存机制、前端集成方案。提供菜单权限配置的完整示例和常见问题解决方案。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java,crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-04T09:27:03+08:00","raw_data":"WikiEncrypted:SFq4naTIXfRmvCSi9PrDlS97tSpEG+LKZREhhwLzTBYkoSzdfB3zS//OFuGCDAKE+NY3HcWDImN5jtY02wCvu2EDo+uliBxYhUcRUgq1u0V8TJO7utPBDaUQK5bmSMLxWQ7FKRD6f/IqubwZh1ZG51BHw/ILfPEfv10+Se0QCADOfjiRAB5ffHvL2unZ3fTw7ru0kgtdCX5Q+y9AyLKs0eNBt7D3SnfuQOvNhIOsASZ0scb+ET6s1MdfNexuV+NdpmtZr3NUfzlP5CQ1wBaWaTUWbnlgy5TDbDFUDIVEHSeVQ2lbSBCUk2yA6TOPxh2PIPfFr+gwnc7qViBI1JPKPUluu1MuuwTjilYr1gEEo+YPH5Ar3xx2eAQ8gbXnHQU8ODSV5KAq0O2onJB50G7MTSeVnXu53ANs/euc1YffnshBtBXDGubA8ThNS5i9LxNpGVLqLLxWWLq0nvuhxIfEIm2yUgM3+FXZhfIdcIkYKos/oanY4uBmDoEixOa8J6jA9rnHcUBE1Y7uTIlLaLvT4EGfu69CMOu583fCQux/j2M+ImFgqT8VTd1IkWl2EO2KWItRkDxSSK74rFNaCeasMGev2HrQZr9fSDLhp8CisSOi3RZMRLDp9Kvs28NWUCgOWKXxDNGURMjYZIYXQ1vWTSqg/Hyn+7YZZcPomhHPsNKcaqTJ0GaRI8sMh7SeHNHFFhB4m+1sqSD7pJJXBitne0OeD4sLe80ScEedi0ZmKN7ooGkdrE6wfyPVJcIDomO/AfULtQ/FFcS8kOY5fWHtsHYxGZxeeLhcriXNofmXeisAAe4t997+yovaxW7IQIl1dEoq8WzaHUHJVsdakiilqZJxemNqBw5egLsdvzmXO0Ac8Rs5c2Ev4IuiGIIOcQjwl2IhfuSpKa2QT4Cwj3zYLaG0fAiXRhUM4/CwrXcveQH0zj4EEm3+DF7OyW3ZfxMSdF7DYnAWikTIlvgfVCnxj1hSNdzt0370SB28y+7NqZh+l1myQg9nJoR/xx1z6Poduva8lhACd9mKAHmgDXCKfr3H5+B1UE/9+0/2kWKPbS7sYupAf2FblxfeYi7khcirXJ8NtFrH2i81AzwpAmDaciWLClv0hweis5sgK4HZVLHgqL3g1ejvdrUanIZMN6hdWEtmAV0er+anzeCSwyY8fgwMG82Tub1GP20eJRwKWFHNIz2Gaz5kvFGNd/22dYedq69Wr5YJpHseaaPVZXVqp8n0Vzm7LoLY2R2jlsVPSew=","layer_level":1},{"id":"45d01f64-96b6-4edc-8c0c-d25d7f250025","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"任务调度","description":"task-scheduling","prompt":"为文件服务任务调度创建详细的技术文档。全面介绍异步任务处理、定时任务调度、清理任务执行等核心功能。详细说明孤立分片清理算法、任务状态管理、失败重试机制等技术实现。包含任务配置参数、执行频率设置、资源监控等运维要点。提供任务日志分析、性能监控和故障排查指南。解释分布式环境下的任务协调和数据一致性保障。包含自定义任务开发规范和最佳实践建议。","parent_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","order":3,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java,crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java,crm-file/src/main/java/com/crm/file/config/ScheduledTaskProperties.java","gmt_create":"2026-08-01T10:23:36+08:00","gmt_modified":"2026-08-06T08:43:59.3664927+08:00","raw_data":"WikiEncrypted:VyywLMbCKto41PC5aDsBo3QtOdTacjy++/nWpGcV6hovQHAU0vfug8Gi3WuStFCRAN9UBbJNeA5vkY2DpjePTjZ7e/Uoa/iCCiQJlziRrWNAXtU7gw3LOPP/YQfOmRFXWgTXJYd8HfOI6gd2hY0XzzGlb9m054SiGtNHx4P/14Weyg5jRpUTfn5dAA4xTqLaOVOegwp2742pCIxPPw5hcWl0QSs7m/vLnZemA1XeTlBNwLRUxxX1O7sG0zrm401aunJbMcRVdx2ZhVtcyY5yKP33xRkXE9uvQWmo7albIr6bNXbuPN0MkD31fdM1dsThILE1U4hlID9Iau0pCmZWajREzxnlFUodwUASrQm5ctseOfj3WfvDcuXyIj2XOsFWsM4WoCt2uqCP84I8a2LRHJkg9shQ/bm7aYdORCg35lOFhHb9ydjCBiviPDCzF2DswwuvvShTPoN3SFp8jJW6H9K4yOL/sG2Bh1unKPpIruBHULYh9+aY0YVifiBUkucNoe6+rUdT2LDlNIHCnv2Goc6ti5OR+sUtiNXGqTLuxyOhBfqJYXKqLE5BihWH5hFP34E6gUtLPFBd8hBLRkS/fCFmc3IFJUwwz9mrQIVpP0AwiD/lKu9QXOHO/jkFueZ1fFm7KSPIu4FXUEF9b28mko+DhwAk/D/7jsvihRCy4YlPOJ4u4nyYWN06Chl2iMt3Wk3UuDNg6joco7CAxqiBAQqXKxfry211ZFXWREW5pvUAcIVZ4cwUxujq1m1CQDtyGSEKVZszbgZ3X0KHKobaNj3qOLNCAHFJ7euY8A9XDEnDJnR/ARaIX6DnZkXAq4XwyDvtxBhP8n1Tmkr7TgAR71xnI8nmj7jiIM0f1baU25cFGqkHIEJPQszas3Yd7ptI5oPKlaygd+sLiV1N0wahadCqFUkL1N4WqRGFaqkc10ldKCw0BYYz6T+GJpGrh4N2SlVktWf5rqAqqBp69a7FwsYNLd5Fe7N1ZrP9QurxsZZdHpanaTmUDf28h3CJXP8ib4rGMxAfKdAYLka9nv0yIOsxV7ohZgVobhjclaloQMG+6fo4ZwCkCcgBMbi/h3TSctzyOL6OLyVctCXzUmIfsi02Ee8pujExpEMTrNW3ifZbW8M7nQ1rfysUi/f1AS5KoK2Wo5K4rSTpzbqnBGVYPkNDV2fOqfgnfCP4U9fDN96uvv2r+2PjP93ZOyGJtIG/yLYPnCin5EEXUhFwm8+2Cx/AMQj+ETfjXPiQlZvSSVs=","layer_level":1},{"id":"23dd7f77-e190-4852-b94d-17d2b127f16b","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全框架","description":"security-framework","prompt":"为安全框架创建全面文档。详细介绍数据所有权注解DataOwnership的使用方法,包括数据范围级别DataScopeLevel的配置和数据可见性上下文DataVisibilityContext的管理。说明LoginUser用户信息模型和SecurityUtils工具类的常用方法。解释数据权限控制的实现原理,包括拦截器机制、SQL过滤和用户权限验证。提供安全配置的最佳实践和自定义权限控制的扩展指导。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataOwnership.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java,crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java,crm-base/src/main/java/com/crm/base/security/LoginUser.java,crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:41:55+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9Mk5ENMwBNs8bYHsIou70cUtyXA87LqLVk2lGpimM9VNgS+fEdJfZ/zZ1OWWkz/rPdyL0faHgubND0uwMd6GI8VGXHmrhglDB5rLmS+JkST7exqp2W8LuD/qr6jQ36sKzALpHSJ48DMdNT/kwUequgbsylXkbav4zhJl5sHD7J1zJb8CUVFGJNOB4+J7NmAmzvyvWdaIoOMkph/TR5oP5wsRVaEHNtR1QyU5t3Mn2UJ6cwW6yvt5eMGXaTROxtUr3HOm2sf8rTIUtBbL2kpgam6Zi09O6KNWEY/grPeniuqzHp8xwHABjxJ5COz7x5HwO7Tb+GcjHqqyci2h0cUty9PcGKNgN+9B+ZkTzOaset3pSIQREIxENXemdDuYbOK3AJl5ul05sjG8hPvesu/7NtKLneB6fgDhk/5TjpfFvwKSA89q8ad7Yv+wuISjNrA3NUHn6aIqBAlpsbXS/HD/ZIbRqxXgkkeK1kpP2NTz3zJlPOsbHpv8fUndiEByhrYonNryJ9LGllN4OL6d1tTEp2a9tCk/qOcizsFeHY2XHIpebmZpsz2GE+xTROtJhmfxw8os6P+5+TWLSfrlIiv/VTmQv2qcu2XqLmRkSH6paXfwvbHIU1O2irBJd7lhvomfzTN6c+/IoCkFTxpwAuGGN298tm0ixlhWCQq421ogAL8ZIiyaVu7eQkVH5onKq/5mElaDSqTi5+5NLuaGBbOcQHqKL/0B5kIdOF+J37zKnehvSwQYnfrTxhLt0z4JgnNyYdWNQ1phO4JNKPiHNUoM22TtZRgjoxNrzuRXFd86qbyetOf6dcD5H4scCBR4b0G1XxencC4QGO/0TZSIS1QtztDTZ+6W/mMOqSdmMAXYOdwGJh198BRFuOwcwsOBrHE/kPF1yUv6Sz93JQ8ZRIXPNxdxFpsfgf7qIucIH8tgKYmbX+Mzgk3MeFPhsgWdu5pU7K9mV6sm4pBV7e5lDL3aI/Ywnoe0e6XMVANtDBEMQ2XvTrSFbAGZQznYkzhEG226JatRHd3EUhJ9A+RUB7y0oSMbvScdSS9TqE6X99Nx2TTH0gM94r//GTa2zxVpSTBd5gKq4fDM37niOZ7taz9fZWRzNnCbxTd2Y1p5pkk+gB2J+D1Ol9/sCEyv+T7CKFPgxbUvgRm3UT6dVOAmov43X2XbRO4xZMMYbU2xD5wFDm0YiO08XfiL2VrZ4t/NjhvXMX777uuMGybca5+I5o8VdyAPr2NS/gjskQFDKd0RMHydchmmrj4xTYrYNfevYkjb2Qjz1YnjIhoa8U9rr7WnW0ZjaXgfSuoX/90fetw+7MIIzkTDWmS4PIaQHC4ft5JoNqc9IcgmN/i/CGjfT4j0UtmhVplAPX0/Mx09i2+mAebqcKi8GViYbvDF3Ofg6BZ7HLUD7Ir1PhvfAEn+M1Qxz3+PTMbwrpSKVfGn9whvZa2JtO9lcdKssFk5balkjBOSeqQSKL/xU1dE3S3L4p+k2QLj4HQXKXyp3wIUpscxdL3yy16go+/cvcMk0N+PD7mS6iOw==","layer_level":1},{"id":"ebece36c-dab9-47b1-9a6d-806b3c1b1afe","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"基础实体模型","description":"base-models","prompt":"创建基础实体模型的全面文档。详细描述BaseEntity、OwnedEntity等基础实体的通用字段设计、继承关系、公共属性。说明状态枚举、值对象枚举的统一设计规范。包含审计字段(创建时间、更新时间、操作人)、数据所有权控制、软删除机制。提供基础实体的扩展模式、自定义字段添加方法、通用查询条件支持。包含实体基类的设计原则、ORM映射配置、性能优化建议。为所有业务实体开发提供标准化的基础模型参考。","parent_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java,crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java,crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-01T10:23:46+08:00","gmt_modified":"2026-08-01T10:41:36+08:00","raw_data":"WikiEncrypted:EHSVcmCAsQzmydGtOOwq3eXqisSzFG5zC6RV0+TxohJWtpFR++fWGbwd7RKkm7ijzlunxn8liSNolC+6qq7/2PfW+WiSzpVtfDaLa4+1QGJxYLjOy+5YTaGScR52NSC6Rt4C8H8aLPitoBXrUwik1P3Wly4GDFWbttXgZXfup6zM9ShjP8QQxAxHRwOLlYeNAXF7k/ohyXoGey0Q8TZjtM0kCumPWAZAlROL65wpA9ZkE98v3Ndjx6T6U/+q6ly4mAlY5U2m7tFaKaA/wPj2F3RKyqB+J8GJwMZCqzKSNHgS+uHR0IiTa6LtajP4Cm/Ly3XuxT7hYNbInhNEfOL9JBoS0RHlXGvkpBXsSLBQC32Od3fLT5KrE3/yVfPqOZwO/g26P2zaGq2QIHNkGiyIArCVVzhsmG07x91HuQea57XxxTO2GXVIoAwpmc0yR/yrXqqqDL1VWnwGo7Pw9hCkHhHRen/dpzRXhXN9u1TXJzwxQrN2Kkrku/KfupyMvnf8IdaFWY9W26aTHBjKaJIpEyRElBl3ik5VRYsXCkJEp7N4Ix4j074qGf86NgFuhnd5Wps6/XuplPY583YBahI7x6BNFT4qqLsIo+y6tRzxm5vpUNJSqJ3JXMR+sefLNdNdhHLefpinEmlzunBxd6y5J6eH3CuhcX102e3gLz3ayXbZ53ByZriLQvb8X5kMoY9sYjSNCaKX8GuhXjNNnxJx7uQSQb8qTtfMo4OSgadWqEvM7TSf3LETGth5CRrOENDurFz7blWD0RQdZVKA+S6l/73Fso9CAI7/DTBZMxvfGdugBaxOpqazgDnzkZFJoJf3HfubwQ4K6UTtQam29gzU8XCMTOOr+KXp9xeSvpaQV3ckQssHJTyPBrT5SGEEvL9LevQfd9f85jyAIDGqZDv195cWUGYCq1krQcTPu34JnYhoe49hWanpPtt4OXi/J86ivGtCZhj9/G1mJPvIBBPUDY1cHxOkoCYYM8veNgofz5KD69d+IRkPKcJYVZQ0AQg6xT7APMuAXS2ZDxzjjHNJUILDkE21tt+AG9J1AkWT+CihNHBiIKGTjgYp4olA7DfHMVVwiqJ0l+gITxX67TEBSxvjDkXre5ttpEOUZJkjLx4WNPuynO6zZIcZP4zIlnoAgw403FTOHYe5VMxV3trBmaKYfWzTPWfT+ps2q/zH0p4i6FbzkykDyQJ5hqkuNncmwDN0WbI4eOUIsF9/7HjlFqAZZuSo2kWaewmMp25kzixtnk5cIUrGbAqGmoa5bfPcdmKZ4PQyDe7iEQbIDFbQTm8Gwf48FrLpMwbYA4KkYS52+2Lh0C1+qqxcHbF+K6wT2fFglGUnKbe7Nk4Czc6tiDmtiYOlFznmvFFmumh5BceoSOXdLRCgZ94WY+ZVgaL2v+7dt8zajSmY+VwmtxMr+5feZznqiHfbEoKBJGxWd7CTv1o1OHt+IgRp5xqFQRwAWOelasqwfuXPlQ6w53YVOQ==","layer_level":1},{"id":"66713b0f-71b6-4081-94be-b02b5c149d04","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"测试指南","description":"测试指南","prompt":"创建完整的测试指南文档。介绍项目的测试策略和测试框架选择,包括单元测试、集成测试、端到端测试的实施方法。详细说明如何编写高质量的测试用例,包括Mock对象的创建、测试数据的准备、断言语句的编写。介绍测试覆盖率要求、持续集成中的测试执行、性能测试和安全测试的实施。提供测试最佳实践和常见问题解决方案,确保代码质量和系统稳定性。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java,crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java,crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T12:30:44+08:00","raw_data":"WikiEncrypted:Xd2Zu8BM8p49theGlFJHkP7LNymxc1WsyjHwG1uqjX391VdN34XQRqMsMMIeEcRBnJexODjh7WY2XETLvWBC2w32dDBBriNb5LTtMndVZQqYKqcJ3P2hnUEa2tjrvWHP3GdzBYTKs9XV7yf7Ut7k9ba1321WL0sKmNZOlIjuIvfCeAsk9pYF1QIQXOSJMDp7X78Cb+xgMSxz4RJBRL/vAlndV3bstugAxsKU5DNSXQLV5RGjMSvT7I7yx0TV5cnD3Rr8Kj9Tpc8HiEI2fKjeT6KQ9fYuEiW8YtgaeM1synpT868ccy0gKRe90dRIIrmEQq36gHsQqpAfXb6dz3C1K7OogYwDUXC0R8Oaktw+Dfzz4QwP7c9W9GRNkSgg605aQGSf4Vo6e+0ukufYN0OEah25snSuZQBjxe4/oB4o/4e02jKbnX/Fgsn2RV/s31Q1Vr+syNnJHgbWGqlnz5fPmQKYtl8DhyuWk1+BXFMorgQgv+XNM4PbDBKwYS05kjIcGdMCzgDPbbC8vrKNc4gFB1X0Ymp2ngqLd99Sy5gYbSy62YfRdL/s71LzOyqoIHMmvEfaRMKO2q2LRAosBWgtIeMHz+A1Qip+vrGvwrQxO0fVbJ7auhbgUkqYfltr8JMRLTal63ZEpv8JiXp5l14OA/tDreTsopC+9z7RGWE1uk7PEC4mMOdgVjCw2GeQijynxF49ZUH1IKu2Y3ij6S+J7USHtc1WgXOQmoybPfYCbPWxQmEJ9G1BFo94XilU8hH9lgKDuiX/oFEA66kTM6eG9Wr31iOtHAZJGf3FBNPEN7Q2y/TsCsH1PEpeww/n5LQK0RBntcwi7On2YSZTiWLuh1dy/WOVlBa262Sekc8YzY/OLM0a7XNxtmS8RsT8aaE8/5IK3ODSybkdf+7wxP8QZHtB9Tku7T2vqij+mtxGOcH1iyhvSnK6jHMUyd64asqsHVfUlu13YxwYVSNQAwi57XMTYu883+pOHDnwqm9AQgADMbbfvtNlsYfHsdYDcXsvxeqO9V2nhOB7o0My9D4q1N9MPguXrOT5vMiIIiZNCSvmiwkm8lYsN79b693x8OirU4IQul++/1qE00IUG5ns6s+Hm0v+Yj3FmFVXD4ykzSMWYBGlRdIMyN4O9rfgnUywV2hZqnsNReTuFUnj8sFVtFia+zX+VqmcK6Tpi7N/Sxpzpw5OzNHGYlDbs67Xj47QvGCxNx4xImxUHU4Z0VckxQh9edr0riQZ7udEXCszOps3Or33V7lsCkLKE/PRsnzV","layer_level":1},{"id":"b9f48f07-3a5f-4992-8336-1cc0b8827e46","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件存储配置","description":"file-storage-configuration","prompt":"创建文件存储配置详细文档。详细介绍MinIO配置、文件上传下载配置、分片上传配置、定时任务配置。包含MinIO服务器连接参数、存储空间管理、文件访问权限控制、大文件处理策略。提供文件清理任务配置、存储容量监控、备份恢复方案。包含不同存储后端的配置切换方法和性能调优建议。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":3,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/config/FileProperties.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:42:50+08:00","raw_data":"WikiEncrypted:l1O7XWjgWHyLZEgkeZtuwUOQPm4W+sd7tyOysYiIH7RwKKrD6gp4cpsydfImXSG3RIq150CyvWc88LwRE84qJSuCKuJHTJIMsByQTzFYMpf2qhs64C/7/B3lqL9/jJe6Xkh1/SR/QQPlC4YJsWvGDL22JmVyQGIZi9nBIe3mPE60cjQadHXpM4VecTja/eT7plfPLfUlE2d7Z+7YOoksJMWIsyBkPLXAasA1c488Se2P8zRXzX+SlNoifMLvaScv7gqiUNsTAh3qZN6YEJ+PDcrYuo0QSAFfn8DlQuVUvqgK0vBGMdjCGYD/e93JuxhuOmu3eOBu9kd573VmCJUFcLGHPn5IDy/ep1O/4n8HnmSBdC0snbIvLPgiyx+MVQu5QrRh4UX7BFTBS8FaY41muuOhP9qJcVjz/MX2WKacn761sn3lA6QxUStFWetp0vPtc2YWPIvelM0sYHndQPnvmmf99zSBEFYCNJFvTJcnJ8Xr4jF9w/F6PxLaoPDKVNX2jXR3ffYp7kKLacq+G71U4nMyCXS8QwzDmVjpZgcFYHdARgRxfxPKmnJED4NiosE2Zl8wu8tPSm3hWV7un6Ro6/XPJBIk1B2gnNlv1jq2KamjYdgvrtmor4c/+Tje6/TSUOLNWEBLgMMdDF9+gIK3sfqZKkkRs4f8WU40u70f+niyRfBkqYoxAusucCDmEd6nRKqixZwaudVlFhjhGrQoTVlzADXMT4jLNgqL37oISmYFFeaSMBqqGwfbZq91nl0xS+0QX7Birny5PQ/890a+W+m+Et9wnfGLxk9/VFiyeIWCNso/4HdnIjQXLB2Oy6oyHQuo8bZNdlAZqdq6XTFyfomrTe/P1G9bUce61kT2afTukRP5ABgxSJD3bGaTx5TaCFL+T6zK1PQlXbKYg5bm/2FcK+802vjjomZ2fa8Xb3f1u+WRDlktdBryGjRH/t/4YxPWNVjYSZcLbxCew+xgLmMqut3fzkeEq28m+LwAjQMOu/+u4Mg43USmDTq0+cQgTB7k5AZo9V6FMVk0xJT+p2dtyNVmPKFkdWoY1Icbs85bBS1O8bAPaqTM1u3z6GMc8Zi0iV9OY2qEop5eqI5qDz9ZMKCdX5Og0AkWNiw9kH1QKelcsZ4d0FLXmLnCeQ6SHf/1FYguS0r3HrqKc0Y77/5GH9+ztqmOms5PezM6eGau4irHVc9Q42mYZqTCfiTu","layer_level":1},{"id":"1a9ab040-6d05-4a0d-b8ec-9ac2e9d605ba","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"应用入口模块(crm-app)","description":"app-module","prompt":"为应用入口模块创建文档。介绍Spring Boot应用的启动配置、模块依赖管理、环境配置、服务注册发现等。说明多模块项目的统一启动方式、配置文件结构、环境变量管理。包含部署配置、监控集成、日志配置等运维相关内容。提供开发环境搭建和生产环境部署指南。","parent_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","order":3,"progress_status":"completed","dependent_files":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java,crm-app/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:51:56+08:00","raw_data":"WikiEncrypted:hzS1sFnZ5MBIsAwtUYPTW/MJIBMmFrn20vGr8pXYx9AN7NyTMGlVQspVkiN7j4hclm5bFtNd7Q9UotOs1MAn2mpu+dvC4EjY5DtYCDXSxhWC/EfHpFYG32nuh5B8s671LcuRN5+v4YUOW6u2LGXcOUxE9iq7h8NdrS79BkYLCE3FYz2jhVoT3k1DyNKyB8FHpqaI1gSgqIhbmZk2FSLjRySHRaR8dedMXnqY1gWGOmkBbu/76bF+9B8E2IWWTXlYiFaODXcwMFJHQwezsFv08EVUuayRk4JRr6Lws1ceAe9YiDXaQSXrQZlgI79hxIqtNK2D94satOULujOJyVYk5r+HQTLMNCFmfrD/8SgVUh+lI35fnQS9GylYqdRgEo791kLT/KSEYvTV+MR0bvg2NK/M7Wz7dC+D1UVYXuYXPPG/R+UEtyxzU7g+qAZRzBskf5CzZ3XmHI0SUjVtvQnGF5CGaK2boTxXdwR91h4oixZ98e27EHIw1iiV8YoPXw5x3YdW0mO9AQ25XWRT5rDtL3dJa3nIbxCrYcZTQu9jpdsYMaLGzcsnTNq9/v33ZuqzOofSWe/Tv8lBLAoK8FapIm3+gZ1alZX2NrbqUuHzqhXf8hdGHCq9WuNFJXB2pmXde29lWtnl5umcMpegzTS8igAIg/+TR90MRJQ92JlsGCqHLTmwtIFq24JP3D7DFdgbB6ntn0tc7MZ/R7fmv7Ie1geL6IDQVfn7zUTLPjvJ9ILH4qrEvUxugzNi2HUv+HQcZ6R8jLDx9UEpyRPwdLDLKyxzzdFMWglpeKgjxmiUX1F6ZMR3hg7KUEW8xdwwbF7yW62J5tmyzZ83sWEV9Yo5VsJ7zOGBI5k4xkVgza3VZfTaA2EW/bVsM5mupgKAvHsD6CUuGZwPO1SrS2/I1u70nFDRiwFy0xdBW+WkyNQj+A9Y2TwTR+c9x8mF6Q68iL3o","layer_level":2},{"id":"af24e12b-52f1-4672-83c5-c1d5108b1c06","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全配置","description":"security-configuration","prompt":"创建CRM系统安全配置的详细文档。深入解释SecurityConfig主配置类的各项设置,包括Spring Security过滤器链配置、自定义异常处理器、密码编码器配置。详细说明PermissionConfig权限配置的作用,如接口权限白名单、忽略路径配置。涵盖CorsConfig跨域配置的安全考虑、AuthProperties认证相关属性配置。解释安全相关的Bean注册、自定义过滤器添加、URL匹配规则配置。提供完整的配置文件示例和安全最佳实践建议。","parent_id":"65c8fce4-7186-4278-af29-31083933e088","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java,crm-base/src/main/java/com/crm/base/config/CorsConfig.java,crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:52:26+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9Mk7qQ81FDOCGCw8cHtrGiL2HFp1W0YavTGKuiloEP1flrcpgCe7c85JCVnRP1ZYxMzmSnakgzLc0cKbxQ+7NvPGnh4L66j349N3o+EThYyqCzMhyF75Qd2kDqCGX30tX3pM9cMYwNTl8Kp+5qljPeyH5xvTGnnaoPEZPrEMAPX9pm/gbrNzW12amF8e23Rj1yE2m2is7OPxn5jk/199LkGWffzWWSW833cx2aJjs7Qacte9TYlpEOESocVQs4EQdgJDXMVndpPa/5eLVsWRS4zhuld2NfJ1HVJK9Pwtjb2I8zwhvwemnGIsH4JnHJnyOpRNoA0EUAitEbk9ppLEN4WnmIgTPfQhJg82p2vhdEShlnwljiAIy62hLwztodoo+7auY8Q4VRThQH1Do6EnVAgNuQh1Pv6VoWfma1m8XzZyLTWGAtjCZMPvkoH3SWT+f/4Sv2lVVovE32UenYkePeF0QlJ3LgxDu8hjAPKyv/a6wa20bfGTRiwcRuFkFIVlJjvy87mWemcjV7ZIWRqpn510UtkL2LxXbsb7Tl/8Ke/maG+oSmWiMboDL55kyQzNFHTYRnuusMA1l4m/9JlmFkQaDDeQxaoWOBT41hTSVKPYVw9GE75zs955LuI+rxiGydnhQHmgBvhgByA/iFXJMT2jsVlF7vaigdEGS3FnHKDGaKFGDrBRFJDBduHtIbceBsAWXwNDT0IidfoGKyvrqIBY6N9DLTr2Mvb8xDYp1ahy/y5a4UJeIDyZpw+t0X4dgus5h7Wy0vdJ0ftZuQOwETe+V1V2dKvg86MBVqWLiWPp+Khw/QzjJ0j+B5tHMHEirhbyVrDUsWMmZebrCqUG0xw+YtnlygSkrV2zOLoVA1HY5kZFw/3YNgR3eRNyNuuqpbGCNQKpOOshJ8Jwt4bUFzoNIK6d2bunx6Lq4AqEtUg/SFSIUOjRegu4T9pF6hTs36Iy1Rsz85p56UjlIMWGgoTg85OAMsCufsXIejfCNhqX7aJo2Zzii33hT9FkHCsFOY0CoNkBLsicS2+SB8OqPb0PLiajPb0hzH0JP67E0RFdVXgLfBlLk0EhxKerYGJ6eoFWM8fBew2kvRTafXOR6b/QEMRJxEgPWHt3iK2rElP31plVEDvLJ5cO7LZyi93ieo6FtDh1oMPbUYc2Ykr8GIRYwaRu1DKOUVnCexzpuTsJWsXttv1iy3sFBySXGXnIggjn3BYNyw2yu66pTpnnP7dzeGpDhBYRsQ5e+PigHpZNSPRaTI/NV/PRA1EksT+pVumTFelEWz78Jz7L7ZqAd4m+EVU7G0Pd+63/soHHJ/P1iT1Ab1kLhyKYYxtfUbky8/QBLnnVbjdkA7Ld7aZvVJBqdFAtPF01L0m5li+fFp2tuI","layer_level":2},{"id":"eed6a5a9-cc7a-42b0-9f2a-94cae476f2ab","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"Knife4j API文档配置","description":"knife4j-config","prompt":"为Knife4j API文档配置模块创建详细文档。说明Swagger集成配置、文档分组管理、认证鉴权集成等核心设置。详细介绍API文档的自定义美化、多环境配置和生产环境禁用策略。解释接口权限控制、参数校验提示和错误码说明的配置方法。提供文档导出、在线调试和版本管理的实用技巧。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:52:51+08:00","raw_data":"WikiEncrypted:YZrrN2KYcncaMsBjPEPO0XM5rnLi50ra1cTA6eYoPb3jeAGy2nA7/bMIA6tsXJNON3OT2KWJU73QJMILl9qghcyMa5iik4YXcT0Tb+ZJeBob4bFoALxdHv+YAsBcOjkIS2H6VWHwk4tNZ9y7FkNUrCiLLwQXHMMOEUC6fA0pXNiLtLjBVBNn65L4vb20oQqD9Bqth0D/waU+Lue2VVdZoze3tUX6+8ynuM1B1td/E/KRNxSm2ltoW7EQmgTLaUdOECLnOfM2tOB/hz789x/RN0rMzpfyTys/x/fZ96OICXPZt1HAc3p6cc0siu4qRFUgZwB9KBFrsZwn69chJ4nVK4SKKbT2kUHCEm11Tizfk/kYcdP/SKdYb+rgSUc7GdX5WGYrQlaPdUxEe3d3aoE7DzF+yOmYpNTCBPt6YwgHRI/4Hg7Po8KZZ2LuG3zMDuQH+u4zslkju74H1rn6FflGIU33uuCLHCDs0hWs41Lv0hBCOSsOsohBbujisc0N8uJ5GL7tt7VYwJTyviVDTMg/G5eoMxKrk5uCUQhgmiWi2q/6OXe4ACO6DOn3irUcp5sqfApp3K+1qUpCZWHpl0SJJazbh4NLf89USZmW8ba32BnqPpOtLpBex9T231P15jwh9mdoJdbX93mozEynijw9T4yWZpoRefRQjkOeMUc0Z9nW1q3PFxLBMiCb6v38gCktRaqul3gALuyNiJUBgKeKHwDEbv8ZZBrBtEhdl1b5p+7JsxFy9feAqOhw8RtaTeAM4QZSbiIqV74x4Q/LwsHb0nC4ElGTcyhW56NMtraYWKU0lCPV9cAuEtlTbSEQBhjmcztB6mJhWqX7wyQsHeqjEIJFiRmhh3fqoPg5Su9FMWqxDyVJ3HDy+vGxVaFVe2DdpumN/2lFMhucJ9mM7V3lRQuiV+HcmpXQGEadWoduVUk=","layer_level":2},{"id":"aa92acd4-8a14-498a-974b-5385add01858","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全配置与过滤器","description":"security-config","prompt":"为安全配置与过滤器创建详细文档。详细介绍Spring Security配置、自定义过滤器链、数据权限拦截器实现。说明SecurityConfig中的安全策略配置、DataScopeInterceptor中的数据权限过滤、DataScopeTables中的表权限映射。包含初始化数据配置、安全异常处理、跨域配置等安全相关设置的详细说明和使用示例。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/WebMvcConfig.java,crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/controller/SystemController.java,crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java,crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-04T17:44:30.7534707+08:00","raw_data":"WikiEncrypted:6g8iffgXzed698CsRven+aU5VvAGKe2X2jE2K2Xo6GDnQXTxlPDQ2BHPs/i9dHxLsbJ4FOIT6P8NOPSbpkaX0tBFVWPW2vxKgaSQYKTSStFfqitkZs9hLuzbJNjRfdawR5X/cE9ePDfrLS0JkYOOR2549C67QFkpMgsuSAzeO973PSKBg3L/PUqEzaKfmVDIJ9I4cDfvJJPbLJP4dr+OlZeSJJBQDSp953pfXWE04APnkp89KxRL1uXvJBI3wooQGaMtJjGDd4Cea7iqHLlJwcKpBrmzZ+JKk34/tCGaKM+MOX2VhLtpnTM6WoHnc8OEg+9s7IbIanQBFPmZzP+BQR8uRZHNZF4uRbKQNITF3d6QGByLrHWmXjeeiM//7W+YvTgKoGftTDx+DLER6cS9+ti32wQtVPRqyRSWrbcckyvWQBYLt64QF8aNZHukx0GmaYHRMhgp+25e02gFuwkfJlfhJDz1/0OTJZRS8TbUF46Ys8cBkfFiBjfFpdrO1SA0sItGtJBcSmPEBrSV7IDikvc+2ufFm/lCSSeeyAAdJFRZlDNasKcyqg3AxqNZ+FjTfc0fVezMEMwsJWfYH79Q6sBv79p8Z7hyG9k+NrRZpg/Uxc/ZTKkkKG3TNIE5uYd2w6X/BncVIDta1yBq9L49ffgvCrfEvpzBBTBh3ebsz5irpnrjTXW47cI5Rj0mzsmsH7PeIjRrJ4+vJPzD9VjeRKXqQvWKMrpMWTl2Y34EFfB7Jm8qFk6EJeccoFnNiPGWyMlarvCILUX4WRoY0Ck0uops3m2Iszuq/M9gDHMoym14hF+3qT8SMvx0e3nuG7VWrWtWGZW9QZv17QoINEegi/4f7pOXUAbtS4tZjNgUdEtRYXjZlEmPqRYJ9XAhEmFmUDI7/xlgFs9fKY/elOMLj7CoGtQjvKkIZQrvV4IskJYAn96SsmTasxk39wxGve19PNrMjXmS8ZN12nJQhJDOWoZXXVEKNwhGBrsrq77nX0puA3Sv4oCKkVoZpy1C2mWa/fSdTFnyMjFnHw4aJaeYJAPo3i9CkSSTl7NTFWA/2hUTV2TPkhm0Wkv97/hl4T1PS5rYczamyjTPfpTLIRFvdDXF5eB3ilYP7RljAtMnasnM6waA13aPh5815kXEBvPrKjoiziQgvALeHmZKzKLXn+4RkDmGcYIpoeDXFXVNHWGHRup8zDRfttdCH8MfSt7K8jTpP2Q0FeNiqdomBgEbKK25B0h8ZKOu3PESwp/EeHJkDkya7OwpGs9HOmDcM0a7YcRbO9g2K/tfJdVNNCBzszQkIhetJTXLRyeWuyUmNuhuBe8Zb1Wg2TDZlJsaONtlkOOVgIp+Ey2rBDk7mXoM/nMbPQcObeVmLc9QoS3aSew5kO2UcZoxWpSkv64lb+oKa+UWQepAbHizBnY7uZL10i2yb51NiaYnTQ0XfoHMrQrxlT4NJbeGq2flLg0nCa0WjufprwTO7QDJM8PyzZ/Q7m4cyaZ4rAMr1mtJwWZv1WipIxzJ/Phtd295tJb2bPK7y/5fZjJWxNq7utZlUodKJhiOcEUhkYWQP0pQtevxSPKFCsgCaFdv8NlNhSO6p97aEQMIMKPgPd942g8Oa5QJZ9X3DMR/7bqE1xeCcvY5mdbbY5R17taEvfgseHo1KPkj","layer_level":3},{"id":"857accdf-edf6-49c1-a7c3-e9906579f74b","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"缓存策略","description":"caching-strategies","prompt":"创建缓存策略的综合文档。详细介绍Redis缓存的配置和使用方法,包括连接池配置、序列化策略、集群模式等。说明缓存设计模式,如Cache-Aside、Read-Through、Write-Through等模式的适用场景和实现方式。以DeptTreeCache为例,展示树形结构数据的缓存优化方案。提供缓存一致性保证策略,包括更新删除、失效时间、分布式锁等机制。包含缓存监控、性能调优和故障恢复的最佳实践。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:52:44+08:00","raw_data":"WikiEncrypted:6+tjrG+VnXc4xk7AT6U/b3wE425EZOZ8mVIjjN7h7HL5uVCMRxp4BIYoIzhyg0sNblpfalvMOJsn/9QEeh0L1Khv7hMJrRrDtgrvOF2Q47UgVsmra/bosCafsjt3Mn/XfG91SUmsxHJJYmQyElEyGVGoXW4t5Nos3GEF/xZ/HnPA53Xw3Zw/QXo1sMh8PNwPF4sG/V0qA8Jpz/xHhnpoNnq1PmuUGg7j5CouJO6L/0rBFIPzIQFDjVKDmHzBdyOShGEdfoFeC1oLaz7qXhOSfAXXb9CWiiqPFBkdBuWv8RpZqSDnp0kMcSt6jYevNwtP3/NUnlk8zB7bA0+ACsJoZxB1lNXWIWo2xczjTzrmZZT44I+8/7d/zDiY1/sy5lv6uYqabXDRUxtBTC08YnP6xCQHuvt5AIQdBOLpxKTmHqO8R5m592FFH72usqulDj4FwDR//q9yjdJ1ryTOluWKri2gBQqcrDcNra5FVoWwKmZRu/h+Yo82QlrCJS0jpJfzBmF6QgxoBo7lfYdoVTHBh0X6hqtRrWF+C6fFKYwJZw/Fzji4fYPckP/rIm0Cpcjtms3p/SN/UD7vHB2qs96FiEP4SHunJRTJ6ZeeD4k3ns2F3DB7oPy3GpBiScmZoTs7vFC/eYyvDIO+WXXTWk8H21sCjphCS6QpzgmmIWk/UCVEZgfVQPveiGTsX9vJQM1/ywJnQ7eAIERNyp4SMpPvGuSXQyd5bvA/GLXTU+8rHhc4AZ17SkSRcqvsFXt56sEDw+KNAKT+iFsNXxZeglyHOGT6WXGu8jksR6uq2Tmoefq7IK+rohexhF4y817fnBM8CfTdC7vdCtLnwOV4xgNgSNwIoEEsr51xNmtGX+3OpQ2v/iMg/mC/osbOGieIa5cMvaT4oxgMFBdPb2gQXcEvlTHSeOivLDB+E9cZRwTP/ZpKP9EnF+5cEdjp/n4dFxxk8HcTpz4uf3SwAh1V/8fLQkXAcWFVyyce37JTbBgZaQnuqxlSuqQawjZokgpxma2tnm3DvHBu9MVBJ9Sbo36rbz+nnmIgJbK0YY/OVTEilMa/8bQ4vCbBshUWunwXMtwncjwxVyibqTxSjlXUcetuK+IDFu2GFJF9hnth4j2QFsRx4lVod978PUxxIGQuiOKHmk58Xa3O73+eA9zxCXl12I8BVcw+tkGoZ2aVSRxWfjXoc3iVMFJ4F+78epBTBW1sXknG1/b0xzmCySoqQ1uhiQ==","layer_level":2},{"id":"1ef5af61-7cd7-4cfc-bc01-f2892feefd07","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据访问层","description":"data-access","prompt":"创建数据访问层的详细文档。详细介绍CrmBaseMapper接口设计、MyBatis Plus配置、SQL注入器功能。说明数据库连接池配置、分页插件、乐观锁、逻辑删除等高级特性。包含数据访问性能优化、SQL监控、调试技巧。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:56:55+08:00","raw_data":"WikiEncrypted:M8uljGDGJ//mcfRJly0hh3HHKuueOyyeUdP3Xapqf+A8U5VxNxrK86BxzHmxphcM5GIXlzNgzQ9WmGdGSKvMU6Zrqdz7ZgDcxot3TbhHbpPEfPANIZH2I5HRoTfeHiKAHZp0gs6eblG67d3xBkHg6XgDqQA9EtyQfYWFzVxFMSWg6obvWhU06MSgoIxEUN9mYtmKQZxwBQ0gXt2VoLu789RdzajKkPCfAY6Ds8P3RmljGmjUFfWpTf9eoo1jQIzJeSsnKeQDuR4KbV6lWTjFsqb1Vy4JFAA1f4I6T5OWXnNDwJ6gCj6Qmn3yvzgPTEDZtoVgAD8In0zAs1ZL1b/+eQoHVEYU4zlorB0KsINAX3nr+qI5opyseqTC+3vzFconi9QxsH/4tykKvm3bP4CQC3NN6DAZHyKP/lsQWptT2jPL7J41OecqkCVCfxjcx/DtviEooXmN3MHmxWdxkUwIzx48SVbxJUHhS5JqsSqitX+W8Rq8k4RooIeJWKcLTaalWl/yh1QYC+2Ti7U78YENa5B2PeOWMY92xo7GENr6fcodSMKnMfOxWDbftetI4zeYsyc/VpdNatdKiP+xwv/4A0xLGmUYVCtRMuGLQkggnnQb7hUn7bUEVnW6zLnUGJieVwbu/K070GtLAgJ49PMWHjxFFm/ml01edF3Q9Pmvv+EHpxE+20e3X+Bq91diYKQkFgLWrHfYqE8nJcm70YAffkBzX2MvvgK3yCb8uC2kkMjrgXoBSKfECShk4HtlO1MaxDCYG5db3VXXgfFaY6pSRb9WaHxFOTpbvQyUHzJcgRFmdjstKceIFm31OuSVlBytJtUts+NS1F8VBYbDj/rKHWox8YsXry4+VZ5/plIAUOjosCZ0HFYDJuFMXcakFmQRkx+d4M4TeenfcA9bB6A3klJFt1O5K6M1w6jO/SBm6HY=","layer_level":3},{"id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"基础框架","description":"base-framework","prompt":"为基础框架模块创建全面的技术文档。详细介绍通用实体类、基础服务接口、全局异常处理、分页工具、Bean转换工具等核心组件。说明自定义注解、拦截器、AOP切面、数据可见性控制等高级特性。包含数据库配置、Redis缓存、雪花算法ID生成、MyBatis Plus扩展等基础设施的用法和配置。提供扩展点和自定义化的指导,帮助开发者基于此框架快速构建业务模块。","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:26:52+08:00","raw_data":"WikiEncrypted:JxorT1jC34SCdtkR7d1dUhEq+8G3+Is82K3f3jk66FRPfTFt54livQbYOO2qjZK/7aNtqOHYL64alrCYhbYSMDQA7UyP4kJGFDrIYPOAyq0ogXZpvfSVQGI76AHOidc3zMRcUK98CMOUr57TNfD6S4JCGaYVmBo0Wk+Kq8RRP9qrJc7c66X1Rl/o1Ii0RzN0DVqQi9ckc4rMFoQ07T8w8CSCI7E8If0NfwcHZN+eXrzV1SI+MBRTWyT/kJCthkpZWj3OffhTXabaIridsmlxZxxL1/2ZXS02sdnnntxHrwg2LnYysHb6bsT5wY5vJpA4aL3ETGk24HMVFiLVsfCUaHjuV0n7hBy9kRiVGo5vDZWgPwgkKdx449jBu2GbeHSSdVhVhVWt3zGscBjmE7x7LRLS9hg8SWwqz54CWlLej4X+5D0bMXTpEw+E7bTTiXle7vrEr07DPTAq0w2N4+kovV+V9pBHuo4+q09C245fI5/8BjTQXxhNZfGDWWbIXeDtR9KrIx/RUeq3UVI2nzbqHkjOD83YDcHvDcBqr8OgGElFH+YQtcTPnqUoSZLFOEDfi1M60p29qPLd6/DwjD0HoMzRn95pwvP+tzU+0gntigCm99eOITGIroWFczNB/v9tJQLfCQ0AnaPrSW/kiD7HJyZyH4hB2LCJSXGKzqGmLZhiJRbb9JQ21zNkAr0W8buillvr/pRTNIo5dlGZl/a4sI0UTE1pkvGJvChy7ummhQVPEH/NJdppUDpJ+OxqvybZPaoH/vNmgWZ0FJTME9Rqf/0zlt1aSlju3VLCxzcPt4BhL6z8NCjBpmfzd8Y3t8B1hcli+gKywvepvmk34uaq+BLbhBQpWJgdSLQmK67v8KI09qi8/iOnJ5CT2GL8wCkDLM6XW3+eJ6u0ST2pVQAeHR8iqDBboR8yCpcAG8FT0QlSWhCnK1n+VDriOkR9kZ+gSwJZ8fTzn8HqM8KzwDDcz5GwkQDeL6pchYNwV0qmr1bMfDdu4yd+F+tdGxGnNqWVoFt4QTqVGTmzNSjOT64NwyrNstZSh8uW714gFYXZVpOFrf7ke7oLUdc244QsFbX8YYITFKGUpT/vRLKclReoA3CB52zhiGlFkhC/zNm9HsAozbOV1DtLxv/3ZLM8+MgdLAQasonJjBtWfLCjKZt/Deo/5mY+fU8kLlx/3JPUk0Jo/Ktvs0rHnTZ6+ui/UzxmFsH9l6AknCbeqExHgpIwuVFuMZLK4h0mSrZSXaBIgNWhk7/P4CdQzgOUnfoxSPOCqtv8P73shlEP9R7wrQHYM3E7n924G5o4vu9Ni1toD5IXQlUc7FFx131rGD7jajLinSuVv17BHDdc+vOrFLi9q85mPK32PuyyfRnD1uUO7kG0K6+S2afv7R6K3lwfBMg4bGSvRAHspR//fId5dyMUYmHes1ATa24l2ykCAV94SLk="},{"id":"eb945786-ac59-425b-811c-b0227a46a7a9","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"存储架构设计","description":"storage-architecture","prompt":"创建CRM系统的存储架构设计文档。详细描述基于MinIO的对象存储服务集成、文件分片上传机制、在线预览功能实现。解释MinioConfig的配置参数、KkFileView客户端的文件预览服务、FileInfo实体的元数据管理。说明大文件上传的分片策略、断点续传实现、文件去重机制。包含存储架构图、文件生命周期管理流程。涵盖文件安全访问控制、存储空间监控、备份恢复策略。为文件服务开发者和运维人员提供存储解决方案的完整技术参考。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","order":4,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java,crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:42:52+08:00","raw_data":"WikiEncrypted:9FtCQC0DeAGG21+hIR4h+KgPex6XUvknMAdSCL+H5hpB/yITA32zeUW39W5MZKKfTt01Y5o6QRMNYEa7cXfVTx8xiSOoL3Lol8tfZ6q1bAF748h9npWQVOilMKq9pRDa8UTfyQHe/0NtkQhUgWdnVLKUa49nQQv0DFmy+xx0ELApoW2PNHf+fbIPlQOAAekbsI0veeyaozQBOmFBvn6VbNwgFX6GiXsO0fMh8jBOoDgXYiCcdQoy7eX1Xt4nNjNNAaGcZfeRSa6Ti/ZvrO4PIij7/PwLpcDFM4Xa/OwsBwtLSXVdPm0jer662LIlsyaiMQbNQ+4IY7Oua9fFSs/XCjmtc0PbxVFbdttmVA21/VDc2uso1r3nmKWV4zNYOH/MnXPzenm6Cscz/gDh25x5/h8rDKIm0/eBCiImopw1nkLS5kK1oriCpCCd96kta5fda7sEOe+JlqSD6e8IArOanAIQygWo4MuxlJdG64S6mUHun74qfQyt34T2RZBZks+SzxWkdjNTTrvYeuxBXI/MFsOYrRrJEtzttVAHovuGPex0YKt3JaLh9CVDj4sc03z0jmoNn1NXzxUVOx6TtcUhkdI8rDfdQ75rrdxiH+3i7g1R50MIkpG2c0rNIRUnCKA6GbbL53D6Mz5m0kdJl0cRoQlKypnyeAeEGjzl8e5+wIGY+8IjQ+urlU/9sTPJLZDD1XWjTD6jXKw8HqEpUialx58JNJdr3ExNERCqMEGV5JDOXuFYHHBk6Fx9gsc6oPsCyt3oH8/TDhydb1/he1LjwQfN6US6V66+JHRS7/qTWfOnp5tKkOpyoRWW2oaKvlaa7owchQcU0m76rMfkcko+cYkGxoSr1EB+po1bhYSb5p/QhokhlDI5SCj2lhRJ0H1UVRe8EA7kuYmnMzSFz+xtjH6kXT/aYUhU03/BjCsOtXlF7PcvrneZmPViDKGmaxs83rmVDy/S+UeC1PvRQMc+hBdxL3IWK5y5iDMCUFpM0AKDaYm9hQEeX5sm6jowXK5wFb1pZFm1XSnZmR4roF0cDR9bvQ2OMcG2PK0ANcdgEEFeILS77S3avLNncDbc9nUHUFMCWRu4jzo3Cx/FkXUq+91b/X8ylMdsRkEVHaWDbU3DM62XgYxXdAZjmmDxW4wdVEy+QgN7pdVeRLtKHucXgwoLuMS3jFbipaPEGGccxuEUmLiR05i2yOGuwB2mWPvxrbULmqPs27EP3UHEwmAMUzg/eJR4Njiyf1GNaiA2W3E2LTG+KCmRSK87TgQHcVyYWtLOQk8A82L1OmkzLY0LCsCo7AN2VtPeqiuN1C2J1Ripy8V3dJI0kxi68BZ60fryyr967i4Xx9OR2BFrdhlo+cc4QrwrUNFTTJE5WRrZaCpskUGs833DaoHVewuEv4mSA3q0vAOM4XNYwBNpGlfX+Q==","layer_level":1},{"id":"bae93960-0541-44a3-aa2a-bc7310c656f9","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"部门管理","description":"department-management","prompt":"为部门管理模块创建详细的技术文档。深入介绍部门树形结构的设计与实现,详细说明部门的CRUD操作、部门树构建、层级关系管理等核心功能。阐述部门缓存机制的设计原理和性能优化策略。包含部门数据的初始化、数据同步、异常处理等特性。提供部门管理的API接口文档和实际使用案例。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":4,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java,crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java,crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-01T10:42:53+08:00","raw_data":"WikiEncrypted:lLFh2V412Okc0QNIrkQ9TOgwbMp8G4swpF4b/k9v9GSnpeb067NK4e16P+8f8w4YS2vkJWy7DTBa0Et5EXhuKWENnETpRRWaGgKvg6JIMBeKT68GEBBfLmnysYa1S/tGcm78vOKJH3R6sJbMqWlbtJtRhb/LR1Gr2NmmtzwQqSnqIkrcfcKKwCmWb+vlAklXQGiLqN328Ruau1CTRzdILr9zghdb5IW/ZZZHDGtgDfIXq+0RYVDEbE9yiKLEvMBVPkqYmKWhHTQ3R6JXqvee6QRIy1OR5II5pQSvQJvWXDsw1ISNNMJFa6gOItD3uUt7bRJHvD2Lhfp/JdyzM5QLNh0t3H10kj5gKa4ONLalS24GHI8ISZBJb8+AQ5olZPb/dqBpjPhUyyt5aer0N7+69urLRtmTAGf1frFzIwx+/fGwHE+AoNGc0pDPrr7zDKk3mEd+7foP1DBDKd8JTTtmUW1sg+sF4Ocu4kaEO1hRet39QJX7lrUlcDfaKtFoZo/uFtegILyV2H4fJ5hwVvKn7CEo78ehnSmmrvlBWdPeMS4XXUaKcKA+nGAhKKH/CHT4CMgNLJZDKOPTkDAqCfiVGUlLmhAn2MS+WADNF/tQtqyNhBAdLRGQTf3iFLgAxWjyRRNJmdP03otyh4k5Wr7mngx1jlavoCSHOEijM9stvATVuo7QNybJDgORq99u5G8Wz1wYuYbQ7vFNPJ3HKshw5kHmnukwNItvG0BRaMC0DbL2kQ/jjt8HS4kL9TNw4X1JibMoG/rAnSEivtfa9ZC4wBFR1roQVpGluk1P4oaPTwgLLLj/iMb0kE4P7DmfETvUuM+R5G1I/zqHVPI8n0BVYdT362qy/S+SIwjummTJK1Cto4YgykaxSiEgDRf2CWWFv+FXXbljVz6SUuf6ddwwWzmAblnjPUOcHr96gfsj6W1Z3he5l8P0j/tk858HV9cQxO+l+4UIAhyZW2LA56lE+4H4vXMij/6FLmXXt5gJcJSRb/tWSgDN8AJY4yLnDlzKGzyI6e/2U0aw5pEvV9Zwll7pXBrpt91IviitDtmkyTiSeh6i1iyr5npS6TSERwdqtYoPb8fE/Q3z6u+8eWVE6waCS6F1TORjXIxQzlzJCcjcn32D5y++ekjhN+zT3RCJDT3iyMHQ3Uv+P7q9qDDQFzCq+8CmdFQjdGxCRcu1wNJDQvWLVY+ju0zFx6Nd0PtGMRChLUlVecEbfXm9JEXw/Q==","layer_level":1},{"id":"8650f717-ee3a-4115-8333-d4743c840781","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"核心配置","description":"configuration","prompt":"为核心配置模块创建详细文档。说明MyBatis Plus配置、Redis缓存配置、Jackson序列化配置、Knife4j API文档配置等关键设置。详细介绍雪花算法ID生成器的配置和使用。解释跨域配置、元对象填充处理器、自定义ID生成器等高级配置选项。提供各配置的参数说明、默认值和自定义扩展方法。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-base/src/main/java/com/crm/base/config/JacksonConfig.java,crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java,crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:43:54+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllB9TGvdYeEh4zcG1OGQGWJRtxgk5wPt3e962KZz9C3tgTeC6mQ9k8RGokYExY5/jBXrUaLMIMEvxw0uBbmWvziylsD4Jg/RLaDTM1YSgpDj/ZfMwE2xLgSym+NVOAqQhOuewIoSrlCtsbJaZo72B2l/E4/SxSJwHqJwN80/sAO9595toCQTg+2vZmWcLjin5IqmzsCPRBmurM4ne4ZYjzEGhBEDg7S/GZBmoTGPkpdeav1shujIKpGYdN5/gO1SVJz86rSF6PqEctCsd3pELxb9gspMLNHpYEk8wB+k0zUxEV/KVTR64OnkYfsS9zTde9da6uB+N1BcGdaSWYHCXkKSwtVwFShXSoN4bMpx8zTh0o9DeYtlHUL+gN3SI0M7mQa7j0qzCoqoHW0JDJSva6JlXR55Gu3Bdady+CItz0y5StiJzKJSZVQkeM8/v+Yvf9GkEGkR7nnL0I8KoJ0B5CJSEXIiK4m8StlbtdP4pTw2i6RxPCJVVfcX+7az2KfM5ljC6S3QAGzXLQKwgN/GmWFV4H1XY9ct6j7j9R22Umodzs4ZxIES4h19bY/wb4GJRS4nYclkCRzczRpNIGbAySG6nyjuK5vhwmDPxwEm7ALmWDT75/VRZ1wg7rBZ51dvkHwDbzFM6eCRvD9UBpy7bcipHWIKYuVBaYKV3949lv0A/0H9i8rmendIxsTP1XnlJZ85NW7hw6Jd+KwekURLRZFTZnTDqQM7VOw6LHd69CE0SRAVcVKpadBw1V+ogiFlURUzyDnopj+2dKC6r9GgKzeL17O+btDV0RU60T8EhnRovkUGLl7l56zJ72fI/mKjvO88XxANjntNbybXSfRjFZOsr0cfJzVswj2VGBZVIrDsfoNWcTI2Rfjl+K/Reb9J68p4LuPHX29FzORphrTD8AMM2bsjOBAii8Kh/mNzjvkJxDhqZBRCVLrr2D+Z5PK1XoTl1vsj1Jez7Crs1Ssp0uiim/GWaA8U4nCyFU5i/pxYGfvwCFk1fCGEYK8KM8MYe2TtGlWxCMYlqyeToA6fOvHRmkFFcOE2j3wQwJxPNH7csGEsBrqgD0/ZlgJhRSGx2IApBi0IgWhAfCPVlII90RqxtW1rDDdPbKKNABTmeAtbAmxpHa8vr5uAJXBSnkAib4wM6vaKKh0yA0huHsvcE0rNF5mw4sb3iIJmJs3dw1WCiMfSwA6d5VlF7X7lVu6uHNPMUfmAlxqA3izIIP/ryt1wRNGQpNOrlaD6Zj1QE6wR6tm955oNQ3/qycuDet25zuGEWk4HiJWrij4//9+ecO3gWxl9k4wX5CP0OdcaNKd9mwlqO94WMRZA2XEnJQwJKfQ==","layer_level":1},{"id":"a07393e1-3adc-45c2-9fab-ff9568539c8d","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"调试与故障排查","description":"debugging-troubleshooting","prompt":"创建调试与故障排查指南。介绍常用的调试技巧和工具使用方法,包括IDE调试配置、日志分析、性能分析工具的使用。说明常见问题的诊断方法和解决方案,如数据库连接问题、权限认证失败、文件上传异常等。介绍TraceId追踪机制的使用方法,便于定位跨服务调用问题。提供错误码对照表、性能瓶颈分析方法、内存泄漏检测技巧。帮助开发者快速定位和解决开发过程中遇到的各种问题。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java,crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T10:44:04+08:00","raw_data":"WikiEncrypted:IGJnZREY6KPscHFIFvSUZIsXIj/pjQNlJAdMDQk/yeU/0ZgNOXxKpRa75nB17G8dRoP05rp/BfGkgQtWKJwlLmheWiYjPTELAY836g5zCI220WeqxpcKNV2o/RLktYU+Q7+4Vx/03nNfqoK13Qf/A8JlUihDhYtIg1uhprz24VCeqr69VrDimtQJ4K6F9oc03rW/TWDOK1LVWuRZER1sn28SPNOxcvpaOTtcMCE+6ec1UAasmPRFzsdH1pdaWHU9uZJj9f1mOP9rDscVONqXh6VU0Hq4oU0srvFBVqa/8HTmbpwtwqRBy8WO3jAIAwkU36LexM51HX1911oI62NlNAPIFIJHPbh0zXFXpjvIE0f8YHMFoxKMSdSUEa2G+LtjL/n0bzzSoD3hY99q97zEg+uHd2f9GfhGH+AhzIurBNjmdBTyVSeCRT5RwtZ452JwqlBtOrp7HtwIVwwZj04E4ai84J7O0TAoazaFticvbWWvtKGvp5XM3u8LPTRqTtafu1mRiq2Z/IAr+kXoQ6EMXIrZj9TG0wXTEkAUCltnwcO9RBJ+KexmKQL+pHCz2NdBzUWg1einRwI94NKVldyEkdGUKS2CRtJd6LcDqE71MksFgW48dS+uDD1V6QMmIyTTm97QHHtcXX7l/4gtsP0p/vnq20akmkvoSFI9ji3FqVS3vtk982iCxNjg8pbr2G4nAlaHBxGqbFbs2R/5fW6dbu6f2Ox4xxJZSCkIPktMYupOrjdC6aieIyDlDdRSJMJLmbcuy0Sn/7FUvmHABD2cvkgBKg1mY53P9u9aaMJiSEDuMrlmJOaizq+O4d0b43ZpMNbZFGz2MRT2iIZs71GFSaTMMgXqspxmABLC+SgYUqihFPGBEpklRWvXPTNtxmPiXvZUWSqnfdm6BW7tf+tJEzKvy7fc2w5WnjMrzEl443hCHXkpf1t2XnHkxXy0DXKyRTzOe635XgHFnH/dgi1N8ksAf9cYudk7o5cScZE2+WGPsnsSnuOqL/O/VAt/w+pxuRDLAfYMP1ewGlyYqzleVqII1YGPdN1aoC3tXRHQKwQukMZHT4xHgMqm16DZ7H9UFCW9pc+g8dHjDJUb55SWJ3AG8emzj6Xkg7jpyao8OOaVoPx/2nIIKN37xXOeH4qy98z3+5qvLcvAZp6jRdZlM5kYptpHrrjR7xVVGjQpfmakCFc3FeGS+1V+59sF7PzgNEwI22Jsa+3SbANBPbqeDADaRrZIS8HJzKHxhyHmJ+ikJ5FMmS4CArF3NhyB/hL1iHMWQqcSsuMsxuyatd2w9MchQ/SL0QHd4TcqNkbswpC4ojykb/ORvF+O7Sy5nskn","layer_level":1},{"id":"55a27b34-d92d-4f16-b9c2-00952e271280","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全配置","description":"security-configuration","prompt":"创建安全配置详细文档。详细介绍JWT认证配置、用户权限配置、跨域配置、安全过滤器链配置。包含JWT令牌生成和验证、用户登录流程、权限拦截机制、第三方登录集成。提供安全策略配置、密码加密规则、会话管理、CSRF防护。包含安全审计日志、异常处理、安全漏洞防护措施。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":4,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:43:52+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9Mk7qQ81FDOCGCw8cHtrGiL2HFp1W0YavTGKuiloEP1flrcpgCe7c85JCVnRP1ZYxMzmSnakgzLc0cKbxQ+7NvPGnh4L66j349N3o+EThYyqCzMhyF75Qd2kDqCGX30tX3pM9cMYwNTl8Kp+5qljPeyH5xvTGnnaoPEZPrEMAPX9pm/gbrNzW12amF8e23Rj1yE2m2is7OPxn5jk/199LkGWdW00aupbwWLZoXdfNc8B76lJW904ziQbSbfT972+Hk7E/6EZN+pWZuSXcbgcs9fu9W7AIu7klfRQE0b76eA+LeXKDbN4e/lu5Dcz7Ynz2+WhsFhjorgiojVXbGm8JS/pjbxSRKLgh6YKR2tXjitwZrKRXRIC1kuwzGdj3HqoCC/y/AgLhUZm7+Nbzfbb6gmh15Y2LFMiBZ3bslWBIwdMsHAkZmPXXlu2Gf0HU9/AU694uOpo/p8J4SyFTjyew/fbubzVMiAfGBr+L6ptr2srw8kjzMfGm8XsEMkfI/7RYuVLVANjzqyUPj7CLw/wuxZKXHs2t3l39A4KkKyQQ+ip+E5Cf804QRGjGiR6shcSHvj/OWCzU4ZFfOn8OjdpY36YjVh53xq5bD6qEWBKJrn+ehB+6waA0sUo6f3EWuErRRQ25+SELUGmV7hyPOSGDpQFEexA+YDzqnAMgH8lLn8SmBh8frrXF9fDE7i1lN5ueYO2xI15CxOcmCMYgtgs0SnBNnvK/wtANWePTvEeLk9CasMb9Evb8oauSyx3H5XnOaDyP1Gugtpek9flifea/FdczuOJ7Jy5ZvabPnQ+Iw0kt7/QHNSVGQjzI7qilB1CRWkHRRmTiOUDKY5A6IodVu4YgV8B9mFRZ1TqaYpRi6MR0IhKTrBt9WlWMdqjIvhW3gZKLiVSpApeG/vkAIl6Ro4KOhIopQh+qFZlXB/5UkpZS9Xid7tiKgz1jN0yhOmv+MH93V8UDChjNQDE1GrPQn6nAbL8xLJH/EVP05zeXYu0jYu/qWZjbDUd0ms0L5EIZATJXQ+mMoKkP8EvusZ4CQbDZRywhx3Wcf/cMh9xdwNitBC4WtkLpw6BQk9i0KYooKBCay53osY1PRShf86NO08JIlEbWYkmpwI0Rz0emZmMu21EkdGuyDFm2PPCIzvkEhZAWhL88i50vGezbjIkAV510Kb8d7QDHYEgYFKWdhmGQxUENkCPnMDZmJfffeKqtPHqddewLEfr2dEgpo0cAzcdtSvbhiv0A0sEWakWgiHemL","layer_level":1},{"id":"9b094a30-1649-4ef5-a16f-1b2fc5734fdd","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"雪花算法ID配置","description":"snowflake-config","prompt":"为雪花算法ID配置模块创建详细文档。说明分布式ID生成器的配置参数、机器ID分配策略和时间戳同步机制。详细介绍SnowflakeIdWorker的实现原理,包括位分配、时钟回拨处理和并发安全保证。解释自定义ID生成器的扩展方法和与MyBatis Plus的集成方式。提供ID冲突检测、性能监控和故障恢复的最佳实践。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:53:14+08:00","raw_data":"WikiEncrypted:+MDtuQf/CrU+GPGCmJIlUAWatFugmTR1Q/9qKAnK0F9npsBq76uWSQ+z0qjFN/qbmgzx/IPAksjVEBxxk4cRucLYJJDc2AMNWW0GU6gWMFFbUm+uysku4mjXKTuDrGV1AQlC2bC1wpt/kcSmg021gKDXxo1xxbtXFEtjP3vG1kt2dhkO5xHQZIRE+0Y7faOi91JpewjmQ/s3WYn5FAY+9Fw76q0EcZbGcyvrjPxQ6uKyEZYLBPj+KY6SL+MSx0uHcGjyP3vjzv/ttnMHp/G+DLCmWkCpOcPKBFzdTL8/mE0f7FaC4WPzNspkJ+lAHIuugxqhW4u50g4v55Rqcnu9JkhUlQDE4js5EdMgRDaIQf7TKlZ1uH4zof/UGairWE/8YYX5fCSdCl3qSkEzF1ByJODpdZcFpZBfpt03wK1t1naE1dDvCla/p//np43VsASp+h4kAM+LQeXhcrCvhU8MxsYyENCOGOdEb0Q6gPqiKmfRHY7WLFDBXvJnlFNR1P169n9X8Vrm/MmOV+qpbfLeCkM9jTINkNDKj6DzfrFr+L6GLyppdO8gVU23rcjLZMlPSDiPM33VwExe/3stcsbYiB9LNAQqHwLvn5kfzC8soOOwcV+20gpM0gYfkUhA7Kh/0/CkL5tLjmC/g2/v7H8o7dd2ckIINXhNCBhGeiUnYaXSO5dZ8uXt1f6WudyGc3+gc5G7XWWkMAG1LoB3HCl/hHUhVaTBVfFrNpp+XyJhw2yA8swxypp6g28nVdtBoXjYbaPgZDP+jhSXhr4InWh0n1B2tp/gMOajHECcca5uRv8OV+qsuL/dxcU99RwKZOs37ZAoIy+BCXC021y0UMsGuteQJY4rvv+2J3fpVjOW/8xBpJHEAYLfOKCim4M2Blz0iwlVu6D+bI9Hz6ew7WAKcaGuaYprvx9qO1MqHDxBcQWIDcreh6+Tr9zNbISJXEP4jzMHRcXLCWTYEbJB8CqPT6k95xXrkx9SpOGMpF9p4X4X5st+mjH1LWblXq4O1f1Jcvw357ykauJkUhxsDUAaVYSCvMBq9hBD8aeMEsuy9529EN7PD47nR94lYnzOZ+tz4RIB9UxRB8u4SXpQ+GujXi7lChSJn0oIdqhjXKREb8TpOkRSWsSjqJiXAoKn3LuwhREXjgqA+/soPFQ1O8a6zs6VgO4PrLjSntN/xnbdrk8=","layer_level":2},{"id":"80790bc7-c82c-4060-9f65-95c81558f979","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"领域模型与实体","description":"领域模型与实体","prompt":"为领域模型与实体创建详细文档。详细介绍认证相关的核心实体设计,包括AuthUser用户实体、AuthIdentity身份标识、SysDept部门实体、SysUserRole用户角色关联等。说明实体关系映射、枚举类型定义、数据验证规则。包含数据库表结构设计、字段含义说明、业务约束条件的详细解释和使用示例。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","order":4,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java,crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-01T12:29:28+08:00","raw_data":"WikiEncrypted:9fTixMuSRA59yaGkTVjDLwXmxZ5pLjJHkd87f0z/mqaHvrOGu/mKvZR64NS6uTe882/nC251szyK6cLg+iIfVM59fHrlqTarRweQkeCVqm3YKveJnfFNfJvDFkYLmsVPCpaZgpYBjhpl0kMBSgx21SefOtNjHsCDUuIxTw45cX4fNEb60dgo08957Lfqrx5ZIhTyY+dqbsQ7y+8LVu469ZNzf1ySzRhKTamGEKb0dGf9puyUk/PKQX6bhn5hKUl/uPVl7pJ9Q43N4fk9D0HY+Rye90SSQcOQc8voWSODwNTqWcEwUKQMLDmLPVorsnuXH4Qidvvw+pyQZ2Y8FixfFQtwkdy6zyoZ3xBYoPSXFMq3Rwro0O5n/AzlMHGuP7ZWt4C5Z2hfMZRk7Ne39sm41/C7SW3eB0qxNBmRQg2mtfXYhBpO0iceuzno/SeKdo4YQupDGvglly3UUhnDms/vuUWBsqofSQGB+eBw5zdRIZZddsTYJgrgQAkQrCuS7zdJH5mD/WH21b2YlqDnz9095LelelkO7+IH+egeeTmzeUAR5LWpxGtTaRF06wHva/2/urmOXxJgJ7hBm7p0FBP9kgUneKO0PbDVZvKp8n3uc9Anc5w/rITgsyi9dvOO1ADbTfDD4HG322jkwj5N8rs6iDagdjuDc2n4s5JuGu0/q2fuQKXbOipM7LzJk6U+We4vcZ4LEcCDKNVaz/qUSKOFpJSDTcZF0ahsmas0jHvhKpp5H4gg+O5CYztYuDtlgnEF6xMp0iSpXGyIx9o08PmLvORBi3vdm6BhzutoeU/GWmNhBgbd4vLlIg/+qYJcp2kReisVJ7x8gEBYQBYNCTKAhHNCU4uXTR8MbqbScoSPfY7fn6uZ/Z8HJruyMHBOahAuEXVX7JHamKtaU+Nv5t1KwuOUNkQSWFdOlVIR8HmdIPYzGWF3VlO4LP4gge8au9Mf0nkgNBhEQp+AqSKHiccZRu3+03ViVs9QKF3cZ83ES/HI8KgA3Gf3TGhNFgCi3FNVv1StPY3LRbHXOj0uYWlGt0sSLmRm9h49ng10BZzMy7EsRIO31zPc6yYNL9B6qLErGQ2+AtRtv2f6BVOMk2PaC/5zGLwmkgssO/Gqy4Gl+1mqYPRYO4+G3tnWNeSSugy97VYyuKkUcLovoII7w0aOh38ZX3zrrMKJQgoAtAcXw7T1DfZabvVnS1IUUdBI+GX/xEsfoSsAlrHjsq5BhOt/OABacBss27KgZIwjX4/Qt9j19na+BQgmGgM+6PX0HYaAzXsHcjByO06159fuk4LVSRLbxFvYNcNR0lCHkFIZqMUgSywlofsPOuZuLopYLJ9fqFzvQwtacPwJWueNjVxK8w==","layer_level":3},{"id":"081c1898-c9eb-41e0-93ab-411a05ead961","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"定时任务","description":"scheduled-tasks","prompt":"创建定时任务的开发指南。详细介绍Spring Schedule的使用方法,包括@Scheduled注解、Cron表达式、任务调度器等核心概念。以OrphanChunkCleanupTask为例,展示文件清理任务的实现模式,包括任务执行、异常处理、日志记录等最佳实践。说明分布式环境下的任务调度方案,包括任务分片、负载均衡、故障转移等机制。提供任务监控和运维指南,包括执行状态查看、性能分析、问题排查等方法。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":4,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java,crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:53:29+08:00","raw_data":"WikiEncrypted:Ixm4kI/Z7v0V3JxitGlz9bFyqW2cr1LVt5A7ucLAmvwkvuWQQzphG84jLlm910MQnUT7BYeP1ROlSBRDJ+UdL9g7qxbiIEEV6YW6fcLhsHEgiLsZHPkF/r449s3+mp9Y9Pzf0ZLgk2BtJcM8jT2F8LFjHum7Rkk1uTNIseNh5oLSj+Sdlns0zvTLHlU2FL8dvYLT1k8NsFfGoQjnFrr06eUnUOZmVEtp/UHb8YNnv9x47vASVIOEfrjHxt9iAHJHzSFXUftlxhi2J2tmtRgE0RQQqk24vQJy9YRWQSLkHHnFxv1mGIrRzmpo5m3k6ysuCrxhc16hRXJhT8D0/C3dVBTp/Dx6PxvmO9qrsSR0dczWCxjZHea9bj/Lf1EyE+mlWGOlKrQ7LyIMqrmCK3JHKyHu3YpXNDVOb347/sgB/9zb34eWx3nDxCQP/97VovRyEkpVZYU/89soVk6EsjLpmrDWIfhJXp7gTf8QCo8IF1bvNLDzQSOmioqvERA6NWbeKA6ZU6oiZo0lUbeIIBmlbMHxWwM9dGePnVFhkUXiiY/5j61Fz2UtRv4Hyk3YZXMFLbcfDnpnbTU1CKNXBzrV2xbsBcwXWO/IFqLcJmpNBGHzbJYGVnDd1vybASQVdcIrIl/wPTZzCxSWzl3xuMJbrKIWGwLDfndtusQ9aRvldw/KNeahM0D8M4eSQTMt28Wviw+a8mo0W6bfjJGe0h9ytT/oPYaFiSBI6eyzE3/z2xDSfRGm2O4gBDkK+0twQEqIfaGcfonXWTlDklg2WU45gR/GN96KvtAiEbo9xhxCfXi23b1cnIlGWM6FlSy89qfFpHOvZiqSaUl8Ehb05JO0A8Ga2l1X/JlYoDX7oBjLsamHQXvj9ACc60Qi2dx1NadJ6hZ/1B4kANx5zLvsVea8t1pLXiDDeexugwQhSwnzxhkn7KMF5XX/nh/5sMfRXf6J/Nr4GXj0v09RaMKiUPhKjdhBsN05jS3rW50Bi1UNgwQ3xfjNtqG2JJqzlHy3vf3v5P1M8CZclc6VmvUcthBPUlLw5+dya2u+8K11KOFK5F5+29uMUENNbnVgAvyTZOiNL6aV+03z4plxCqsONMmYCJrvshZsYBwsfD3KiupZdf9kXv6cH3trzLsUOhKa4lbg9r+SDT0aLJejjLeHZbfW5jVtdMzpXq3wcNt53gK4dTSLNtfW4S0d4eLTl5HmqEyc7LFr8jflZKaE7jxKjDgvRA==","layer_level":2},{"id":"dac0c399-2b11-42d0-af10-3e537fbfd80f","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全与权限控制","description":"security-permission","prompt":"创建安全与权限控制的详细文档。详细介绍数据权限注解@DataScope、数据范围助手DataScopeHelper、可见性上下文DataVisibilityContext的设计和使用。说明登录用户信息LoginUser、安全工具类SecurityUtils的功能。包含权限验证流程、数据隔离机制、安全最佳实践。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataScope.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java,crm-base/src/main/java/com/crm/base/security/LoginUser.java,crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:57:37+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9MkwBI59Ej+3gMDt2j1xeU/NCPBzDWzQeUrspM29zhKrqBqKH3sflVg9BLi+WB1IQIYW0pLoGJmCXO3+ICBxJrJ2AzQ6/Dxi4Cjvg1IukCLfrrWrjkWYr+eAQ/tQu6aQzR6T6uUxN97u6Oh81xwYS0pfQK1a+LJzbfxGLQvFB/JttDFFUYdLGSBxURQGp4w5y39QY0kND6RK2PzySdAz3vShFipcusxGska4rP9gG4n/NPizRIGc3KuTZqrwXo+/6jsi9XW9pkKixxxSIjsKwLDOlGwVtP4EdGcpyfgs+9E24GJLFOdPS6S/87itw4/KgoFm/dKsw9lzFrqIdl5MFFV9ObJH+zyH+6dxo98vVlgSdU6IqD0bfWamsrC8dXWAfyKhnwvXF0eFXAQMVdYVD52S28ATNsmow+gqXYfeoO4l9Wv923fnkfaj7CavrXOGf/U5lpTYKa//39HZMw324fhXM8hoh79qd/OQ1kdX0Esq4FlSVFG70M8B1ZvPo0ca/LjaqeHyV7+JnmJ/5GyJAWm/IqifreGC1QdGn2/WuLr6U0fhQnci2jTSW88X8wTaGE3bzT7jS8DnpWWpmiZXQ4hzInUIvuc54gPSnstH7hopMKKOSMXF6NNhO+MorxiyS6HG1V06X0PLK4C4UhY4k1ZugRY9tHaBIWyqMhhT1VyVXfj0cBmQpbuPjHLNgHey6Aep3th6V9PtSSG9UVCe5RRFyCeHdUs9n0ShYAFlzF/E7XOxF6+aulmKNLAo11UGQhBfVt3MbgnexeayhBWr5qz4xUvGFqxwqTikOgVvMJikkTwg6LO8u2dkLOzQ+OH2fx2QGp7iqFN2dp2fJfmLx7vELR5Kb5Cf7EkcKvY1uRHdiF3xyjFPgwKlQKxH0C518juXsgdkXXVZ+sUdwGulkmCMQEyCY8Fgxi4QHd27IwDrZKT0GxjLylZSgzTfU3KklWEXO+e2QSSbP6lAqfPtpzqoK1B/avhi2Wx45CAGu8XkiXylOqGA7ZYSfJPvyuZCTAbdEKZrqJMzLUJC51YFFhvrq0BeDOjzT4oJNiZswe3kzGAe52P+o9XvbzQiuf8kfzo/PASbhcUzJ0IP5T5uZII7ZEjpwueJxk94FK/JQ1nMzcb3nXbTaMfzYuIVyl0iXto83JtJma1bUN504G36J/Yi2fSKTxt24ykT6UgemSY9Xq8p+nC5Ocy7IrIZNOAAgoCg==","layer_level":3},{"id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件服务","description":"file-service","prompt":"为文件服务创建详细的技术文档。全面介绍文件上传下载、分片上传、断点续传、文件预览、批量操作等功能。详细说明MinIO对象存储集成、文件元数据管理、异步任务处理、清理任务调度等核心技术。包含文件API接口规范、错误处理机制、性能优化策略。提供完整的配置指南、客户端集成示例和最佳实践建议。解释文件生命周期管理和存储空间优化方案。","order":5,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/controller/FileController.java,crm-file/src/main/java/com/crm/file/service/IFileInfoService.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-06T08:45:06.6686703+08:00","raw_data":"WikiEncrypted:YY0OWFh8RMOtWS0p5fnjpOQItwWPtN0S+TR4Keyef46CZ2hfUJupzDbEdFdzUDNvdvK9T5XshFkGz/95nz+CVOZVsmlth6x5tMRq+2QKegK3VSwjnOl08RqnbYGdTRpF/emi81VDkpTsXP6M7ioxDnBVyr/Sj3O64WMSaVaPcp7dvhBkzhjSeL87CgvGU5b6ZXvDU9DPrU81NybvhufBSdrUPeogAuFJjFqLRu4rtZhmm9RImj5eeLLMPaIuPNZjGN18X/UiOaqeC2OQzyZIjcTyTMWdlqJBm9opgx79m+5ySWMmg6wrPzSc0dTV/qTlxdj2K43YQTY4cK+7t2jin7A6sUvaQQZ+tH1+OiP7PYgxG1znm+dmUZ3lT+C66oYTqLuZ4h5qcM2qm4MYG7JBdibxjnzEJe0STi4Z6A0GJnKW0Ay98jtJ180yehpl+1i/s0oYn+yR320xw1xojREQDxo4OVpLzhPL5FH8mFOLfWo07hNcLTE3Pp4sgvIQbOF+Eka2pWXUhyvozXEDODf+xdFA0jJwLPuyA2P3h8C4n+fjdFXHz//690N2/ZP8vMeZs5C7DTGHFAZsUJDobgjc5/36hRK6Jg9Voex+lt3/3mI2lqc05E0FMNn39DbI9EfJn5zByE6ZjSa+fxDWIRuBmiEAzKRsOvQwwRsXG6viF/siJztmBFQMKbjDepo4sxtO+398WAG8lVv30L4b23dawe9NFNhz9Ce9VBXevHv+YsVdrvkDeeS9MoImmnrajc4y/tPzB3uJPZV1BZ3UpNwywUFmUhMccZkWRKcc/tZctzKVF4XMQLRhAa87AsnLHC5amBWiveUOUvExSVsv9wQQkgL/ChB4bO1jzsbtCIwxRqhFh8/EuG9C9R9OMy9rnSzBmHIHBWZIgd9Wj2Un/cyHB0eU4kyAnAZ7Pg7I+4RZ7WVI+8hUmldApeOmMJWYf1Ojddhulr5tcbXDK172/URYNBq+XqpvQjVTwJ1eQvv6cJd4bmBgy+a9gkqApAUV3cfAesAHgrEP4aSjzwrxxAOxHHoKHg8xM76W5uaueRbLSxjV5KQNs2JnmleER0eLDv63d8fLKzFtlTKazoi9HPULbguw3hO9s5MBa0mqZ9DEAl3cJAA7Y8m5bNWlLV89SJ9JhZj+OAZcFjC8968HlDqcir0mBzKiArUO2yguYj9JFRNx57j8anik6IpIhVK6wZTDvwCcOTn6SVVGHCRWgPoWUkiCjVDMUxcABnmbqQ1XrXAibcPz+uyEDdeXoSOt6bK7OmsyoMdUo1ZMVuOOICJtcYOE7xV0xg380dkbUOVdpcYhiZQSOOr8QUCY4melH92UvI0kvSsP8UQt8KKhIkgstsixNOSk3hMcQDjCL3kcJD2ucpKbv8MFSHE2jYndAfPZZBhkXhneaEJIPfqUCdfBxQ=="},{"id":"55f54320-f631-4d95-96d8-e7b9f17024ad","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据权限控制","description":"data-scope","prompt":"为数据权限控制模块创建详细的技术文档。全面介绍数据权限的设计理念,详细说明@DataScope注解的使用方法、数据范围级别的定义、SQL自动注入机制等核心功能。阐述数据权限拦截器的工作原理、表名映射规则、权限计算逻辑。包含自定义数据权限规则的实现方法和性能优化建议。提供完整的数据权限配置示例和调试技巧。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":5,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java,crm-base/src/main/java/com/crm/base/annotation/DataScope.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-01T10:45:02+08:00","raw_data":"WikiEncrypted:yP6vl3GzzNMVOI7+ToNUFVJjo06Xm/aTFjbW0TM80KJ+D9r8XALOXJTPQ1TlWlLnd85arTMDczZkTayhK8ZAskIMy5rgB0bLSKIqNCWW1hTKmpez+IW/fLbI1YpIqsoFsi1GUMjN+gCfj5+B4DpJz7PmkyDR+UAatHymr3qRPWcuJLBLI+Ls6KNsv1d7oG69Cuy3ftQ37xu7CWhcnUO6ZGzTBgS0MmOB6wt/9L4RXb+8BFUnBszCa9ScibqLcrpj1GiUeljePBa1YThQK9V1J7VJ+lyRatqsMFFu08CIagaHW7jrTnd7enAy8j5sd1BQ8oe9SziDzJ31p5tkfFPPf230bzKyJYL4ArjMNgDGVivIvJJafU+nZEKWhnnkogblHQa84JLhe4O/vMiaiQlbo7AGZGZUN4SqflOEaGBAHd6es+GkUle59zcVyayNUmcpIalFYhCJ8NqLnWDp8ivcUrYM/1qNDHkeQVpchVwh2jV6pLn4giPBwPxUAmQc+OB5wX2RU9t2sZKpQId3QO/vNohI4KxSbi5dQLX4uQqsdCDVLXksZw1dRbyH2JmQgfW9krtBZBEY/LKdvZkNYXaW/FBwlDRMyRjv60hW2EwJFPw6jwAwS0Jbb8aplmFRJ87FnBW0PlOu0KsviI2JsonjuEITtZmVN3sYPT7zI+wIllkaO7jbPiT6v6Z3ocpbmpt5w2gS5+fKgAX2k8p3yxEk/hDkhSL9W0tmj6j9mkNB3CiJkFx06+d09Q/CUJeGzS/JdukYY6aa3W0gJvfsVifNoJNFW6VzY+U6wg7Mq/UPUGJhGdKMM3AAbeI8W6kAccvUrtjNr98KzrBGt+om1AqUG+cduLrp9N+0bfOHHR1cFjOvqTgYG/Xon2GdqmlniKPaZdcNYO28tz3fRw5nMX1az405TK15/3pCw2+NkituCGv/IrzZT7AgucYgA0MJHp7ujawd+9JJhffaCbqFxVNhJxVTKt/Y8Of/EpzJKU7YjfAYJiohDsvD+eKl/zESfTZzSXeCP513YLXQymUETea56yrxRkRF8UKcGcY2W5oDXoQcTIMZwfTpqFLCJjdT1xHiz6Mrote9vkrqvqJEIrKJ/RhpqUnHZnLH/tq63kG2/2R+t6YEoiOjvBlXaMw3beXYxKRHBMcl7ZWPiEWErPMFAz4ksTHupJRb8lnT51Lii4I9x60u+lq+gH9lY2URywLVcckwCwnoUSw6GBaHp2NppMaM2VCD5d0a9OWHtITw+CxUk6/W4Iu2ajwXNMSkHwH9io1z0aqTSLUNI4gYs6XlsvVa1mavY7u5CH5IVngEFzRQi8xR5332OIRz3IqrbRlm","layer_level":1},{"id":"c599c1ec-9ed0-4ff2-ab5e-0d5a0461ae11","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"工具类库","description":"utils-tools","prompt":"为工具类库创建全面文档。详细介绍PageConverter分页转换工具、BeanCopyUtils对象拷贝工具、EnumUtils枚举工具、ExcelUtil Excel文件处理工具等常用工具类。说明TreeUtils树形结构处理、AssertUtils断言工具、ServletUtils Servlet工具等的功能和使用方法。提供各工具类的API参考、使用示例和性能优化建议。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/utils/PageConverter.java,crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java,crm-base/src/main/java/com/crm/base/utils/EnumUtils.java,crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java,crm-base/src/main/java/com/crm/base/utils/TreeUtils.java,crm-base/src/main/java/com/crm/base/utils/AssertUtils.java,crm-base/src/main/java/com/crm/base/utils/ServletUtils.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:44:52+08:00","raw_data":"WikiEncrypted:xMGPTkeCxttYfKYvvBbBOQfnyF1TdBFJd2iZiksLsdkpqAKWf0QguRDQ0vJGAISAfebMm9j2B+kSr1VfHowO7vxt+ODSAvtZ6Ry7e+5MIAkS6ZCftj/EMtYDuR2evN9jbDJcV1vUbuWZQNf79XTEuELUtbkceHso042+O+jAeTlIxMA4AjlJftgpqW99eowad3JhYuk3iALeBxAmuDasVF2KwyineOTHYPq+k6/0IXfngZi4VpBAh73dMr50OcezSkwzd2Z+RfLJJ7V5RovZEUUhkR3UoFBM0CsoeT2NbOMl/fnhVcp9oGCdVBwNJkwnDsElnLDcnR9aMIiWJj3Olu+qHtjcCsHshe4vWWWfhiXis4bD6bmNR4JgG1N1iKkxtU9Xp3Ca8WYPQ8BzHtkOJ0EG1dsWRBSb1ydCd64Wf6sb3WPXBVPNJuz0fUrAHZ8sQ01USVRSicCHmtqAvDm4bosZHS98FX3sPI3/PEeqFIfHz+gLu4GOMxc32ueo6nduO0eGSvqxtDhbbL3YU4rgNA6nZPgtuZVNBRZsEnBrx3q5KY4VfDDm75Tz3zKIgYcvxcC0yGK57fJT8yuo0FWWCJW8Rb5G9Vc+5pMNhnO77Nlw197a9a0crXdsi7df6y+cBnuUe1mkwUzu4gCP0NWiTKgnIe9FbHpqWP+HsNe0+S5YdjYd8xe4N/aX3/FViqNL8hR8VXVkpKgvU7qlranAmyb7OpsiirG2Qtj/NY3QCmojo7ZhjpbtAWlhE3FJTLxy4CF7tSo4THRhwj/m3Pq5ME1h5cNuUgIgcN5omRnRl1APw+x7YQMf6wYIT6Ga0ODg/slKeT9LF6vU5LXU3q4sMiRXdmjiloJm7BlVgsEXqgXjEUuhk+Pe23uCkJ7wve4VbCA/duuyXZiQgXWYT1xSbYrRnqcXpfin+Q5MU+Rj4htQlvs3mawZI4lGsZky98uM1TVkd0j9GrMHVMFeh4BoKyjt75Z5wxmgEuaOZdjOqc4zLJVSlsNtOrqW7rDDR2qrQdwPhue6tye+a6DY0/wiEnV121/6gfzJxxQGV1P5BTyeyFLZxl719jXHvcDU8HAfTMhukWQ1dwpZNq6dnTy+vRS6HHwZVwLs25GLiagsniRvusbrBpxh8/xfljCLx3d1r8K95M3K5GdYZz7VpCMYv60rbfsigzfqABGOsAznlteL9RkxOxtirVjCzVVm8/hdBmwRIAcp6gpvvxv1xIXe7KIPMzAG/+bJbXKEmSyjGFnFkXR233LywVpMpa5QypK8t7HDB58K9Sn625T00bx/lDh2tS/k3gVWhPMaI21IdT6bprYEAiyBy5wJ0fT3KX2FbwBtCpSVDN36dU045Lw93ArBnBQgeVOc9NZR23PSq0hm2yz7X7T2nWWHYT/SwD/J/SyPWGDZx98pGrqoL7aJnBHUldETzQcycPv8iTZiSFk=","layer_level":1},{"id":"33f9a0d7-aea6-4324-ad3e-39d4ce558625","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"雪花算法配置","description":"snowflake-configuration","prompt":"创建雪花算法配置详细文档。详细介绍分布式ID生成器的配置和使用,包括机器ID配置、数据中心ID配置、序列号配置、时钟回拨处理。包含自定义ID生成器实现、ID生成策略选择、ID格式规范。提供高可用配置、性能优化、故障恢复方案。包含ID冲突检测和处理机制。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:45:02+08:00","raw_data":"WikiEncrypted:+MDtuQf/CrU+GPGCmJIlUESC35GEIbHn67UjAE1THeTaUnXxJ6FYWxUA4AG09efqXkhP3cVN1GqEfw8w1Zss8p27k5E2RkNeI8kkJocxTAm5T8X7odwZ6dn2HGcgwOIH4rjB1IPeebMjDXakysJfJ/Meicww3qdkF5ul4XAQ0oUengPG9oudGIiJgnrYnomg4cLLzd+g/bigkM2Cf/AdZYnScZNRyXCEZMwWNE35DURMO8SIMSJUPHE3aQujyUQy2DenBy7cIluRKXSxztFeuO6iXaG4I/JTP5yHSuGxPwQzAQtpeQkxrcor8jvmnVs14wwI24wwOS09HKlbZj6Ybc1iKa4qCUJDZBXjSfWKVVtRM/2YWIE7ea3qi3BEsR3awvP9hujdmrsI5kjyoT9Rcw7XM/w5SSEfv7XEmJusbxH5ZfjgmbWJiRWosrF38VumtAEdVImjBtCaB7YOiYQWfkEOK5A6qwFesb1hX/C98kb7om9v7k2wvbm3kA55Gahb6HnD1O80QeLryNAYEj4l4BW+h1jUYGYzWmvYynaJMdqaghkJOg21mN5fxggyUFzZUC0RTctcPBWUMoS2hNaM8Bs1nZ3LWRl7YQA8wgPw83FEYdvW7czxcLQRkCz/RDNY1JolOFHaaWfqZ8MQv7MA1kEHSRNjzdDOXUGsuLhBrJlTnleTJG0UOVluDZkphJ0uW+W8OeOdv05fS8BqZh9H8eUTb4etyY7n7PbRQjEVgyjWMoYBPu9edCJ0k8mYySw3G637pDv1OrytVz7SwU/IZQ1UFx32ux6sEcDM2Brj52hbW4FauArgp11CKVCPrikfeO2BpGnc22Q40TagMIV1RaBWihIOcDxIHccCQcOxyZBxh38NaS5LIAnUB/6lNWLh39ZiZ4p1ofMOyis9sYDwKTLoW3kjH87kdao9MLrLZjgbFQxII7ho4XLRGDMCk8YfcttOVVOY1MCKyd4mUVNGmSpWyrGwOh98uHTkpMtQxtWAPhco8GxuEm3l2GAX5YT1IXuDmQ+521x/yauCZ5A+T/TDpr/ms/oVsnzJKLEFfxlp6tVsi6g6fOw8PYyv/xTf","layer_level":1},{"id":"3343ea4e-b085-4bc9-b7be-62003913a5fe","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"跨域配置","description":"cors-config","prompt":"为跨域配置模块创建详细文档。说明CORS策略配置、允许的域名和方法集合、凭证处理等核心设置。详细介绍动态跨域配置、条件性跨域启用和安全最佳实践。解释预检请求处理、响应头定制和性能优化技巧。提供开发环境和生产环境的差异化配置方案和常见问题排查方法。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:53:35+08:00","raw_data":"WikiEncrypted:4VOItIqKRX1STtVxuD5VPZWrRiX2WBsf9WnN4j7+lO3KVtWP9pAct6+Hn6eH+6oE6k/sWcYQ9yPPuEAMfNMlaA//OGKD8E6VGIjcrcFPBd3VXoCwiIiMwmghcu0Svvu97FzOLd8/iz39b0l2FdW7WAOiqK4A8msDUcczmXtAx/g/k7K/gPCGjwYSGPyOYgd8dUneUDSCLFWkx1CMctFBTCOITk8sMFHPaV3g1eWcxdZ7ISwzHAL/KQV6XyPRVq5Q5XTU5kHTVmsJaqZ/xiyFWa2fwIUqe6nNdB/baKppTxlJ1rDa4ObE+O9FOqPk+wkvRgTPUD1Mdtg8a2rySVe1o6Z759O2qQNY3rur8x74O+QioK7hkKpjG+9BjQhAW9jYpWqJvvr9xNvQ2DJrmB5TlxrQjMqV7XTbOyyLN32qY1Fn+gNnL46ACMQs2fm5NhDhqBwlgLW1iJQW4VyVXYkt0H4gMxl9HkFidevB1cXpHJYZYnnsDXEwrerldR8hWkpcnhb6W3rz/yznmbLC6YS+dn1LGYDj7a3q/384DNeaTD0SHKaPABsZixQhiq/SWZ9tCQxbw2NA3MC6+066WFBHejc1IL3nkmK8rgBz5kv7VE7On7pw9mLSt5vyFcynvH+HAvveFBxaAUCYDEq8NWVvVuDBKvgxmJtLkMIr3zdTKk+TiJJ7S5UxVJENTgVKjlm2NNleqdBPTEL8eEj+UN/kkSOBkT5/WEqujRRysHTVfAZ4kw4qE00ct8Zgw96uLyLDFN90IzaCG0WsohWKuIGVfxy3W22BOy/aWsAiB64OkcPOMfIC9KC06Hn0uUVOd7wzE+ZYub6c87QvIUD0vQDsokYBJ9t/k/8ei82YKkmH3B8hVHqMKk9FCstqIJVzQLBW","layer_level":2},{"id":"245dcfcb-140a-499f-a377-5d6e6b1ba003","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"性能优化","description":"performance-optimization","prompt":"创建性能优化的综合指南。详细介绍应用层面的优化策略,包括数据库查询优化、内存管理、线程池配置等。说明HTTP层面的优化技术,包括响应压缩、缓存策略、连接池配置等。以PageConverter为例,展示分页查询的性能优化方法。提供JVM调优建议,包括堆内存配置、GC策略、监控指标等。包含性能测试工具的使用方法和性能瓶颈定位技巧。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/CorsConfig.java,crm-base/src/main/java/com/crm/base/config/JacksonConfig.java,crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:54:07+08:00","raw_data":"WikiEncrypted:9uOBpMbLX4DyZqW4us3Wm3Q7klXxmeD+JMMoGiSO2oNryWBo1gw9kLkawvxQIW9CASZSiyAjiA/zeT5DwD4S8MWCvsWhjZOFxN3sfhf3ZPmmaEtvRuT1+/0U4XurSrWkAqX+/o/dPiV0SlMszxbF45VqOojnRNagFyTVX1QEpErDHjK6d4mPViP3CiRzhfFnRA3tXUzWAjsZBr0+CzN/k7C/oqvIgc6kWeccf3HiUYr68TMmZ3d7ksuA86f3kP5BlrKMpxsi+TWUzb45r2cw2J6VFHCyRfxrVSGBefd+vdKXbN0McBZe/7KrbBnjHLZ8CrYAU5ufcIMY3yCD6b+M+S1k9kSgu4WfLhQ+3Yxs5LpwrWKuYmuLE7WPHHYee71Mxli3mmOWCAS7nYMHltVlChJOoDjtScdS6peFIIopMkAieXxrHUN+1Uwzz9DsDe5Qd1ZQrd16B6sfS6/3QtcX7mxgAqpaa88QkduZKUshDtWgKRWSe6onTOCmKrGJi99Ptx2FhcPtdRPRvM592v2yd9xXJTB9pM3HOv6tkjSgi3YfiOLZzvKQl/MwLsJm3T+bH1LOCjuf9YPWzp0a2J+60d5waeE4OthwSL02I3iQkP3YDFBATB8t/sMBY7zt/WnAt6O5hFNlrw3MiR/n5cWC3RyqLOxcYpSGhC/fPDbC/suJ5sJXZsAX03uSf1nWtk88SitlseTyEQ1NkaiVyD7g+xQgkI2WKbjN1SAp1+MlJ+7SnI2LFZK55owK/97koZUvjQhiLLOk6gkVOUElB5i+WgKUHuX4iuV8C1LvLRvPhVnQ4AwDfberPSatk1rrQXCBtlTXMbd5iwhWXsldLMD8SYNSG4sMMZYCWnh5xt+if/HoTp8b3d3zvmJw9zEXf/Ng2GqaM9FgQtiIG8v8V6LDcvOVOUobt6YSfDfthJ2JgOOZpjKS4MX+EgTjlUKVHjP9rMO1Cf75CyO3FTK54+lzWh7iBap4a+fv9cMIoG3taPgRoxDdUSA2q88sFNTSol7cW/IXZMWaOBWPNHjg3nzWy5FMrAS2OcB6OKq9XHHZnUg4r3ds4ds/RJBct36BMwx4hb4qHnA9Uq9QLTbaC5we9YHub3xlkKNY5jqzFZlmNdVPRnp5WOG3PQ0DU1ui6Y5uqM+xyqC9WApqrckjWRYnkUGcbT1R40iVSNn3VTwdH/krmfDA9SgOmLSB4xtZT8L1XFJX4oGVdq9yvh0JlSxQ+kxm2VG4DHATafXD1jdPIIg=","layer_level":2},{"id":"293dd98f-e9a9-431a-a01c-8630354c01ae","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"框架配置","description":"configuration","prompt":"创建框架配置的详细文档。详细介绍Jackson序列化配置、Redis缓存配置、雪花ID生成器SnowflakeIdWorker、元对象填充处理器MetaObjectFillHandler的配置和使用。说明各配置项的作用、默认值、自定义方式。包含配置优化建议和故障排查指南。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/JacksonConfig.java,crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:57:54+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllB9TGvdYeEh4zcG1OGQGWJQxUKpAVjQcne4MtA+PKI8uZuGbHVvF7w8BB2jl/OBwHwKhczc/MJpPZdmTND1ox+fP7MxlhMDbjYZZy8/sdEQfVPthxuJgJnObUYc1upxOWEnwdAvI+gjZk516FZkpWDVm2FvcaIonw1AgDgpac2j4vboEH6ei6zwQdiuES40m99ZE+uatqzcI9DJWZ3OsGEq8zhu8Gb8+wBZE49mqIPGI0gmPjKyxa+HlVjMiLDd54ZWG5ZV59WSfbpDh8mmAgBaP3tuJ/J62bp4FrFhODpUBa4ocVA1WaDxZRBuRYTypb3UQTjCDmfIqalQaijnyCNCSINtBC9nY5j4tr6SwdUlVXRu+0jUiS23pgXg5G+PQLAqGr+IAVs0zSeld+sdwmkccAgdmNzdzQ6loO45M5j++HF2oN4LVjZ/Z9gNOuq3ZWK+zeD1tr2UFJm9G4Lt2zCT/h/UdbZ2+c1EgYmfR0ipK6a0osTgDW44Knnbm68yMqRj4ajCD1mcc60HwHHpUpQnvrlmOCCZICGRKSgkZ8KT77ZhH6tU+qkRRQDWK2PQmPqPPD8OaK+lCDHzHTjhrS/eo026Rb1ig8PKmd5b3EDxeaUwDLdpMuitfUnr3m81TU0z/jzxwUsKm+DKhX6ZPRD0jwM/VNpYgqyOM7K0t1FOHJJ/BpVcU5FOzbaRuH4OSmovf5G8Qp/Qxpdegz1Gl74XlvU0Q8dehInFQ1UXu2PJ02T4NSg1t2DBfv8yyRCUyG5V3EYyH5HOyNRI3nZ0e51LXYuL1GP/yd92n1e8RMoTyF3+pNvjuqD7X7K8Bfg4BIK0J+01W0vWvGz+EGKFKx+Ux+4A2VsaQfgYfGtUFRntTgWOCpQJfnwz59+kf5ZAZzokGHYaIZZ7EPC11+AXGeUWzvuiLR6bcT2LL6JqbkuXf6TwMtcRDWbVzOFt+XlSY8CkZurIvdq5f7KxCtx2dGHr3VQfPo8attqxxnMyE124KMAfk1ImjYW1bid1I+97P9EIEw0bXV6KWb0Pe6Xm2nBvzBiDixNmjVLQ+JaYFLAjKxsGLUKj+/umktfLYYHMfJOBkkuy687lEPIBWeiZuJ1nh+TOxWYEK6EIBfQxHRr2FetpdxmLrLUhP8g1TohcuCQ==","layer_level":3},{"id":"6e92351d-04cb-46df-89a9-1e2f43b46552","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"API参考文档","description":"api-reference","prompt":"创建完整的API参考文档。详细记录所有RESTful API接口的HTTP方法、URL路径、请求参数、响应格式、状态码和错误信息。包含认证接口的鉴权方式、文件上传接口的多部分表单格式、系统管理接口的权限要求。提供完整的请求响应示例、参数验证规则、业务约束条件。按功能模块组织API文档,包含接口测试用例和常见问题解答。确保前端开发者能够快速集成和理解所有接口规范。","order":6,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/controller/SystemController.java,crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:28:01+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg+WPNa2UHH7yP2PPjE4/OPkHS8z1Hn761hqag385wjgSGI8YqDrVu/o9V8BlKcXHBQfCKAhGLjJzH4D+QXx67Z3/qjMYf/zfxcCBUNaudBJ+j9FSL/FRlAQV9qdKc4An0mgnUigw3sZuhhHApuOjubIvSRB9R+8IQKe7cKMpKVuSea0h6Ki22a18uHrBW87lNsSxWBgOPinHdsCkzmv85jRlIkF9kXezwrfJA6IQA/JFRtYTXRQ9h2MycTojwAm0c/7CStbYRLfhn0UVkx5YlL6au7gnIXkTf25GQA2OmcaTq/5/nc4RVUofm56eK+NU6az8TCXELMace1PT6seIn7ek7bMq9AIiaRTxwaQijKCFM6X5/CBolUnOwhfwPToEf6iQSe2lSSAhG6CAToimsZ4cvUvlNg7HZCJ/XQVNKsjAtF0XBzhFRpb1Ex1qLfJU4D2bduAN57z+5CHv9lN5vPvAoEXWQHjBDKEJQyZqMK6OT6VaAkjBDhw6SN8RiwjUr8B8/pPMYo1+pWtxMBmnoH9uo8kuxN+g+VrDMUHVhkr15OrLNc6dfpezVZRBPrFsAccQ9UEsCGf80zdzF25I71o7YyVfC8PzA+2JyXH55UJ/6ITZLxIZp6nRM2vSMGCKv0y/lnkJT47NeRlXgyGN+PKa4/VdB/FL0svzktC/iGjAo6gD0DAC1ZiP26RGc3fer2vaetz9eT/TwyVCIcVZYGkZ18yFSVVTaAGaHDWQhx+jg8DveUsgtBg35IWUn9/9fsq+W9hUY+gv+FCPwxSzvLGOBlFeXx4qspUcdF/Td6UbSFJdNh7RL80c/Ema0ERHWUOw5MUistp5CbvS0DiTVCU5xC9ZG2255e46skqWgNJm7XEPV2wnRH2nQcf6vxY2qrEOvtRA9jvhc+L09y7W5AZaD6aL4iEkTOBNw+tqgLHFncQNlqY5Z8z1IYNwhp8C+vSBtp2SqivpSa/xYpxJuAr81GNGhwFXs72rssUoK4sxj4PK6CFsUds6QDkavUT0nB1FANfIYaRC/yWKudrDo7zFK6dX/CjADFI1I51TjUBHGV70BNNXxuDbAQXUcFpQpxo5Uw/61FIyShUt7SJ4t6y0cs7f7CvDIDgaFJrrumbQwwH74LPvRXbiy5zUh7pxcQPFkHyyqVZeyvf7QPJjTCMFAdnbbsl1rAFTvGhwfxx7351bA0xkV7YW4Vb+Wc23QROObvxJW7wFB1qdj/mcp5D4GBwlJ/noQ0PDxZf6Vt9P/V3m4V8KDdqOKlIAsluPHmxNBpI04pCVZy09CR09u77Qe8RwFkcZcAurcBD3VZZLrBZs7W2XCqmEtZRr+iKbeQ=="},{"id":"9c1038a1-5ae8-45a4-9c08-2004a4595503","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"第三方登录集成","description":"third-party-auth","prompt":"为第三方登录集成模块创建详细的技术文档。深入介绍第三方登录的架构设计,详细说明OAuth2.0协议实现、客户端工厂模式、钉钉登录集成等核心功能。阐述用户身份绑定机制、跨平台用户映射、会话同步策略。包含第三方登录的配置方法、错误处理、安全考虑。提供扩展新第三方平台的开发指南和最佳实践。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":6,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java,crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java,crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-03T19:26:44+08:00","raw_data":"WikiEncrypted:TNVQwQ2JITC++477rMKpIYsFZiNzaeHbR4XKRlu9bDqA0R0zXfIcIYfpXXtG9hrlEtg0OfKAWNYmVbZXRbjTRFmRxuMbmpB/AJxVRYLkY/D9stQO4KD/zK2j95aDnQNLnsOpw07J4B5iPtj05vLibfe6k6OUeucgx8k7dKwia5RvBiIOBJY4GAq0oWOfjjYhqA+ldgeHgCGehWxAZxvrmA2PC2Bdw5MT8+I2m+onbaPRmpVZ4J6djinf292KJVB9llwbknyKoG5rxHRoae9Ef3eJpMpYHVUQ/W7zzj8iJLM0myvqHL6qjSkVGbE7Zl3tLEnScBlq2p2OgfhWzV67jMmfcBEnkDZDaSdDB0+dDEzYNfdIx+E0ErkLgJzobx0tZB11W9VCg0K/2fE1H/Pvt31pTMbsxvkBXTRS2KAGAA/Vft4xIlIoJKyAF7t3KR8kNZiGlleMxjUw/w0hZrzPox5ANxg1Ih2N1b0/5QdXw3mQYZlbepTx6ljm/sHsNFc5e+oL+XxXWMhUpK7/eu6pxYaLs4gPUBvhP/zMoh2KWcR+azMblFIe7FbkXjshPJqp+C0J/tEV4dolT/dfFzv0K18RIyv2XOM7ZBV9L7vNFtCSJa8LtXOi9nneOKUGDzzEP4Ikg5Pg4X88pkSWz9k4/CGbQ1seRcEGelBmDPZbUnC1AVezftlc78pBQz1UFBr6DLB+f0c5hDiZqHbZ78joVIiIKZXslisGMSDdyTaofcTXcBMbJO3zoK8kqnEEWiNtoCpjBFeLCildJxs6sugI6P38lD1Ldl4A0pwmnS3cEUnKQVK07zemV9/CyEVlNVk1Lzk1Bj56TjyGDADSGV1nqk4Tmc0PURsho3LF0+sRHI8csdc1iu6lSUrKiBn0z00zSKIGoFBxNzia8CVyIMCKwt7tPdH+SMS0vdSCZ1kqGf7NQuCYGgDuU3RqWvKWITXlaLhWcShK9AKZ1eQJEjPmd9aIevmdTDtTHPLQVeybaFbQoOMt7TPes+pc8kAxhpfUaphKKgPGVwgMHqJUqeRbmDxL6v/5rKYwvrHg5GTd9/guySqM7iwBRhVYf1bKSsY9ijferucYiQERV5e+brwMKgxnw7V2sc9cquxazQ6/zogGxbkJQk3yFOnFj6am82E4xr2ouAiunSuWVOff57yNbowKVntdxhcFwzvMcs0M8oTfLj9xgcf0jMXEldJNHU8F9RwXYzOr2XGArVKm5XUMeFMR9kUirLT0VuJYd2eDN8Cy5AC57UJMsRNQ+Gnj57tzyRtf2NA4Z0dL58vVtmke0nyl7Dch1XfFW/R/8A7uDfa8/jZsMairggSpcfaeani//66g/C3C4zPSfEPyUplG2Q==","layer_level":1},{"id":"fd993603-f6ad-4a29-be89-80399ccc2352","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"通用常量与枚举","description":"common-constants","prompt":"为通用常量和枚举创建详细文档。说明CommonConstants中的系统常量定义,包括HTTP状态码、请求头、数据库常量等。详细介绍HasValueEnum和StatusEnum等通用枚举的使用方法和扩展方式。解释ResultCodeEnum中定义的响应码规范和错误码体系。提供常量使用的最佳实践和自定义枚举的创建指导。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":6,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/constant/CommonConstants.java,crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java,crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java,crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:45:59+08:00","raw_data":"WikiEncrypted:xN69xsyfHUnwfU68aQhW4QQXyrvPvU/0YTBz6MOQ4G247s+ZXzrvvrYJmbAFqIz7P7rjuwZG3PaXho3P1cAk81EpA00euQoEZPtprdeHf9ipZy+R+9jGSWh332RwkQOC9xsVbvmVlZLpEcaCtXXKMBRsSM0ZWaZXP5grLxrroBGZCzpnO5dmIW4ZDzpn/XoYDFVffu2dwzRU8DJHIHdL1XfGdNpa695ysm44jAxrMCChnZhZzageFEZtfZihjPD0N7pBofxl8u+84vyk26Zg0+i3GMz2C/lQCiXdpFSs3x5d2kPTmodFqCti86v8RVvuOuaDDKYkhWtUBK2K8qFbqnRmmwvx4OHPLc6LcyC9Yoi83xplba9xvNmd0l60ipG8zJO9cVKnsXseX4S7ZAxwOWqNgPrb0REej9Q455ibGOnx89lcLg8jEzKBGgF8OFtC5w0ck8SYKwwwt7LacoZrpSt/FbnmTRnaAPbbVqH41u361xoix4pXgg4wk5kGsRpALUz3X4uXdUM71uMjh/pCZ3yP9WGcVH4kR/PNl4q4RsKzfkClOmQPnlhImnAIll5feFLtSCzIj/lThJ1OTb1HAC7LOrNALNz8NPvqleziAjEev9yjxX9+9d2v+Fg7szrOy69wOmqIFaEPNliZXI172adY2jmuZlD8qPPc39eV1v355fvHqg1Kio5hRpQS+ywO4a8B9ZkZwbna0rV9niwRPnN4Se/Qto+B2G/9z6AA/RylhUdClNVc8pGmFavJJtSlul3ZhijbDj0qQGl0DfKe/czsZBDORlMETv8W6N3fQGIYCUzh7ILQdSZO9L9k7//I1WIcpX0tZRitwz/rXQDDAMQvkrw3uXqnxofxM6Ab9xG3ym21JdNlUqAWHImEcW1ERbT8YUrKwaq3lXctLBlMjogo7xVHDnofulOgjIjFmqVPMNTSV3TMV2lge4lAJKcA9eK5MFRgG1FarfYY5SietZdK0ya3ra4oYTEuoko5fizE+GaeN6AHpUG86O+FOCtzViFuWXejYuhz5bd9uiWyDfrXb6OfWqfY9iRQ2piEEetq44VWCFhCvjvok1z7BMgZBhI0RaCxPQ924Rntou4vxrJOJWPod8rLC3haQcmXhgCHkiW9oLvfct9Li07+e7ZoW4fqjdYYHsGpDVdthk75LDioybE3rJmAu9Q/8qklcmE=","layer_level":1},{"id":"043bdfe3-f703-4d1b-928d-5f5665cadefc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"工具类库","description":"utilities","prompt":"创建工具类库的详细文档。详细介绍PageConverter分页转换器、BeanCopyUtils对象拷贝、EnumUtils枚举工具、ExcelUtil Excel处理、TreeUtils树结构处理、AssertUtils断言工具等常用工具类的使用方法。包含每个工具类的API说明、使用示例、性能考虑。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":6,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/utils/PageConverter.java,crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java,crm-base/src/main/java/com/crm/base/utils/EnumUtils.java,crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java,crm-base/src/main/java/com/crm/base/utils/TreeUtils.java,crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:58:25+08:00","raw_data":"WikiEncrypted:SvMc2PRoWqDcMfdzcPf97N9k/X3CAmdrcNtJiMgJv834CzQEkJYyXrO/i1eDfnSnlf7FCmatxpEM7YYSNAEB8X06Y2JFWDl50mrOFli+0s7biUaabgrp4e7bknyExu/f8c0oi93f+Y5g40W6CChHMXq2dxM4NoC5oaTMvMWutWwixsbIfuf7rpuUkKWINcEkP/7zNVVsMCAYeZRyQ4oiGIjkACeyu16xMCfU0zCmghsYT78cOD1HzZWiOnWcLiWliN02KvK7cdIhGrxEnj8CHxhPerPLXlzqsdJqae1I/trTv8k1JO56qJRNy0IuOiO0FA47PDZDnFwJezpUwGrmA5BB8g4/JKklk/1VOkkTnNbso1JDsAzXwVm1TshtNeRO8O1vldWdV3tltEkB4gBPYwHotex1ShitSrsBE7OCNxg4TsLRB/RvTZn573t/LKyASmw2Uj6fYB06ZW88Ntvq8Uj0RteWC+CgwmHMOVTCJCWffcfDadLT0ptfLytLp6JjQGYm5hUPwfwwYJUvnYfsbKc0e489iy+vQgaUpPpuf73Ud6LeI4I1pf0hcNFfY2G4y5qMn/S8p+TWdUN60qeRf5kZIf73WBSiVIk9Tev1ztiUe+J7+bi2Bx+WmbSGfWYHWH7j6/m/kBznKPnnjGI1+ZschegVHf1smfM8T7FC1ECj45qXBiIOucXAUW5uODbI3oY2vowhoNZpFcn59psQoWRlwDtUeyVsxprm0KjN5BrcYilcM86QhOuEJX09is9pBs/cfLci7JIKGNJGKCDhVM3eknLSx4216P68QtqhKDM4AZkED1t+8nHunpa1sdrGuuzdemNEtKzMVsorbuiwJ2gl+RWO4qqW9xuvauPdUUGH2h7u/ujkHbajOA3gXYiNORw6i8BujbsVTZ16tuMdJGILQb33S1632GMQrjyT1Kb8Gupj/u/J2szEIaJAlmlF2hY+W9ReGUnCDf24e0ibrbZWAHwJGkKVZQfrxyc2ormDjOeABtzaX2iS/E6Jgh9OQLd9OYg0W/YBJDZ85qu0VWw2PhfuMrTCQOsGsAFagUJIqLLgr1F/CYW2bNF1gMjGNSvttZvzIVb1yTxvqEipKe9QHU04rSqLvvSpP+8xIhKVeeAnv5kWNAikPiChcTqUVX4nwlF+n7gZr9HKnxwtgbq4e8aoV2CjlRh/DkigFzL//UYR1/eJ+ZEOGLw5N5SE","layer_level":3},{"id":"656bb585-a75e-4cc9-9935-1539b3c1a524","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据模型","description":"data-model","prompt":"创建全面的数据模型文档。详细描述所有实体类的字段定义、数据类型、约束条件和业务含义。包含用户、角色、菜单、部门、文件等核心实体的关系图和ER图。说明主键策略、外键关联、索引设计、数据完整性约束。提供数据字典、枚举值定义、默认值设置。包含数据迁移策略、版本兼容性、备份恢复方案。为数据库管理员和后端开发者提供完整的数据结构设计参考。","order":7,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-05T14:16:09.6050499+08:00","raw_data":"WikiEncrypted:Zb5TNaG1u/mRrgPr+sDyCr47uD+4y/GruMCqF9C9nxStxKZi2OWvk4ViC2NJmWUO/Jxugi7iel+AeINiHAz9cy3+U++ZP4sS/3UJ8ssvnVLZQWdpVUmN69o5t2AeDgxHIGDQDKYMBaOIKxWl4bzuneKi0TXUCwVehJAzyTvhZC8LdEYeannMeeMxyDoLt4GxNhZfGSd02sMYiceuTUksKgf6kEsI3sZ79Vp8uYwk0Uu87hkpBxlzzxdnaur8dnc3nfsyzSAQRdx9X3Tt2WlWZs+bMmaBr0jvYLmJ8xaayKi1bqb9+8wNAziEZwHkIUH5guRw5bsHB8qm/djLASlziLnknIeGWERgwfJDlALEvcJ9bvVsVigLR3outRmiYIVohtcpgcZ4eLzgKAdY/9K5kjJ+7pWGYAzTbMeiAndI1DqeQ0fgWP6PIPm0j0dmpKuzzLZkgQFulsjwT6iNoDO3Wi8BwbwYXEfVMgdMWUeHE1dp0ZTZdOxSXeAQOzwa8Kdxxg3qBfR4Kpbo3WkKv4ZYsGRE+z0XpQuwKO7312OR2Eg7o0DRP+iiUW3Dt3X8tC3o0hjvCHcmmpJEoiG+eDMaHP2Y94RWabD3xfKWR1o8rIxusXxYmLEAdbt+GIn/W4fe0OTsday2bwVYLYiOJDd/sPr1kenqYy59ak0zNKv51R7+OhoLRZViVcn3r3c42pyOOCHRq439EZ4RKiJLqhzgMjtKeaKGXdDgQ08mrEDeu00OKoNtXDoNRGs+16EO/4BatZqhV9kynRngMsyA9IC19Frux44QzEUlYhQhEVRHTkoVq3e9jLOkIN5R7gK2DXk8iDihYIBX8UT2kLbywKe9NubfeGOnRUNEkLSmqeS6FVIaWguy0kGVBXneZLKns7snbFyl7NwMF0tjMf1QnZbgkDKShLKgNf/xwzeMR/GxRdcG+gTLmRdckFyjDoxg4ihgJkaM2dryDhqmIC9/iqQOZ5y/u8/22qCnnotS6Y8aM/rScRyDQcL7Wan6ozPOMb+LwOGHTE0bpXnMV3DNZY5pi4Fo99O+QBB4y6BJEmVZBqryo19ulCFbuQf8PKQWZPN6Laigf+Y8kps4bgJYI0OZ/AK+8rt4WUILeYZieO4zLw+Rxd2ta89f0F3tFf2/lwb760GzTeXvqzNlQ4oIFn1n1vDYpUS19508D1NKEJkYlXXWhH2+cRsSUTochnegERlr/ekZBmrYcg7Qqqis+cdvZr+hWjavrCmz1ONpGTHFHgePtLJjOws3KUTpVGd+Pi3YbCyOS0dB794paeg/8RPtv5DJqjdXcC/8wVBlFfKA6HXNk7+pIUFJ54aCIYpag5R7/ME2CdOktwLt3DGzVdqUJiSi8lIsgHktErcdPycIcDAFjQCC7ZMvXmxs/7IcFFr/uVJlCNnIOQKJz+PNf9KQuggI3CSbC4Ct1c/GC1U36Ns="},{"id":"2e45bcd4-f474-4d34-9e28-98d74da5d24a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证API接口","description":"认证API接口","prompt":"为认证API接口创建详细的API文档。全面介绍所有认证相关的RESTful API接口,包括用户登录、登出、令牌刷新、用户信息查询等端点。详细说明每个接口的HTTP方法、URL路径、请求参数、响应格式、错误码。包含完整的请求响应示例、鉴权方式、调用频率限制。提供API调用的最佳实践和常见问题解决方案。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":7,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/controller/SystemController.java,crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java,crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-01T12:28:52+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YU57bnnRylQ+AqeY9X6/raLJYq57d/8iyLp3ZCX53ZchDFoCCtFKGz+DmEdPWQG8Bg/NQ0FEmWDA3o1JSnAeYprHTApDEFLhYn0vPE/a0R1oQkQ2zCSMCJUk6JPWi3Ff/OFFClo3o1EMwMKhKkfT+6XPFJ7TeLKQ2KKCLLgGE4vQHuQGWh1e/rkYMOELz8HuvCH/NV/VjPP7FeP1Y78NNRNMLW/f+XLHcbtSll8HoXb2RH38XPQaSzcPT2J8Z2ajeAG0pR1PfjcxaWXGHxGx7Kw6dAWqdwANqydIJrAEhqviz8M08fSdggwG7AZBMw2HKvfwBl5wS406W2a7/mzS7aZsdT00/Kpn5G33Fq/lHPdoA+KrjMUvbopouGns+SZi2R+MW7VpHR6ine5MKF9/TSy2+BTyjOP8X2CzGDn2DZ6QcuaBNC50pdXLy5gYpnjv5r4zY5W4A+xFWyWlwBWD2IAhQjTNOU3u/PLtCVAlP3Z4yu7CgI3PRymSw984b7FLbS3FwUz4Dq6uXU4O96B4yVp8JIxAMLfd+RuMJy/KhBPemeSNSR7Z9fci6T8xozwzEoanc0ISwHrlPI5GtE0zhsmXwGgrpDLSc8ubvWcFiiE76aWyipL15ArETnqukk1v3DyjCP2bTdrGrmYUCq2uv8biUofj5HJau2F1XXDyHKc9FmuybIa2sHlsnNKk1DgROrl+l65ZAsM9vji4LiKyhjw6/davM+BcrxtGSS1Lu7NzsynoOncSjQ5DHRBlnN5QQOLV/JMJXzmIxl+g3fpif2HSgP2FricdfjaDpGj+8QZhB94lZcaOMlCid33EMrqi2HAtiKP+vLUdwJazzO6+Y1obSQjiRujJZED9/8Wo9Ge9/PwNF6KVywnF6oPXgLYeACwthY3YCGcJFEiLs2FRzaUbaT5VQZc1k4SCAfcU6CVri9Gx+PZgnY6BewKjzoOrSOwov7+Q4Sddj8SPsBfrPVIt8axLjs6pElw+mcGl77DefHZlLx7WON+SOhNBN9IAbrfWF0wle8/mVIdIHxgMGnYHnTmZm1iF/po1b9ONmAW8V6sDO661/7jdZDu6TsPzeEjnSYfqhhUVS4JIaMfNmE8w5HZfydXgy48l0uGCaSXuxeSrST9o0ckx+2Uayz8r3DqllQ1QCMELm5wejX8ub80oi7r42AUTes8Y3n1Q/mgXUabME8tnGlu2+9dpB/kdkpyERdQeVnt7C8hn33HhTqLyKOIRlJGNgUPDi8yZZym3","layer_level":1},{"id":"0e2ada19-25e1-4d39-8cde-a5d9ea0ab4c8","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"领域模型","description":"domain-models","prompt":"为领域模型创建全面文档。详细说明BaseDTO数据传输对象、BaseParam参数对象的基类设计和继承关系。介绍Result统一响应结果封装和PageResult分页结果封装的结构和使用方法。解释DTO和Param的设计原则、字段验证规则和转换策略。提供领域模型的扩展指导和自定义数据对象的创建规范。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":7,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java,crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java,crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java,crm-base/src/main/java/com/crm/base/domain/result/Result.java,crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-04T17:45:24.5985513+08:00","raw_data":"WikiEncrypted:9fTixMuSRA59yaGkTVjDL5sEpI90fm9hiuBLZeHNGEvlxds7GbSeEHtRLvuOWApbjFLfUR4GebcDu7msjKRqzWyMyGLnGGvOzTl+SNmgny/soMp4kJYjaAMHQQi2yF8IX8dWFHD4pe6Ikx6XfPt8ifrRaSCS7My/s6fb5jzo4RcVsx2Lapt66YPM7/O0pXRFFX6cVv2yoJIi5vlN1Jg0ajs5i93lxiJiA8ydTwzAbHrFZ9lkei8GKcPAhCxuVMwTuRKVQNZZW2GAp6dGpfB2cu7c63iNHWMaAnETWrXcjl+FRKvNwlHJkyDhB9jpqUuuKF7aVbIJFQ7+j3z7QC86w48JFXsjLEI3TAFlzUkpdaVU478x9vvmFG+546RJ5aDspj6zfN8NuKFfmnMqJl87Brza6wp8PDIGlsn0ahy+QtGLdZXuNgOSG9qU61DbXgw6DpLU40v79hN+/7H4vi+9oWfulKenaZLWs76YLYkKvpVeq5URmXckpFTAhj0QLx8by1k16wRMGcB4nWDbbcGL3G7812MW6nUZt6s1wkzbG3S7d/BGtojqwr5Cx143d3hJRUMdaO1N7OUM2vOxrjU7U3Z5ThPLNNafIeJc0W+jZ6dsMy8f17dFh0LGNzVv6X2ntMR6bsSDa7JVgy9ur5yqBDwcmRxo0UB1qpHbRO876QhaQwv5+GF8e2fJwbLTur3b3V6Dzo0DqODIEJYjIMB16javrw9bnew2CedR2iGpRZKSo29vkWbTNRezc/4OETCGruFov+Im+kNJ8eGZ8rgC6JTtmzbIbwGx17gPVxE/Nx06UhmQ8WTxqhOQavUL+4iwDx2GDIMpA74CcEJ+j2xtqBJMaoumgjpCL6B+ldsGyHIAEHLtSdje+nmO9l2XLBA9cS4Gk2Ir1KUa6Oh7EF7/xd488lo5q3eMB4QKpZBrp+I52n6dCRtr+BvdswsAmtTWgtAkINb5drGGz2ibSLkPwf0i4qNzuuqXNGCo+cSNDKB5ISqqJg9AyHCCvyExE6XN4Fk8pd95pGQtxx3PgDu7AdcXXvKVYVrZVarHQbqPQ0YOrCzOi6q/xsqOkadd+ZSnxL5cg206t90TySl/pPc1WLU50bFC28JMeOpbcBTPEJ2T8qpuNZSZ5DN7sLesuzAzni9c/QNc2fOPfgwKtt5smF4W/GJWLo/ujqcpu9xFJTCXAopwNTEUnamTuprccZWLBf19VJ+zKhmZfNWQnXMh5KvCZFdhUxIar3pIwC1yuhqki1jM+HC39+2Rfuh3qDlr","layer_level":1},{"id":"41528186-7dda-49f1-8cd7-6bd4c5f9d31e","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"公共常量与枚举","description":"common-constants","prompt":"创建公共常量与枚举的详细文档。详细介绍CommonConstants中的系统常量定义、HasValueEnum和StatusEnum等枚举类型的含义和使用场景。说明常量的命名规范、枚举的设计原则。包含扩展新常量和枚举的指南。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":7,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/constant/CommonConstants.java,crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java,crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:58:43+08:00","raw_data":"WikiEncrypted:xN69xsyfHUnwfU68aQhW4QQXyrvPvU/0YTBz6MOQ4G3xyWzVl1VXJbNy8i3N/qL4OK9+zQJo8nt/jYtfMWHulNvNEET/2yRcXTXhmieXEMTmEwW4UMObsbAKAqtAqJg+6eHJxxXmkB1VelU65BM6AgeK4dzi7c1EEJaxkjSgYULUKzvcS3FWOBhMzFq4f/dNmgKHklFBud4J2uh7ZvfSTs15sdlaeb6+KbzW28YwwojBGYBQCAuRBB54/eDC2YfHOXcVruf+0gxCQnb0OKpeobuUf6nATMrSzyWDvkZE0IWW4WZYxcHOzWBnfeYG6aB6pv0FgP7mB4rHRbd2ewp3p65Ak4s6p2ZJbmHQfyew4nBmzeYs98xK7o0nmMNbvqIkfygfILFSpAWWReOXjriRTuCy37R/Ndu2bb0wQqtlXB6D8GUb3hTDwlhlD3Ui8KP7nPh+m698dZwn15NFw3WYWPOMUphKdMdyUCaK5HOtDVzLNRrhwdSdAfiTb2TT1fbUmwsvgPx164aVP+PKDv3JFOv86MieQJcPDNgsC/EWgHE5+3CzOv3z2g+1/zRW7KhkFateGQ3/OhCY4JRxXUljp62alTFSneiL9oKrroxlbpwFZcWuN23AoSC+AMgpiaDpOnHCg+AbHbTtaJ6GhVL8Y8sXX/MkfJ0wslJwymgJsV6oz06p1NkbgfjfIPmcvR10wicblq7/g+eUumWVk8wE2jPr5n3zr+au09a5rhpGMGrSFHcvL/UB6P870sS0uo0RdTaq3/MOga7YlW9BPfdPP5df3a9l4k3orvKjbH8eeg0BpUj/z+ISE3Ec6FSwUky/uYPTzk2WsU0Im2NMOjK3lZNsQt/YiMMoDWEPf18/8D4QyMkBjzFVttJq29TAhZyCDW/hYn/hKtSFN/H/vFZ14Axlxegq/+Vk/euSEK67HvI=","layer_level":3},{"id":"b7f614a8-4610-40ff-8572-1f023c369200","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"配置指南","description":"configuration-guide","prompt":"创建详细的配置指南文档。全面介绍所有配置文件项的含义、默认值、环境变量覆盖、动态配置更新等特性。包含数据库连接配置、Redis缓存配置、MinIO文件存储配置、JWT安全配置、日志级别配置等关键配置项。提供不同环境的配置模板(开发、测试、生产)、配置验证规则、配置热更新机制。包含配置最佳实践、性能调优参数、故障排查指南。为运维人员和开发人员提供完整的配置管理参考。","order":8,"progress_status":"completed","dependent_files":"crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml,crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:28:23+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllG3KeKoHrt3VUYbwJdfZuc2dPyQcD1PZ05yyIHRTzwtN/pshN+ZNfyeL35Bp8z/bRVSpvRkfSP1bYdaPvdOBh0q00sbGjeR9AZLGdqvHenuGC/HwVF/Ja3Yh4oIMVfW3LhSTpCoOmBFSdpWNO1S9EDOwYuoj+qS0KpA4YYfeVzFmyTbXWNW4DJpIl/D/nBbxM9luQY3ETbaqm/f9VWlmD1kOKyaB5vrXH56+J7Lq5bUFok5bef871n0VEMZr6yAIsJaT8iVRIyf/bjcnuXoRZ4MF+zHpm0STV7ph98t7i7V9+DGVhQYmnfEqUM1C1nDQ5gYUpAq0s9Pvyt5I/ux5TcHlZ8xveMv/TNf4OQJ4DvhPRJ9AMJUpaqzgY5hFOjRjt9Gd+V2G9LBKTvd69BfvNTCGk66DHYVTpSs36hF59aB194hf4xe5AKCsjlcw+BtmammPAyNqSCGSfY/ra6PlDub4k/x3gYxM2kSKTzvNP0bVjMP6DCbSokYXwLTMwPx6gqn08gc4omjNxp1leX9vXNmHEvI1P2jkKvnkrRWFWp1N2K4jxrhoO3cyi4clfsfgILZuT0LFPgcRqAdbXOMuoYnBDYQC7NrInC7YPOXdU5JeUMNlmSMbk/ugeEOArgub24QvoEkPWMZEkzkveHVkKRcQiGHVpo/kZqrwepDTg9BatBxK6Mpful+Cewp84tiKkgXs57oTqwR4WdcJmmNnUt+qa1NWvzIzYwcDWLGXZNdDAFIip6yYQO7iDsC4XPtCDyI9kMcfkuTYGchimv83PSgNMfSgVREzU36v0HvHiu2xZXffTXSjXL/PL4yCHa1G6SL0mOwXhZpyZwDk8AWTXNPcIqiZ5/GQl53hvZ63VZ0CUqL3zVcSRqlzG48X/nxosILe7hYUfejQF6jVM6xDjBcNETfbdMywXppiYWNedJGPTfIlITBGDFc58sJrDLhWhzefZ/v1ICZMAJcE52Hhg6efjHPayGP1k5zR62fFSdAj1nb0ddIk+5LqnlrDyDGQP4bTEGgbqZJquUw1erQleryJGZFl78FlVEtfR2H0wGaAln+LWADYGFVpmir3piIqbnFXfm8XdiJxqN7F7IbnAc/69I97PgPWopD8jPN09stQKTajlErrayq3dMxmmQoUC0J6YbVlr+rrTL9LwQmuoFSrbDbLyg/thRxcPn87+ZXMmFGXPUvfoCyTzUZ8oSoGq/it8Vbbw/OErZUSGMTYAunGa9bIjK4zWd/EQPzUrJMuAVCRHFYY9wIGbxWNV6u/EHS4h2wscCndQ1OS2bdCBQgjtU9uvWy/6VMI6GJs5U+hZ37Hd0jeSseqPML/zLroTyCegVXaN4P6LCt5b+3TXNuqZpsG+6fGEb73FcZsz2eXm6QbGYgQQdWrzSdNItJ1Uw=="},{"id":"b5692f33-9863-49b4-bea9-f7cd8bfb0f27","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"测试指南","description":"testing-guide","prompt":"创建全面的测试指南文档。详细介绍单元测试、集成测试、端到端测试的编写规范和最佳实践。包含Mock策略、测试数据准备、测试环境搭建、测试覆盖率要求。说明如何测试认证逻辑、权限控制、文件操作、异常处理等核心功能。提供测试工具类使用指南、测试配置、持续集成配置。包含性能测试、压力测试、安全测试的方法和工具推荐。帮助开发者建立完善的测试体系和质量保证流程。","order":9,"progress_status":"completed","dependent_files":"crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java,crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java,crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java,crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java,crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T11:58:56+08:00","raw_data":"WikiEncrypted:Xd2Zu8BM8p49theGlFJHkP7LNymxc1WsyjHwG1uqjX391VdN34XQRqMsMMIeEcRBnJexODjh7WY2XETLvWBC2w32dDBBriNb5LTtMndVZQqYKqcJ3P2hnUEa2tjrvWHP3GdzBYTKs9XV7yf7Ut7k9QgsgXLSF1tvKttfSyT3Cj6fuz64OADT4SmwLQNNUu6PunqQFy+oYJ3BKAJjnnQtQ1xd9ZSFRw8rQH4g5irCZL1ISQJcD6exsPcrHiR3hn2hzZlqz2Nl8FL90M+AIvC6wnof/6vW6YZ/q28m3f1lrWbKQQfgmca/JWNgIMRlu3XIKtUurCn4FNwd/X9jW958v1uyXLNM+71LEuHGPRXdOqmuVKwm9xgiy8WAku6FbSJnsP9XR79PCngiSRJw1Cqh+r037SfBpV9xICE4EQKv3dkKGwwrz//k9m4TBlKHYnSAFBgJCBpkKdLtjz2aYKTpDCXvXCfL+49aYmcJDMLv/4d1BL3vj1oRJ7SMdBjfzqdBQ4H8twZDXEev9SfY26du6GevyNqhReJqaGetw11QgpZw39hu3vUaWPijpx0EKXe3AxdadyGg5kgyc2Bzc3eegJv2RrM9/3xt6Ni4LvygXDazz4IXFBlEf+CyvN5Bl6TumlrgCX2LubszP+cR/xIyLkb8hGkQ0q6OGdvoJ2ru/ew1eY298C63+dyP1GYStotXOZFPc1EthRPR3iQXUWJom2X+xcpZZROQXgcR5olRhH4YLI6LC4Xnqhrpr8seQomGv8C5WfpyjUDcBj2IyepDzUbfD2sMxqwDlfeQplPRibtEohuz8+X5YvTTG080LdbuRsBqm4EFE3vaVzdtmwa/HAc7NQtn5xx0iYWrrKbLGI2MGjsXaoRoqtPKzTd0yitEbpYxqNmNb+n0q6OLVdjqrWKOTYJSa00MDNBOOdeUDkT6Sy8ChMSNyhduSHxEQA5SMwyPxSz5ileMvuP1iy0xr76wwddbtMzNh+lC/MlCunMXwZohF1oEZQK8A/U2IDF6MU+SpvCUciHhRtt0/2Nn7GHzOuT4UA9I4vtBQt4afRGnI1XWOocBYqTSkwrQj+J1qTalYAXf3jNEgHj9OBrF0p30a3zPfOLoIwnH2TKT7FmLhfB5UkJyMFqxlTqqRfMl+FiWwoXyTjGByi5rfrstgi6/UoZWUunAkV8H5+qdBpHcVhmsOrHAxFCystNL2XZpdYmb9Qw9CesRN8YpKfdu6U8ZGXzP93sFfByhLZ4svnu5sW+LonZ3uZcxN8mX34C1mMFEbY+S5TkuyV7vlxUe1TXYituIFpWvwQe3u6R9+qEGYAWxm9NdWsjBYBBJ2VBU8kTLjqUr+4fNrydHL2xHBkm5u1oYddnesSZXseJCzQhj39YpOR7LgpPTl8dMXYuhsyb1tEKUlxEgS3c7Ec8YCKnBgqlT8q3nWf7Y2TijHxhQF2/Jie9xkhPzuqHrjyb7EuclRewrglTXRYTQKBp0PVc/g9YgSOhjO5Hj4PwMSheE3W41I0bhzu9/k8lv7B+dF29YKHh+qFx4HRGHhfIkZLsq4r+Q86VooRxlnG8D1y9JrPVWW/Trr56nvZFUneT/7+5q1PzN6QHY725G7Xk1Dg=="},{"id":"41e2eacc-469d-48ae-abf2-a4ae1ea5fe7e","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"部署指南","description":"deployment-guide","prompt":"创建详细的部署指南文档。介绍Docker容器化部署、Kubernetes集群部署、传统服务器部署等多种部署方式。包含环境准备、依赖服务安装、配置文件管理、数据库初始化、服务启动顺序。提供生产环境优化配置、监控告警设置、日志收集方案、备份恢复策略。包含负载均衡配置、SSL证书配置、域名绑定等运维相关内容。为运维团队提供完整的部署和运维手册,确保系统稳定可靠运行。","order":10,"progress_status":"completed","dependent_files":"pom.xml,crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:29:17+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3wxq1Ie83+Lf6EMuycQSN7s3NFV5ooa3Scq2B9C67gTKq2J61WmIo8uwzopEI3o+rx2lsofMss2CX7FP58Vgcz+og0KbUNqQDj50zlqxUqNYpbb82KyHxixeFlhldO7uQxEHQv6YcekylkodC4dgvrkvl7y165qe69CoGKu9bff1v3aEUbqUYIidngIeLTndUHkwQ9oZyKoMNa4NOGGZlxiw24ue2m08ujAiVlxEC6IAqJ/emub1onbqdxi5UuC+qCp7lcTkoRsAooth0gRC6O+Bn458rSDGUP3ZDrvq/iQCqpcnyMraQDN4y7rmRQlXq7CpCzOyX7QAbgy2EPJCVxlS9hD4z0RQQb/U+oT03qpzSVSQcGA/jd39C/KR/X+XKr1gfzwq+j66INDUNP3FvRb12cXMi1j3yzvAWGlvKVuXpWKvUzBmokC3k6abZc9L93E0Kh+OE9VRgmQK9PKD/YcfaGbsAJZ1KJiZLtuAosCMxQbvUnteoswRCtLFqAIcp1hFenta4N73OAApY+pwA32VNaS5paR+cqoqR8mm46YzT6+nPuc6oN6oGGH5VBLPrVBdFAq3J2PY4I/VsRLKIarnNaMkaIDAyWli+lxWCYKoUnhGYVMAqwIsJEw/SiVgBhY9ehufgj1deVTI/gxGMs/50/bxwW5UpQFyAd5/PcJkJJQhI+UBsH5ZGqIbs6E5VpWTwz97sES9GZWyC7DLZIY5uyP8V7RlAI7sKhJblx87Ncn5S9A/YOc/19md93ohtBf2VAWZaZ53TFGOGXhEVP+5a3zXiFWKupw21RTd6mhJ6JHqQY4t5If4l5l/6PDp0/D91o/eem+0RSaj8ML7vAz7hHb5JWRh+1Ffv7tAu4lq/4QySh/1e+smZkDWLyrMlVpwNNVrSuWLGXA2FdZsjZDPwzxGSJrL3ywgQyRR2v45HX2KIAIelgrWCHQZAbCsTjNtwd5po21Fs3j1yElEYLBlaZuR19v/qYfC6MuCjnP1DuEKyin4bb4juMA7LAiEo40DOWfTzG1AL1JOKB8HATYyIQN4HP4rXx7YmSmXo3pm+wyT6Zx4JeUbQGbtFAr05n8nYjA0rPl3Mw/IsyX9NYZOi8Zp0qeUouUpHiDIuKZBlqnxUtAOmr77AGfYaQR4AJSS2TDDus8tP0YTrNGXLTjGEm8yWYwKMA67+9B1So5OdGNcvKAX4lhm1eiPvdi/RLuM2Xg0oFwmno49LKv9mgrL2j/3KW29AhslrP9crOD07IhEjh/YGUh4SffoaOre+Vw=="},{"id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"开发指南","description":"development-guide","prompt":"创建全面的开发指南文档。详细介绍项目开发规范、代码风格、命名约定、Git工作流。说明如何使用基础框架快速开发业务模块,包括实体类创建、Service层开发、Controller接口编写、数据访问层实现。包含自定义注解使用、AOP切面开发、消息队列集成、定时任务开发等高级特性。提供代码审查清单、性能优化建议、安全编码规范。为新加入的开发者提供快速上手的完整指导,确保代码质量和团队协作效率。","order":11,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:29:22+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9C/ucQxiwh0okVA48AmODs5RKNS8ZgNngqmnHSFcG/1UaJxx+3dUn+EkMTpYUsOg40rL22hMnvmVAYyZuFSVJGOdkTZGYqMmtuVOBgvosMCJMBUhMuSqPW1JNhmnJrK+r/EahVZyS6RLU2o1sE8vOtilgPcAzRyJjJUHENRWOLpJsLNpGVdO9ieUOF4AAgDoa9RZkCYyXeP2oI8r0j5mDkRr9lS+uNxYQl9W3vcS87521SK/GdqCveS7u9RNn47V9eBdXRtsSVcLaz44enDFM71L3lP7E9S8tQEcfWUlHB/ysvKejvZ0EARolWf066vCPuHCObhxanmxCgQk2OGjTZc1qAw++emB+ddyYoS+0uNc9ctajroimADZJ5zxBBJI4sYf66QjiDEfCynMBrwz3+oqj3s//CnN1yWneVDJ2II3X6uZYUYCZTynCOHXpwWUv/grPadeVTbEpesCUJ+CFuv4J67FmkeAXWrxDfiptMbxKkE1C8sNHTXl2KAMJbXA+Zb21cG0EzgtlXvBGtW6TYKCbUwBMMuxfouP17SuuSjnAKUQF0Oq+/mPzFXLOqsojj02FLSdAsw0YqFGvKEwH8ngzN99B/HzgF9P6gRhVeV+X2qmkXtnyzqLD0u/E3Z6A8WYeYChxux+mMYAN2HDgjNMb2cOc5aknCzPlfY8iulLXd/QQdECS/3RELbfwHppdQlfipTzjE4/ldIObkYl6iQXi8mi/99gKOeB90pdTe2hKhT/UJQs4PRJWoDpdK25KIrZ0nO0G1pXhVHwNvZpkmgHxnhnD7hqAbroRqFG9cjsLBRuciGsk6noS9rjjlWbJ25mslDnY9r1u08rVfsUeLcqAMZ0oOL8ICpZ8/fioirhIxGpQ+4GjkuC9VUdaVrwZmWQeBp2p6lgpEfocykT+CA72P5T4pbF5eNw8E5XYZ+vmP/h1pdBAZV+wjKJOoCnY3QOl2HbxlgEsLSfNdXdoz5f6aBT+ru/JuCklRg3H04M/X0d9PI8rnrjNIsgedGajsUGBBhdvkgeATOzASSl16IrNJ13RiNQkno48dD5GU++urE6NTfEKJOc9oP625h696miexNcFTV+6dX6JQ9OD9Dtk+YjenQiWIiaQ4uNMIivJv986dTU6f46holmicTxFADR/v9qOxffu6wvNnKyeXrNK4qIkY2cB3yIBgwxEPEoOyL63MzN5Vi+ag+IhLStilkM5BqDZSuQ+E2TomaLhmql16HnPJJkEO9PcFC3FlcXuUHp+hvX3NqCSzq23O+e5CpzHJ0wVJnaieIh477xNO/VL+CFbol1NOk7lkWX65Zb0zZXNd5dzDmylRnJrhxoeesWWKSMJfAwad2ypYvY++kkDcwPoqB3liNovX9hK2plBXNE7T/foc1/eiXU1wlnBmg=="},{"id":"8fd250df-a358-4483-be79-1c4a2b69ed9a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"故障排查","description":"troubleshooting","prompt":"创建详细的故障排查文档。收集和整理常见的系统问题、错误信息和解决方案。包含认证失败、权限拒绝、文件上传失败、数据库连接异常等典型问题的诊断方法和修复步骤。提供日志分析技巧、性能监控指标、内存泄漏检测、线程死锁排查等高级调试技能。包含常用命令、监控工具、日志查询语句。为运维人员和开发人员提供快速定位和解决问题的实用指南,减少系统停机时间。","order":12,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java,crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:30:13+08:00","raw_data":"WikiEncrypted:CaKOW8OSSWs4aEYk06Hu0hGGy7zXJE5t3XZJK+9x87X6q4zHAytjLlmcpwH9PAb9okQW7m6Z5SF5zgqYCgJVTWUM+OBP/CzepXICjLz5iwHNgtkxVgNWamHmYCSftZme59WDnY4bkZogrO+aPJ0m7Hn2m0u2FEZCwjlmuqcBXaGpg8OFCIgK0L0olZWb7hl78WX2ICHtVHhxInubVOoctMtYp3tPc0AKqtjdFEvBBFVPadSSbGUdJqz9oQc4PZfITl4AQDdbOB4n0tTI60H4PR4G95kmjpEfU6PdReQYC1a34zu0XOTpZb4Xk8ACnCbOQRYYQAqcXz5Lk8Oh4edYBjO8iDskiJVNFi0aXYONNbxJjtDyIzUgAwkqo8MYYc7F5I7q3UdPRcbvcr7cr5rrdZ94yadlxTT/E4cyI51TbDj/uyG0M8TXmmdHAxXk2N2TUXVohS94OXfTNiW4Y7Br2Vj1pxXsUxMdFs5NfhQzTvSTG9e6Ta+a5u6PWDN5qBN9z8enUpzAxVPeQne47VHu00diX+kMUGOfblrICCO0c7AyemjYd8beNf3ibUHKluWr8CnsMOp1NzkIY3LuQieFv/Dt97Ea7+jccD4+qa/iR3uTam3cwUqppGx8NphDF0iw8YNsd22jHebo6TifS8COrcmQZnnOCeoqYQed0Z1Iy85gyA6yMt6+DtOQnRRMIcWRim0uPrKDo1nCfl+8BhIRHGJu2ESZFelAUYwiimmQ9ZArGQSXG05xkxvu4yqkKT/5MKxOQQgdlfAWAsAC7Etb030uDubHfvrEsqNR+B5zvLeNZWNAdABm0Evnt0j5B2KMByju5RQ5E4grV4VAIKhcixV257UPCg8Z/X2WfE79np/Jll+7J/0PoHN9avsLsJUQQPElaTokmX8BFUD45w+P8ggH7d4rYBmWfVEhDEH4/Z+J5497CvMIrz8RJ5faVk3x6kOP1QpLqE6MukHYD6Xamla1jBrKOAuJG97q5C9Vpfh5qjvo2Z+1IEgv1hU8XOsSCigRGRGBPHRC/WwbZos2E4/jGdOz1VTPyUFO4KznBkTAMoZSPLAq5De0c3Jyc2bPuYSI2lEvUdrk5sn/drz7f364Js/d0GWtqcvIHvLlfZ5PwhG8zmRwvMKaCAJ0y3d81XP9I2cx+GaGTBZNMStUB3JpxKZanaJEYSmpEkItXDqCXRAmdiQVOnwp636Kj+Qp+m6jfIGsEvEnCwutgPvL6HvbG7Z/HGS/7yUWBHHIE6oS/Xm3zXT0KMk9p9b3dIoDV8ZKo+cp4xPeuMga775ly5CYy6OGzrSALY0cknSYrFU9bi6PL+WCzuxtuBke5y+YuYF2Df36cgru3MfSQ9ti9A=="}],"wiki_items":[{"catalog_id":"673ed306-0e91-4381-a45f-07865c6c3582","title":"项目概览","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6d8082c2-bade-49fb-b470-995db7466303","gmt_create":"2026-08-01T10:25:31+08:00","gmt_modified":"2026-08-01T10:25:32+08:00"},{"catalog_id":"5f6ff167-f16e-4f8f-8266-00548ce0f9b6","title":"快速开始","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"733d25f7-9f61-4c40-bd05-7b6bcfb1dc52","gmt_create":"2026-08-01T10:25:35+08:00","gmt_modified":"2026-08-01T10:25:35+08:00"},{"catalog_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","title":"架构设计","description":"architecture-design","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","gmt_create":"2026-08-01T10:25:40+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"catalog_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","title":"文件服务","description":"file-service","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","gmt_create":"2026-08-01T10:26:52+08:00","gmt_modified":"2026-08-06T08:45:06.6686703+08:00"},{"catalog_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","title":"基础框架","description":"base-framework","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","gmt_create":"2026-08-01T10:26:52+08:00","gmt_modified":"2026-08-01T10:26:52+08:00"},{"catalog_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","title":"认证服务","description":"auth-service","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"dac07694-6782-4f77-bf00-00708c5e78c7","gmt_create":"2026-08-01T10:27:24+08:00","gmt_modified":"2026-08-01T10:27:24+08:00"},{"catalog_id":"6e92351d-04cb-46df-89a9-1e2f43b46552","title":"API参考文档","description":"api-reference","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","gmt_create":"2026-08-01T10:28:01+08:00","gmt_modified":"2026-08-01T10:28:01+08:00"},{"catalog_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","title":"数据模型","description":"data-model","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","gmt_create":"2026-08-01T10:28:12+08:00","gmt_modified":"2026-08-05T14:16:09.6050499+08:00"},{"catalog_id":"b7f614a8-4610-40ff-8572-1f023c369200","title":"配置指南","description":"configuration-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","gmt_create":"2026-08-01T10:28:23+08:00","gmt_modified":"2026-08-01T10:28:23+08:00"},{"catalog_id":"41e2eacc-469d-48ae-abf2-a4ae1ea5fe7e","title":"部署指南","description":"deployment-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"679892b9-0f46-4aff-a899-ecc5bae086f6","gmt_create":"2026-08-01T10:29:17+08:00","gmt_modified":"2026-08-01T10:29:17+08:00"},{"catalog_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","title":"开发指南","description":"development-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","gmt_create":"2026-08-01T10:29:22+08:00","gmt_modified":"2026-08-01T10:29:22+08:00"},{"catalog_id":"b5692f33-9863-49b4-bea9-f7cd8bfb0f27","title":"测试指南","description":"testing-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","gmt_create":"2026-08-01T10:29:30+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"catalog_id":"8fd250df-a358-4483-be79-1c4a2b69ed9a","title":"故障排查","description":"troubleshooting","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"a3aef903-17a7-4375-954f-ebb4995efdab","gmt_create":"2026-08-01T10:30:13+08:00","gmt_modified":"2026-08-01T10:30:13+08:00"},{"catalog_id":"c72fcb57-495e-4c32-b5c2-159484464f6b","title":"整体架构模式","description":"overall-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ce03262b-4baa-4304-84b5-4f936862ebac","gmt_create":"2026-08-01T10:30:23+08:00","gmt_modified":"2026-08-01T10:30:23+08:00"},{"catalog_id":"d882e07a-3f3b-4d7b-86f3-fa46c56cc817","title":"架构设计","description":"architecture-design","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ec96e8c3-c43c-463b-b4ba-7a9019ee0aff","gmt_create":"2026-08-01T10:30:47+08:00","gmt_modified":"2026-08-01T10:30:47+08:00"},{"catalog_id":"75cf3e71-a859-4739-ae6f-bdeacbcde63a","title":"认证核心机制","description":"auth-core","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","gmt_create":"2026-08-01T10:31:02+08:00","gmt_modified":"2026-08-04T17:44:06.5491123+08:00"},{"catalog_id":"63b8b110-d9ea-4a5d-9eb6-0cd4aeec7c8a","title":"文件上传下载","description":"file-upload-download","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"db63226d-3f30-498a-9bd7-2de0049e1d73","gmt_create":"2026-08-01T10:31:18+08:00","gmt_modified":"2026-08-01T10:31:18+08:00"},{"catalog_id":"3c375076-c8fb-460b-95a8-f4c6eb60af94","title":"认证API","description":"auth-api","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"176adc32-f844-4e47-91a5-ec14bd5dca47","gmt_create":"2026-08-01T10:31:57+08:00","gmt_modified":"2026-08-05T14:14:28.2401317+08:00"},{"catalog_id":"99d97aac-8777-4bb6-aec7-edc5e57ac411","title":"通用实体类","description":"base-entities","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d3d1fc96-5f27-423b-a3de-43c5c5ce122a","gmt_create":"2026-08-01T10:32:06+08:00","gmt_modified":"2026-08-01T10:32:06+08:00"},{"catalog_id":"e722ef25-3c92-43fe-8ec5-3f18ed7dec11","title":"用户认证模型","description":"user-auth-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"da156be4-8933-4ba5-99cb-63907914b9ad","gmt_create":"2026-08-01T10:32:27+08:00","gmt_modified":"2026-08-01T10:32:27+08:00"},{"catalog_id":"31af04df-8cd2-4a05-ba13-06b468b471bc","title":"应用配置","description":"application-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","gmt_create":"2026-08-01T10:32:56+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"catalog_id":"03573e0e-c8f9-4d34-aa69-f15601d7e542","title":"开发规范","description":"development-standards","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","gmt_create":"2026-08-01T10:33:13+08:00","gmt_modified":"2026-08-01T10:33:13+08:00"},{"catalog_id":"44c82594-e392-4a1e-8517-2c526989faa2","title":"技术栈","description":"technology-stack","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"918c82b4-acd2-47d1-9eb3-656deeb62e27","gmt_create":"2026-08-01T10:33:18+08:00","gmt_modified":"2026-08-01T10:33:18+08:00"},{"catalog_id":"65c8fce4-7186-4278-af29-31083933e088","title":"安全架构设计","description":"security-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","gmt_create":"2026-08-01T10:34:01+08:00","gmt_modified":"2026-08-01T10:34:01+08:00"},{"catalog_id":"6d5b5dd3-2110-4c67-91ab-a4af568b1fcf","title":"文件预览","description":"file-preview","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"36b15a35-52f9-4e29-ad05-6dac66f00c14","gmt_create":"2026-08-01T10:34:15+08:00","gmt_modified":"2026-08-01T10:34:15+08:00"},{"catalog_id":"10fe110b-0599-47e5-aca7-ce0be9725463","title":"用户管理","description":"user-management","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"1058e349-f116-4c95-af6a-eebc7a32cc25","gmt_create":"2026-08-01T10:34:45+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"catalog_id":"944b8007-7a9d-4625-b67a-994c17444047","title":"系统管理API","description":"system-api","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"36e9f3c1-b81c-4a57-bb99-3b15b6569af7","gmt_create":"2026-08-01T10:35:11+08:00","gmt_modified":"2026-08-01T10:35:11+08:00"},{"catalog_id":"36b2b0a8-2baf-4ee8-8bd6-9a92f4799c8a","title":"基础服务层","description":"base-service","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"be5bf550-c68c-431d-ba89-9836d61bfdf1","gmt_create":"2026-08-01T10:35:16+08:00","gmt_modified":"2026-08-01T10:35:16+08:00"},{"catalog_id":"93798792-5525-4a76-96d6-4cfffc0b6918","title":"权限体系模型","description":"permission-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"883d8163-419b-460d-a558-eb118e4a06c9","gmt_create":"2026-08-01T10:36:03+08:00","gmt_modified":"2026-08-01T10:36:03+08:00"},{"catalog_id":"5c0faa41-8ed8-4869-bd14-7c05941d011b","title":"数据库配置","description":"database-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"57308b29-b058-46d1-ae1a-cab06e6e3e51","gmt_create":"2026-08-01T10:36:11+08:00","gmt_modified":"2026-08-01T10:36:11+08:00"},{"catalog_id":"f361d96e-498e-4429-aeb9-97176536e9f4","title":"框架使用","description":"framework-usage","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"2c71e522-4140-46f9-9edb-90ec500c07e8","gmt_create":"2026-08-01T10:36:12+08:00","gmt_modified":"2026-08-01T10:36:12+08:00"},{"catalog_id":"84d1852f-5d73-48d9-8e67-51c02f002f84","title":"数据访问架构","description":"data-access-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6a3ce482-07a4-416a-98d2-110c5877bf11","gmt_create":"2026-08-01T10:37:08+08:00","gmt_modified":"2026-08-01T10:37:08+08:00"},{"catalog_id":"206132d0-398e-47da-b31a-d5a00714ef04","title":"角色权限管理","description":"role-permission","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"34ea7d69-8030-495d-8782-3aa087c80de9","gmt_create":"2026-08-01T10:37:38+08:00","gmt_modified":"2026-08-05T14:15:15.2241292+08:00"},{"catalog_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","title":"模块说明","description":"module-overview","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0870c57d-c63c-477f-b69e-7799461cae3a","gmt_create":"2026-08-01T10:37:45+08:00","gmt_modified":"2026-08-01T10:37:45+08:00"},{"catalog_id":"be63d49c-2198-47cd-a738-469331301903","title":"存储管理","description":"storage-management","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c20b2e4f-5904-4ba8-ba7e-7e73b1874278","gmt_create":"2026-08-01T10:38:08+08:00","gmt_modified":"2026-08-01T10:38:08+08:00"},{"catalog_id":"94ba65d8-c0c8-4b05-ac7a-b2fc2bea1ab3","title":"全局异常处理","description":"exception-handling","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"5a19aa15-dc0a-4794-a39b-582db554acf0","gmt_create":"2026-08-01T10:38:36+08:00","gmt_modified":"2026-08-01T10:38:36+08:00"},{"catalog_id":"b7dceb3f-2af0-4478-a20b-90dfb2844564","title":"文件API","description":"file-api","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","gmt_create":"2026-08-01T10:38:56+08:00","gmt_modified":"2026-08-06T08:43:51.3339554+08:00"},{"catalog_id":"ab8b3963-2438-4d59-8c5f-4a99380ab5a9","title":"文件管理模型","description":"file-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f41f75b2-5d32-41eb-9c7e-db2d987ddfd0","gmt_create":"2026-08-01T10:39:18+08:00","gmt_modified":"2026-08-01T10:39:18+08:00"},{"catalog_id":"efca4d87-f0a0-46f2-a4f8-67caa3f933a2","title":"缓存配置","description":"cache-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","gmt_create":"2026-08-01T10:39:34+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"catalog_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","title":"高级特性","description":"advanced-features","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b04efc93-7ddd-4987-a71f-d5001040edcc","gmt_create":"2026-08-01T10:39:39+08:00","gmt_modified":"2026-08-01T10:39:39+08:00"},{"catalog_id":"a131dbed-4290-4582-bef8-49b15054143d","title":"快速开始","description":"quick-start","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b574348c-289c-42ef-bbe5-f18434e0f9bf","gmt_create":"2026-08-01T10:40:06+08:00","gmt_modified":"2026-08-01T10:40:06+08:00"},{"catalog_id":"903509ec-841f-47d8-b6ee-ee2e202b6d4c","title":"缓存架构设计","description":"caching-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f34d9fa4-1ba0-428e-a8bf-dc560bb5c61c","gmt_create":"2026-08-01T10:40:30+08:00","gmt_modified":"2026-08-01T10:40:30+08:00"},{"catalog_id":"e8319196-8371-4fce-8507-3ce68e0fd862","title":"菜单权限控制","description":"menu-access-control","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","gmt_create":"2026-08-01T10:40:34+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"catalog_id":"45d01f64-96b6-4edc-8c0c-d25d7f250025","title":"任务调度","description":"task-scheduling","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"9c64cc91-56af-4905-b362-8808cd7fdad9","gmt_create":"2026-08-01T10:41:00+08:00","gmt_modified":"2026-08-06T08:43:59.3664927+08:00"},{"catalog_id":"ebece36c-dab9-47b1-9a6d-806b3c1b1afe","title":"基础实体模型","description":"base-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"bd0bea22-698c-4a21-9e56-4e8d3a475ba7","gmt_create":"2026-08-01T10:41:36+08:00","gmt_modified":"2026-08-01T10:41:36+08:00"},{"catalog_id":"66713b0f-71b6-4081-94be-b02b5c149d04","title":"测试指南","description":"testing-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"7ef884a5-5749-405d-9da2-6cc20683c050","gmt_create":"2026-08-01T10:41:42+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"catalog_id":"23dd7f77-e190-4852-b94d-17d2b127f16b","title":"安全框架","description":"security-framework","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","gmt_create":"2026-08-01T10:41:55+08:00","gmt_modified":"2026-08-01T10:41:55+08:00"},{"catalog_id":"b9f48f07-3a5f-4992-8336-1cc0b8827e46","title":"文件存储配置","description":"file-storage-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6082a318-56e5-478f-bfac-17723c2bd127","gmt_create":"2026-08-01T10:42:50+08:00","gmt_modified":"2026-08-01T10:42:50+08:00"},{"catalog_id":"eb945786-ac59-425b-811c-b0227a46a7a9","title":"存储架构设计","description":"storage-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"5a282910-9cce-41af-8c7a-7fb5d0d295dd","gmt_create":"2026-08-01T10:42:52+08:00","gmt_modified":"2026-08-01T10:42:52+08:00"},{"catalog_id":"bae93960-0541-44a3-aa2a-bc7310c656f9","title":"部门管理","description":"department-management","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"a92b51f6-5cdb-4a85-b3e3-12a18d707ab5","gmt_create":"2026-08-01T10:42:53+08:00","gmt_modified":"2026-08-01T10:42:53+08:00"},{"catalog_id":"55a27b34-d92d-4f16-b9c2-00952e271280","title":"安全配置","description":"security-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d4105695-2094-4939-be9d-cf30437aada0","gmt_create":"2026-08-01T10:43:52+08:00","gmt_modified":"2026-08-01T10:43:52+08:00"},{"catalog_id":"8650f717-ee3a-4115-8333-d4743c840781","title":"核心配置","description":"configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","gmt_create":"2026-08-01T10:43:54+08:00","gmt_modified":"2026-08-01T10:43:54+08:00"},{"catalog_id":"a07393e1-3adc-45c2-9fab-ff9568539c8d","title":"调试与故障排查","description":"debugging-troubleshooting","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"47dc438d-d49c-4082-84d6-779660f0d768","gmt_create":"2026-08-01T10:44:04+08:00","gmt_modified":"2026-08-01T10:44:04+08:00"},{"catalog_id":"c599c1ec-9ed0-4ff2-ab5e-0d5a0461ae11","title":"工具类库","description":"utils-tools","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b50c7b86-b029-4352-a2e6-60c5e592e789","gmt_create":"2026-08-01T10:44:52+08:00","gmt_modified":"2026-08-01T10:44:52+08:00"},{"catalog_id":"33f9a0d7-aea6-4324-ad3e-39d4ce558625","title":"雪花算法配置","description":"snowflake-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d408e95a-13b7-4ad0-9fbf-2191ed2bfa16","gmt_create":"2026-08-01T10:45:02+08:00","gmt_modified":"2026-08-01T10:45:02+08:00"},{"catalog_id":"55f54320-f631-4d95-96d8-e7b9f17024ad","title":"数据权限控制","description":"data-scope","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"85fd498e-ba52-470f-b25d-ae190d07e1ac","gmt_create":"2026-08-01T10:45:02+08:00","gmt_modified":"2026-08-01T10:45:02+08:00"},{"catalog_id":"2e45bcd4-f474-4d34-9e28-98d74da5d24a","title":"认证API接口","description":"auth-api","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","gmt_create":"2026-08-01T10:45:53+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"catalog_id":"9c1038a1-5ae8-45a4-9c08-2004a4595503","title":"第三方登录集成","description":"third-party-auth","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","gmt_create":"2026-08-01T10:45:56+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"catalog_id":"fd993603-f6ad-4a29-be89-80399ccc2352","title":"通用常量与枚举","description":"common-constants","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"745079a2-2d3e-4e07-8e12-2b0c77a1aa4a","gmt_create":"2026-08-01T10:45:59+08:00","gmt_modified":"2026-08-01T10:45:59+08:00"},{"catalog_id":"0e2ada19-25e1-4d39-8cde-a5d9ea0ab4c8","title":"领域模型","description":"domain-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"aac0b656-e390-412c-a1a3-16b77a280875","gmt_create":"2026-08-01T10:46:48+08:00","gmt_modified":"2026-08-04T17:45:24.5985603+08:00"},{"catalog_id":"fa36460c-e07c-429a-bed6-e6c66f7f39dc","title":"认证机制","description":"authentication-mechanism","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"e5687cb7-c956-4dde-b6fc-3972ea916e5e","gmt_create":"2026-08-01T10:46:49+08:00","gmt_modified":"2026-08-01T10:46:49+08:00"},{"catalog_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","title":"认证服务模块(crm-auth)","description":"auth-module","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","gmt_create":"2026-08-01T10:47:32+08:00","gmt_modified":"2026-08-05T12:14:49.6781106+08:00"},{"catalog_id":"2c7b95d3-56df-45e4-be0b-d647bcd02b52","title":"MyBatis Plus配置","description":"mybatis-plus-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"291b69f4-e014-4afa-b35d-55cfbc845b23","gmt_create":"2026-08-01T10:47:44+08:00","gmt_modified":"2026-08-01T10:47:44+08:00"},{"catalog_id":"cfda0d47-7134-4fb1-b1ae-fe5bc943bcb7","title":"数据所有权控制","description":"data-ownership","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"3fb2d355-11e4-4d85-9b53-cec9e9330b0b","gmt_create":"2026-08-01T10:47:46+08:00","gmt_modified":"2026-08-01T10:47:46+08:00"},{"catalog_id":"2d853bfb-7cd3-44ba-9bf7-a683edb4c2ad","title":"自定义注解开发","description":"custom-annotations","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6789c32b-de31-4bf0-8ec9-7ea000a6266e","gmt_create":"2026-08-01T10:48:34+08:00","gmt_modified":"2026-08-01T10:48:34+08:00"},{"catalog_id":"d2b828a6-c055-401e-aa37-67d9c9fbc9fc","title":"授权模型","description":"authorization-model","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"8b17b02c-4868-4324-af4f-dcc98fbfed64","gmt_create":"2026-08-01T10:48:57+08:00","gmt_modified":"2026-08-01T10:48:57+08:00"},{"catalog_id":"08498174-3340-4779-a2a5-a6806284023d","title":"基础框架模块(crm-base)","description":"base-module","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"301311ec-fa49-441d-8f69-bec64740fdd8","gmt_create":"2026-08-01T10:49:11+08:00","gmt_modified":"2026-08-01T10:49:11+08:00"},{"catalog_id":"f30568dd-ee5f-4b57-adef-92341e4f08f8","title":"数据范围助手","description":"data-scope-helper","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0fc4f1d1-eb6f-4cfb-86f9-60b389db6b6e","gmt_create":"2026-08-01T10:49:36+08:00","gmt_modified":"2026-08-01T10:49:36+08:00"},{"catalog_id":"205f602e-3460-496d-8aee-f9959ae1d4b1","title":"Redis缓存配置","description":"redis-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","gmt_create":"2026-08-01T10:49:45+08:00","gmt_modified":"2026-08-03T19:55:26+08:00"},{"catalog_id":"d016da08-6253-4c3f-8900-7211fdd0f593","title":"分布式ID生成","description":"distributed-id-generation","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c4dd0228-d971-4375-a846-d7e0296721b4","gmt_create":"2026-08-01T10:50:03+08:00","gmt_modified":"2026-08-01T10:50:03+08:00"},{"catalog_id":"3cc4b9eb-c8bf-4cf2-ad89-79086f5cf862","title":"文件服务模块(crm-file)","description":"file-module","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","gmt_create":"2026-08-01T10:50:36+08:00","gmt_modified":"2026-08-06T08:44:04.739267+08:00"},{"catalog_id":"2d22b0d3-cb51-4b9c-8ee0-b4e26edb675f","title":"数据权限控制","description":"data-scope-control","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"dff99746-62fb-4c4b-ae86-768430ff2aed","gmt_create":"2026-08-01T10:51:08+08:00","gmt_modified":"2026-08-04T17:15:13.3140489+08:00"},{"catalog_id":"a1ee2722-ca15-44e9-b4c5-f8dd54e74819","title":"用户安全信息","description":"user-security","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"8ca9c912-4c7b-4540-b09d-66b362eb6629","gmt_create":"2026-08-01T10:51:10+08:00","gmt_modified":"2026-08-01T10:51:10+08:00"},{"catalog_id":"ca56f7cf-bcf1-472d-80d2-6e0b42d8e0f3","title":"Jackson序列化配置","description":"jackson-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"eec19a8f-6c17-4486-96ce-0a09474cf521","gmt_create":"2026-08-01T10:51:32+08:00","gmt_modified":"2026-08-01T10:51:32+08:00"},{"catalog_id":"1a9ab040-6d05-4a0d-b8ec-9ac2e9d605ba","title":"应用入口模块(crm-app)","description":"app-module","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"5185347d-edff-48f1-a87e-bd08f91b7939","gmt_create":"2026-08-01T10:51:56+08:00","gmt_modified":"2026-08-01T10:51:56+08:00"},{"catalog_id":"158c9c2b-ea3f-4e40-9c9f-a26a2316416c","title":"JWT认证机制","description":"jwt-authentication","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"dae64a35-168f-4724-b194-c92cbe38136a","gmt_create":"2026-08-01T10:52:01+08:00","gmt_modified":"2026-08-01T10:52:01+08:00"},{"catalog_id":"af24e12b-52f1-4672-83c5-c1d5108b1c06","title":"安全配置","description":"security-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c474b493-b90b-4589-b8f6-abb213778b21","gmt_create":"2026-08-01T10:52:26+08:00","gmt_modified":"2026-08-01T10:52:26+08:00"},{"catalog_id":"857accdf-edf6-49c1-a7c3-e9906579f74b","title":"缓存策略","description":"caching-strategies","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c94ec056-eec7-48b6-9b01-92f02b60adf1","gmt_create":"2026-08-01T10:52:44+08:00","gmt_modified":"2026-08-01T10:52:44+08:00"},{"catalog_id":"eed6a5a9-cc7a-42b0-9f2a-94cae476f2ab","title":"Knife4j API文档配置","description":"knife4j-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f6f5cb59-fe75-4076-8987-265d4ea8e886","gmt_create":"2026-08-01T10:52:51+08:00","gmt_modified":"2026-08-01T10:52:51+08:00"},{"catalog_id":"9b094a30-1649-4ef5-a16f-1b2fc5734fdd","title":"雪花算法ID配置","description":"snowflake-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"e9620c19-fd9a-47de-a0db-08ae92e834e9","gmt_create":"2026-08-01T10:53:14+08:00","gmt_modified":"2026-08-01T10:53:14+08:00"},{"catalog_id":"081c1898-c9eb-41e0-93ab-411a05ead961","title":"定时任务","description":"scheduled-tasks","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f7730619-12ac-4454-a2ba-a86e19e5d98e","gmt_create":"2026-08-01T10:53:29+08:00","gmt_modified":"2026-08-01T10:53:29+08:00"},{"catalog_id":"3343ea4e-b085-4bc9-b7be-62003913a5fe","title":"跨域配置","description":"cors-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6c78e496-40e5-4b38-bf17-218f38a977f7","gmt_create":"2026-08-01T10:53:35+08:00","gmt_modified":"2026-08-01T10:53:35+08:00"},{"catalog_id":"245dcfcb-140a-499f-a377-5d6e6b1ba003","title":"性能优化","description":"performance-optimization","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"e439cdc0-7e80-48a7-be4d-3abd32d3b4c6","gmt_create":"2026-08-01T10:54:07+08:00","gmt_modified":"2026-08-01T10:54:07+08:00"},{"catalog_id":"d69a79e2-abce-482f-afdf-2b016450e217","title":"认证核心功能","description":"auth-core","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"a946df03-41d0-4e28-8069-d41d28c91eed","gmt_create":"2026-08-01T10:54:25+08:00","gmt_modified":"2026-08-01T10:54:25+08:00"},{"catalog_id":"c870ee03-f2fe-42b2-8508-2375fa8a5512","title":"通用实体类","description":"base-entity","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"60857927-930a-4ef5-9096-2a05359e1e5b","gmt_create":"2026-08-01T10:54:30+08:00","gmt_modified":"2026-08-01T10:54:30+08:00"},{"catalog_id":"38d7de85-c5ff-48d7-8a0e-c4972f5d6800","title":"服务层封装","description":"service-layer","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d7242e37-8722-4c9c-9e2c-cc9cd3adb20b","gmt_create":"2026-08-01T10:55:14+08:00","gmt_modified":"2026-08-01T10:55:14+08:00"},{"catalog_id":"24f79255-1534-4c47-9d2d-1734103bffb4","title":"权限管理系统","description":"permission-system","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"1562e48f-2c79-4024-ab33-4c40084240e7","gmt_create":"2026-08-01T10:55:30+08:00","gmt_modified":"2026-08-05T14:15:12.8293219+08:00"},{"catalog_id":"beac3859-3efd-40f8-bb6c-cfdd3d22cb0e","title":"第三方登录集成","description":"third-party-auth","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"81106841-6bef-41d3-8f76-7dc6437e7e04","gmt_create":"2026-08-01T10:55:35+08:00","gmt_modified":"2026-08-01T10:55:35+08:00"},{"catalog_id":"0642bf0d-15ff-446e-9a9a-2f43a53e7d70","title":"异常处理机制","description":"exception-handling","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"27b42b0d-e7f8-4ab2-96f1-1bc0981b94c2","gmt_create":"2026-08-01T10:56:16+08:00","gmt_modified":"2026-08-01T10:56:16+08:00"},{"catalog_id":"aa92acd4-8a14-498a-974b-5385add01858","title":"安全配置与过滤器","description":"security-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"85dce05c-14ae-4632-82e5-30fab7771e6d","gmt_create":"2026-08-01T10:56:32+08:00","gmt_modified":"2026-08-04T17:44:30.7539816+08:00"},{"catalog_id":"1ef5af61-7cd7-4cfc-bc01-f2892feefd07","title":"数据访问层","description":"data-access","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ffb733ba-253c-4fc1-b940-e65c03f1a508","gmt_create":"2026-08-01T10:56:55+08:00","gmt_modified":"2026-08-01T10:56:55+08:00"},{"catalog_id":"80790bc7-c82c-4060-9f65-95c81558f979","title":"领域模型与实体","description":"domain-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","gmt_create":"2026-08-01T10:57:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"catalog_id":"dac0c399-2b11-42d0-af10-3e537fbfd80f","title":"安全与权限控制","description":"security-permission","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b2a66c5e-122e-4968-ae3a-6c1efadf5b66","gmt_create":"2026-08-01T10:57:37+08:00","gmt_modified":"2026-08-01T10:57:37+08:00"},{"catalog_id":"293dd98f-e9a9-431a-a01c-8630354c01ae","title":"框架配置","description":"configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"3c3ebd00-b567-4021-8066-af064318d4fd","gmt_create":"2026-08-01T10:57:54+08:00","gmt_modified":"2026-08-01T10:57:54+08:00"},{"catalog_id":"043bdfe3-f703-4d1b-928d-5f5665cadefc","title":"工具类库","description":"utilities","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"1d6a4cd5-2dbe-41ba-9db3-cb9f7fcb2d79","gmt_create":"2026-08-01T10:58:25+08:00","gmt_modified":"2026-08-01T10:58:25+08:00"},{"catalog_id":"41528186-7dda-49f1-8cd7-6bd4c5f9d31e","title":"公共常量与枚举","description":"common-constants","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d1bf1df6-89dc-40ea-9101-793b8c893ae8","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"catalog_id":"1b7df2d7-ac12-4df0-8bf9-b70d107236cc","title":"动态API权限拦截器","description":"dynamic-api-permission-interceptor","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"e886a159-657d-4516-9922-a6cabb6aabc0","gmt_create":"2026-08-04T17:46:33.4503698+08:00","gmt_modified":"2026-08-04T17:46:33.4519067+08:00"}],"wiki_overview":{"content":"我将对这个CRM后端项目进行全面的架构分析。让我首先查看项目的核心文件和结构。\n\n\u003ctool_call\u003e\n\u003cfunction=read_file\u003e\n\u003cparameter=file_path\u003e\nd:\\code\\crm-backend-matt\\pom.xml\n\u003c/parameter\u003e\n\u003c/function\u003e\n\u003c/tool_call\u003e","gmt_create":"2026-08-01T10:22:28+08:00","gmt_modified":"2026-08-01T10:22:28+08:00","id":"6e6e7132-f8ab-4711-a1cb-49d7bed692ba","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d"},"wiki_readme":{"content":"No readme file","gmt_create":"2026-08-01T10:22:06+08:00","gmt_modified":"2026-08-01T10:22:06+08:00","id":"e5f5a157-155e-4420-88eb-31d6856dd78e","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d"},"wiki_repo":{"id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"crm-backend-matt","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── crm-app\\\\\\n│ ├── src\\\\main\\\\\\n│ │ ├── java\\\\com\\\\crm\\\\app\\\\\\n│ │ │ └── CrmAppApplication.java\\n│ │ └── resources\\\\\\n│ │ └── application.yml\\n│ ├── target\\\\\\n│ └── pom.xml\\n├── crm-auth\\\\\\n│ ├── src\\\\\\n│ │ ├── main\\\\\\n│ │ │ ├── java\\\\com\\\\crm\\\\auth\\\\\\n│ │ │ │ ├── config\\\\\\n│ │ │ │ │ ├── AuthProperties.java\\n│ │ │ │ │ ├── DataInitializer.java\\n│ │ │ │ │ ├── PermissionConfig.java\\n│ │ │ │ │ └── SecurityConfig.java\\n│ │ │ │ ├── constant\\\\\\n│ │ │ │ │ └── AuthConstants.java\\n│ │ │ │ ├── controller\\\\\\n│ │ │ │ │ ├── AuthController.java\\n│ │ │ │ │ └── SystemController.java\\n│ │ │ │ ├── domain\\\\\\n│ │ │ │ │ ├── dto\\\\\\n│ │ │ │ │ │ ├── LoginResultDTO.java\\n│ │ │ │ │ │ └── UserInfoDTO.java\\n│ │ │ │ │ ├── entity\\\\\\n│ │ │ │ │ │ ├── AuthIdentity.java\\n│ │ │ │ │ │ ├── AuthUser.java\\n│ │ │ │ │ │ ├── SysDept.java\\n│ │ │ │ │ │ ├── SysMenu.java\\n│ │ │ │ │ │ ├── SysRole.java\\n│ │ │ │ │ │ ├── SysRoleMenu.java\\n│ │ │ │ │ │ ├── SysUserDept.java\\n│ │ │ │ │ │ └── SysUserRole.java\\n│ │ │ │ │ ├── enums\\\\\\n│ │ │ │ │ │ ├── DataScopeEnum.java\\n│ │ │ │ │ │ ├── IdentityTypeEnum.java\\n│ │ │ │ │ │ └── MenuTypeEnum.java\\n│ │ │ │ │ └── param\\\\\\n│ │ │ │ │ └── LoginParam.java\\n│ │ │ │ ├── mapper\\\\\\n│ │ │ │ │ ├── AuthIdentityMapper.java\\n│ │ │ │ │ ├── AuthUserMapper.java\\n│ │ │ │ │ ├── SysDeptMapper.java\\n│ │ │ │ │ ├── SysMenuMapper.java\\n│ │ │ │ │ ├── SysRoleMapper.java\\n│ │ │ │ │ ├── SysRoleMenuMapper.java\\n│ │ │ │ │ ├── SysUserDeptMapper.java\\n│ │ │ │ │ └── SysUserRoleMapper.java\\n│ │ │ │ ├── security\\\\\\n│ │ │ │ │ ├── AuthLoginUser.java\\n│ │ │ │ │ ├── DataScopeInterceptor.java\\n│ │ │ │ │ ├── DataScopeTables.java\\n│ │ │ │ │ ├── JwtAuthenticationFilter.java\\n│ │ │ │ │ ├── SecurityExceptionHandlers.java\\n│ │ │ │ │ └── TokenService.java\\n│ │ │ │ ├── service\\\\\\n│ │ │ │ │ ├── client\\\\\\n│ │ │ │ │ │ ├── DingTalkAuthClient.java\\n│ │ │ │ │ │ ├── ThirdPartyAuthClient.java\\n│ │ │ │ │ │ ├── ThirdPartyAuthClientFactory.java\\n│ │ │ │ │ │ └── ThirdPartyUserInfo.java\\n│ │ │ │ │ ├── impl\\\\\\n│ │ │ │ │ │ ├── AuthIdentityServiceImpl.java\\n│ │ │ │ │ │ ├── AuthServiceImpl.java\\n│ │ │ │ │ │ ├── AuthUserServiceImpl.java\\n│ │ │ │ │ │ ├── PermissionServiceImpl.java\\n│ │ │ │ │ │ ├── SysDeptServiceImpl.java\\n│ │ │ │ │ │ ├── SysMenuServiceImpl.java\\n│ │ │ │ │ │ └── SysRoleServiceImpl.java\\n│ │ │ │ │ ├── DeptTreeCache.java\\n│ │ │ │ │ ├── IAuthIdentityService.java\\n│ │ │ │ │ ├── IAuthService.java\\n│ │ │ │ │ ├── IAuthUserService.java\\n│ │ │ │ │ ├── ISysDeptService.java\\n│ │ │ │ │ ├── ISysMenuService.java\\n│ │ │ │ │ └── ISysRoleService.java\\n│ │ │ │ └── AuthApplication.java\\n│ │ │ └── resources\\\\\\n│ │ │ └── application.yml\\n│ │ └── test\\\\\\n│ │ ├── java\\\\com\\\\crm\\\\auth\\\\\\n│ │ │ ├── security\\\\scope\\\\\\n│ │ │ │ ├── DataScopeIntegrationTest.java\\n│ │ │ │ ├── TestOwnedData.java\\n│ │ │ │ └── TestOwnedDataMapper.java\\n│ │ │ └── service\\\\\\n│ │ │ ├── client\\\\\\n│ │ │ │ ├── DingTalkAuthClientTest.java\\n│ │ │ │ └── ThirdPartyAuthClientFactoryTest.java\\n│ │ │ └── impl\\\\\\n│ │ │ ├── AuthServiceImplTest.java\\n│ │ │ ├── AuthUserServiceImplTest.java\\n│ │ │ └── SysDeptServiceImplTest.java\\n│ │ └── resources\\\\\\n│ ├── target\\\\\\n│ ├── crm-auth.iml\\n│ └── pom.xml\\n├── crm-base\\\\\\n│ ├── src\\\\\\n│ │ ├── main\\\\java\\\\com\\\\crm\\\\base\\\\\\n│ │ │ ├── advice\\\\\\n│ │ │ │ └── GlobalExceptionHandlerAdvice.java\\n│ │ │ ├── annotation\\\\\\n│ │ │ │ └── DataScope.java\\n│ │ │ ├── config\\\\\\n│ │ │ │ ├── CorsConfig.java\\n│ │ │ │ ├── CrmSqlInjector.java\\n│ │ │ │ ├── CustomIdGenerator.java\\n│ │ │ │ ├── InsertBatchOnDuplicateKeyUpdate.java\\n│ │ │ │ ├── JacksonConfig.java\\n│ │ │ │ ├── Knife4jConfig.java\\n│ │ │ │ ├── MetaObjectFillHandler.java\\n│ │ │ │ ├── MybatisPlusConfig.java\\n│ │ │ │ ├── RedisConfig.java\\n│ │ │ │ ├── ScheduledTaskProperties.java\\n│ │ │ │ ├── SnowflakeIdWorker.java\\n│ │ │ │ └── SnowflakeProperties.java\\n│ │ │ ├── constant\\\\\\n│ │ │ │ └── CommonConstants.java\\n│ │ │ ├── domain\\\\\\n│ │ │ │ ├── dto\\\\\\n│ │ │ │ │ └── BaseDTO.java\\n│ │ │ │ ├── entity\\\\\\n│ │ │ │ │ ├── BaseEntity.java\\n│ │ │ │ │ └── OwnedEntity.java\\n│ │ │ │ ├── enums\\\\\\n│ │ │ │ │ ├── HasValueEnum.java\\n│ │ │ │ │ └── StatusEnum.java\\n│ │ │ │ ├── exception\\\\\\n│ │ │ │ │ ├── BusinessErrorException.java\\n│ │ │ │ │ ├── MissingParameterException.java\\n│ │ │ │ │ ├── PermissionErrorException.java\\n│ │ │ │ │ └── ResourceNotExistException.java\\n│ │ │ │ ├── param\\\\\\n│ │ │ │ │ └── BaseParam.java\\n│ │ │ │ └── result\\\\\\n│ │ │ │ ├── PageResult.java\\n│ │ │ │ ├── Result.java\\n│ │ │ │ └── ResultCodeEnum.java\\n│ │ │ ├── filter\\\\\\n│ │ │ │ └── TraceIdFilter.java\\n│ │ │ ├── mapper\\\\\\n│ │ │ │ └── CrmBaseMapper.java\\n│ │ │ ├── security\\\\\\n│ │ │ │ ├── DataOwnership.java\\n│ │ │ │ ├── DataScopeHelper.java\\n│ │ │ │ ├── DataScopeLevel.java\\n│ │ │ │ ├── DataVisibilityContext.java\\n│ │ │ │ ├── LoginUser.java\\n│ │ │ │ └── SecurityUtils.java\\n│ │ │ ├── service\\\\\\n│ │ │ │ ├── impl\\\\\\n│ │ │ │ │ └── BaseServiceImpl.java\\n│ │ │ │ └── IBaseService.java\\n│ │ │ └── utils\\\\\\n│ │ │ ├── AssertUtils.java\\n│ │ │ ├── BeanCopyUtils.java\\n│ │ │ ├── EnumUtils.java\\n│ │ │ ├── ExcelUtil.java\\n│ │ │ ├── PageConverter.java\\n│ │ │ ├── ServletUtils.java\\n│ │ │ └── TreeUtils.java\\n│ │ └── test\\\\java\\\\com\\\\crm\\\\base\\\\security\\\\\\n│ │ └── DataVisibilityTest.java\\n│ ├── target\\\\\\n│ ├── crm-base.iml\\n│ └── pom.xml\\n├── crm-file\\\\\\n│ ├── src\\\\\\n│ │ ├── main\\\\java\\\\com\\\\crm\\\\file\\\\\\n│ │ │ ├── api\\\\\\n│ │ │ │ └── FileApi.java\\n│ │ │ ├── config\\\\\\n│ │ │ │ ├── FileProperties.java\\n│ │ │ │ ├── MinioConfig.java\\n│ │ │ │ └── SchedulingConfig.java\\n│ │ │ ├── constant\\\\\\n│ │ │ │ └── FileConstants.java\\n│ │ │ ├── controller\\\\\\n│ │ │ │ └── FileController.java\\n│ │ │ ├── domain\\\\\\n│ │ │ │ ├── dto\\\\\\n│ │ │ │ │ ├── FileDownloadDTO.java\\n│ │ │ │ │ ├── FileInfoDTO.java\\n│ │ │ │ │ ├── MultipartInitDTO.java\\n│ │ │ │ │ └── UploadSession.java\\n│ │ │ │ └── entity\\\\\\n│ │ │ │ └── FileInfo.java\\n│ │ │ ├── mapper\\\\\\n│ │ │ │ └── FileInfoMapper.java\\n│ │ │ ├── service\\\\\\n│ │ │ │ ├── impl\\\\\\n│ │ │ │ │ ├── FileApiImpl.java\\n│ │ │ │ │ └── FileInfoServiceImpl.java\\n│ │ │ │ ├── IFileInfoService.java\\n│ │ │ │ └── KkFileViewClient.java\\n│ │ │ └── task\\\\\\n│ │ │ └── OrphanChunkCleanupTask.java\\n│ │ └── test\\\\java\\\\com\\\\crm\\\\file\\\\\\n│ │ ├── service\\\\\\n│ │ │ ├── impl\\\\\\n│ │ │ │ └── FileApiImplTest.java\\n│ │ │ └── KkFileViewClientTest.java\\n│ │ └── task\\\\\\n│ │ └── OrphanChunkCleanupTaskTest.java\\n│ ├── target\\\\\\n│ └── pom.xml\\n├── docs\\\\agents\\\\\\n│ ├── domain.md\\n│ ├── issue-tracker.md\\n│ └── triage-labels.md\\n├── AGENTS.md\\n├── CONTEXT-MAP.md\\n└── pom.xml\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted:d45SgZtN4Jq1t6soxMe5H9Kpbj8zRKINytn5yDduSAfgNPrv0gaYL3xmw4MDZreqyY9rDQaF/v0/NDjh4qfPAUvIgyjBjTbhIbb/sXH1jWEZvKPilhX7qtLw4UTA63bchonAXJvE5RJ5Mbupq0RHPbdhqbsa6XBDvbotzz/PdUtsLLD479pgpbE9i2257svZnmWmUpGjSbAUkDBjeZZW74kF6UYM1CrlN7P9fJ2shnNi9MpJzmYudv9yk8bJ/cL2NCHJ5yc34Bgg83Sczz4/bW9NOCvQ+/7HwsFd7EmYTtRJuIqrQ/yd76ug9F1P3/RaZZ4Gq+SE9ruHlSB93bYPSNPn6VO05gYlvjuTF4fALdcCTNt/cV2BrqG3EuT1iQwj","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"3499353b2851723d4c2678320c23bc6bc66d3c7c","last_commit_update":"2026-08-06T08:45:07.5846759+08:00","gmt_create":"2026-08-01T10:22:05+08:00","gmt_modified":"2026-08-06T08:45:07.5846759+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"master\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"1.10.0\"}"}} \ No newline at end of file +{"code_snippets":[{"id":"8813519db2ec8d3788102bcc7d1f19bc","path":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"3fa8c5117e3c0c5c18c29826dc404c80","path":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"78733cea63a5784d74c82bdf50e7b713","path":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"72a034c4f1317ca49826baf8790a4c2e","path":"crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"7799b89815bb4f06dd5caa2b3bd5568c","path":"crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"bb259727923efab26488eca0b1f201e0","path":"crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"df096476d97c54172c5839a266e46867","path":"crm-auth/src/main/java/com/crm/auth/security/TokenService.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"a807bda309df8f0aa0cf90bbf4c0afd4","path":"crm-base/src/main/java/com/crm/base/annotation/DataScope.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"cd7e601b4125b471cf816bcec228b752","path":"crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"faf664190fd4a09ddb120b40bf445a54","path":"crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"0b81c5221d14e935e18bc19956fe502f","path":"crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"7c974ab041f6a9430c3be1c39833b929","path":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","line_range":"1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"9c3911a56d8521ef26f3e3ec2accd8a5","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","line_range":"30-34","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":"daaa931a3614c39bba377186b1f5be5f","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","line_range":"64-93","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":"bb69d53898126328709f0ffa74b84a21","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","line_range":"36-41","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":"08f1e1f256663048fa344ad9d0b2ec50","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","line_range":"43-47","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":"f3443603f743cb75a94a04d692a61a9f","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","line_range":"12-76","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":"e2830d81d6e28aed10dccc2713cc2d1b","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"1-48","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"45bf77ddaa679acca8c5535083b5945c","path":"crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","line_range":"1-262","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"8db96ae3b010284910f8431c1c2367f0","path":"crm-auth/src/main/java/com/crm/auth/service/IResourceService.java","line_range":"1-26","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"c0493efa487cf930abd2933af3e72781","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","line_range":"1-19","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"5fe39f4159a0d5a68c0d1ee34a2b6103","path":"crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","line_range":"1-76","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"9488e996384d45f67488bdccc4e0f0b6","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","line_range":"1-80","gmt_create":"2026-08-04T09:57:47+08:00","gmt_modified":"2026-08-04T09:57:47+08:00"},{"id":"57d5a8ab851652a3705c29fe5c19864f","path":"crm-file/src/main/java/com/crm/file/api/FileApi.java","line_range":"1-106","gmt_create":"2026-08-04T09:57:47+08:00","gmt_modified":"2026-08-04T09:57:47+08:00"},{"id":"b2e64975f941d389f848f0911b5d21fc","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","line_range":"16-84","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"11ff686199a527b16c34abb2c1c3f179","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"1-56","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"204b3d8b3f185c9d4e51d901e51ade12","path":"crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","line_range":"1-265","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"77b6a344d88f4c26037ba82e391ac061","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","line_range":"12-52","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"7687130ee4a47c1e4e4ef1082d573508","path":"crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","line_range":"239-242","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"91398e71753529e02986d50a8cfc06e8","path":"crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","line_range":"36-71","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":"b37809db1bcbb443f89e776fd2522d74","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","line_range":"1-36","gmt_create":"2026-08-04T17:13:27.2477242+08:00","gmt_modified":"2026-08-04T17:13:27.2477242+08:00"},{"id":"281426f342c415888879dec628d8ede2","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","line_range":"1-68","gmt_create":"2026-08-04T17:13:27.2477242+08:00","gmt_modified":"2026-08-04T17:13:27.2477242+08:00"},{"id":"8bfb66ee95e0b604e7e00a10d54b97e2","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","line_range":"1-140","gmt_create":"2026-08-04T17:13:27.2477242+08:00","gmt_modified":"2026-08-04T17:13:27.2477242+08:00"},{"id":"64aec830421b2d35910074429d1ee986","path":"crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","line_range":"1-200","gmt_create":"2026-08-04T17:13:27.2497184+08:00","gmt_modified":"2026-08-04T17:13:27.2497184+08:00"},{"id":"5609defe76e630b07bff8855db378c55","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","line_range":"44-50","gmt_create":"2026-08-04T17:13:27.2507152+08:00","gmt_modified":"2026-08-04T17:13:27.2507152+08:00"},{"id":"ef24be7c3ce60d8e7b85f3203a781aa0","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","line_range":"85-95","gmt_create":"2026-08-04T17:43:50.0726833+08:00","gmt_modified":"2026-08-04T17:43:50.0726833+08:00"},{"id":"90f1865562e9f5620beef18de905d9e7","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","line_range":"32-36","gmt_create":"2026-08-04T17:43:50.0752289+08:00","gmt_modified":"2026-08-04T17:43:50.0752289+08:00"},{"id":"2f06083130bf64ee2a878837250ee2af","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","line_range":"117-139","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"5fc541009259cef5dde6459097ee02c7","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","line_range":"149-165","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"c8fe83bfdcdebf6c4cbafe5ccc3fff2c","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","line_range":"15-53","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"2402e2fbf96b2963b98e75da818f2777","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","line_range":"15-34","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"46fa00e13eb3286302d3787e8c1f1051","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","line_range":"127-138","gmt_create":"2026-08-04T17:44:06.5402086+08:00","gmt_modified":"2026-08-04T17:44:06.5402086+08:00"},{"id":"9c19bba97b38fe3dbcde5a59ab43be02","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"22","gmt_create":"2026-08-05T12:14:37.8189244+08:00","gmt_modified":"2026-08-05T12:14:37.8189244+08:00"},{"id":"fe2b7c626178194ac3902aff308e602c","path":"crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","line_range":"1-98","gmt_create":"2026-08-05T12:14:49.6484545+08:00","gmt_modified":"2026-08-05T12:14:49.6484545+08:00"},{"id":"0258e4223cc6ad38e6889a0dbe4226f4","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"1-137","gmt_create":"2026-08-05T12:14:49.6484545+08:00","gmt_modified":"2026-08-05T12:14:49.6484545+08:00"},{"id":"cec4b333c23562375f8ba726ff8e33d4","path":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","line_range":"1-43","gmt_create":"2026-08-05T12:14:49.6484545+08:00","gmt_modified":"2026-08-05T12:14:49.6484545+08:00"},{"id":"3e766fa579578b179ce86668688a696e","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","line_range":"1-61","gmt_create":"2026-08-05T12:14:49.6484545+08:00","gmt_modified":"2026-08-05T12:14:49.6484545+08:00"},{"id":"b0e4bf2cdfbf64b762ff202adf131edb","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","line_range":"1-41","gmt_create":"2026-08-05T12:14:49.6490123+08:00","gmt_modified":"2026-08-05T12:14:49.6490123+08:00"},{"id":"f8cfac232dc38f8f3198444a305761ef","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","line_range":"1-31","gmt_create":"2026-08-05T12:14:49.6490123+08:00","gmt_modified":"2026-08-05T12:14:49.6490123+08:00"},{"id":"b037341ea6352c6b7a9b782e75a1b0e4","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","line_range":"18-22","gmt_create":"2026-08-05T14:14:28.2233804+08:00","gmt_modified":"2026-08-05T14:14:28.2233804+08:00"},{"id":"84dbb0a8a48a1b0cb09caa8ff5e37772","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","line_range":"18-40","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"358d17256baad827344f9c962732f05f","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"28-32","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"7630382313cadec5c6d8adc92dcc9fee","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","line_range":"23-60","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"a93ae9fd67ae091cc5de42e9372a4a5b","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"35-39","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"852adaecbef1690c54f6a1a0c07b01b1","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","line_range":"23-57","gmt_create":"2026-08-05T14:14:28.223892+08:00","gmt_modified":"2026-08-05T14:14:28.223892+08:00"},{"id":"6752445343d892cce179d933238b24a6","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"42-47","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"30311c6851277a382e67d95b83c45f16","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"50-54","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"ab67df1936419ba1cf1e0029a23c5bf2","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","line_range":"35-39","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"b300c143a1d0c61e70f56c406a4d7a91","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","line_range":"43-49","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"205841de1f0b7e0b83cdb8a171f441a0","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","line_range":"22-47","gmt_create":"2026-08-05T14:14:28.2244016+08:00","gmt_modified":"2026-08-05T14:14:28.2244016+08:00"},{"id":"b0af3174f3549d3d50b7051ecf1610ad","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","line_range":"28-54","gmt_create":"2026-08-05T14:14:28.2249128+08:00","gmt_modified":"2026-08-05T14:14:28.2249128+08:00"},{"id":"332679fa8feff09a65449fc04e7b0399","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"30-42","gmt_create":"2026-08-05T14:15:12.7479373+08:00","gmt_modified":"2026-08-05T14:15:12.7479373+08:00"},{"id":"da087c2c1b417a29878e1da67b50ab55","path":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","line_range":"9-42","gmt_create":"2026-08-05T14:15:12.7479373+08:00","gmt_modified":"2026-08-05T14:15:12.7479373+08:00"},{"id":"a800a64e16cca84b005d717faf00070c","path":"crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","line_range":"25-30","gmt_create":"2026-08-05T14:15:12.7479373+08:00","gmt_modified":"2026-08-05T14:15:12.7479373+08:00"},{"id":"18e7588cf137e60731d97339c707dfab","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"44-86","gmt_create":"2026-08-05T14:15:12.7484481+08:00","gmt_modified":"2026-08-05T14:15:12.7484481+08:00"},{"id":"2738929e90eb6e3d8a356e1b4f661bb7","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","line_range":"17-41","gmt_create":"2026-08-05T14:15:12.7489581+08:00","gmt_modified":"2026-08-05T14:15:12.7489581+08:00"},{"id":"6ae7a9512788cb4d4a693b3edf3bff24","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"105-122","gmt_create":"2026-08-05T14:15:12.7489581+08:00","gmt_modified":"2026-08-05T14:15:12.7489581+08:00"},{"id":"472299cc5292d464668a566f315641cc","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","line_range":"124-142","gmt_create":"2026-08-05T14:15:12.7489581+08:00","gmt_modified":"2026-08-05T14:15:12.7489581+08:00"},{"id":"cfb2f09353f8b4ef5e4e5db759504d05","path":"crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","line_range":"32-96","gmt_create":"2026-08-05T14:15:12.7489581+08:00","gmt_modified":"2026-08-05T14:15:12.7489581+08:00"},{"id":"acde6b0660ef768e0502de035ce41fa5","path":"pom.xml","line_range":"1-200","gmt_create":"2026-08-06T19:44:26.7091877+08:00","gmt_modified":"2026-08-06T19:44:26.7091877+08:00"},{"id":"1f0cd5816b306157f2ec4e7fc6f7956b","path":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java","line_range":"1-50","gmt_create":"2026-08-06T19:44:26.7101857+08:00","gmt_modified":"2026-08-06T19:44:26.7101857+08:00"},{"id":"9e3c45cbfa5122a947fcc31865325a27","path":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java","line_range":"1-50","gmt_create":"2026-08-06T19:44:26.7101857+08:00","gmt_modified":"2026-08-06T19:44:26.7101857+08:00"},{"id":"e5de4497aad8dff5c8710964bdc05e67","path":"crm-file/src/main/java/com/crm/file/config/MinioConfig.java","line_range":"1-80","gmt_create":"2026-08-06T19:44:26.7101857+08:00","gmt_modified":"2026-08-06T19:44:26.7101857+08:00"},{"id":"ded9bf7c7288a3b6d42d4e0f145b7f1e","path":"crm-app/pom.xml","line_range":"1-100","gmt_create":"2026-08-06T19:44:26.7101857+08:00","gmt_modified":"2026-08-06T19:44:26.7101857+08:00"},{"id":"01dd875560950997be99675d263dd937","path":"crm-auth/pom.xml","line_range":"1-100","gmt_create":"2026-08-06T19:44:26.7111823+08:00","gmt_modified":"2026-08-06T19:44:26.7111823+08:00"},{"id":"978ca9ce418fedbb4c5fccbf17118852","path":"crm-base/pom.xml","line_range":"1-100","gmt_create":"2026-08-06T19:44:26.7111823+08:00","gmt_modified":"2026-08-06T19:44:26.7111823+08:00"},{"id":"0df7a497aac884fa372c3320b092c3ad","path":"crm-file/pom.xml","line_range":"1-100","gmt_create":"2026-08-06T19:44:26.7111823+08:00","gmt_modified":"2026-08-06T19:44:26.7111823+08:00"},{"id":"65ca5558323ab3eede2a518500899b98","path":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java","line_range":"1-80","gmt_create":"2026-08-06T19:44:26.7111823+08:00","gmt_modified":"2026-08-06T19:44:26.7111823+08:00"},{"id":"8f370b958bb0f2df56168c5769a3b1de","path":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","line_range":"1-80","gmt_create":"2026-08-06T19:44:26.7111823+08:00","gmt_modified":"2026-08-06T19:44:26.7111823+08:00"},{"id":"b25562bf7ce1900f14da508cf6c97d2a","path":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","line_range":"1-120","gmt_create":"2026-08-06T19:44:26.7121824+08:00","gmt_modified":"2026-08-06T19:44:26.7121824+08:00"},{"id":"f4160f8f1aee0f5dd3e68eb22348241c","path":"crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","line_range":"1-120","gmt_create":"2026-08-06T19:44:26.7121824+08:00","gmt_modified":"2026-08-06T19:44:26.7121824+08:00"},{"id":"52142ea24d4b69473142be97474714d4","path":"crm-auth/src/main/java/com/crm/auth/security/TokenService.java","line_range":"1-120","gmt_create":"2026-08-06T19:44:26.7121824+08:00","gmt_modified":"2026-08-06T19:44:26.7121824+08:00"},{"id":"8e13b7c6ca1698b5d9bb66edc40456f1","path":"crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","line_range":"1-120","gmt_create":"2026-08-06T19:44:26.7131762+08:00","gmt_modified":"2026-08-06T19:44:26.7131762+08:00"},{"id":"1c3d8c0613c93140a2b573acbea8ad31","path":"crm-file/src/main/java/com/crm/file/config/FileProperties.java","line_range":"1-80","gmt_create":"2026-08-06T19:44:26.7131762+08:00","gmt_modified":"2026-08-06T19:44:26.7131762+08:00"},{"id":"45469cf41a93bd33f3017adefff0283d","path":"crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","line_range":"1-80","gmt_create":"2026-08-06T19:44:26.7131762+08:00","gmt_modified":"2026-08-06T19:44:26.7131762+08:00"},{"id":"a72a55f3bb6c01653f459cf9d8b7518c","path":"crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","line_range":"1-80","gmt_create":"2026-08-06T19:44:26.7131762+08:00","gmt_modified":"2026-08-06T19:44:26.7131762+08:00"},{"id":"78b06be463e96a353048bc4213d197dd","path":"crm-base/src/main/java/com/crm/base/config/CorsConfig.java","line_range":"1-80","gmt_create":"2026-08-06T19:44:26.7131762+08:00","gmt_modified":"2026-08-06T19:44:26.7131762+08:00"},{"id":"248ca67cd079f60d3bfb099417017973","path":"crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","line_range":"1-80","gmt_create":"2026-08-06T19:44:26.7131762+08:00","gmt_modified":"2026-08-06T19:44:26.7131762+08:00"},{"id":"dcb100026957c1a6c50a31e1fc3619ac","path":"crm-app/src/main/resources/application.yml","line_range":"1-76","gmt_create":"2026-08-06T19:44:26.7141736+08:00","gmt_modified":"2026-08-06T19:44:26.7141736+08:00"},{"id":"25d083d5320a49957375d1baf9de6f8e","path":"crm-app/src/main/resources/application-verify.yml","line_range":"1-13","gmt_create":"2026-08-06T19:44:26.7151712+08:00","gmt_modified":"2026-08-06T19:44:26.7151712+08:00"},{"id":"47e656964c440dfdf655325aa58f8ecb","path":"crm-auth/src/main/resources/application.yml","line_range":"1-200","gmt_create":"2026-08-06T19:44:26.7151712+08:00","gmt_modified":"2026-08-06T19:44:26.7151712+08:00"},{"id":"ad3d4431a7de13debc56b29e615f3080","path":"docker-compose.yml","line_range":"1-100","gmt_create":"2026-08-06T19:44:26.7151712+08:00","gmt_modified":"2026-08-06T19:44:26.7151712+08:00"},{"id":"7f6e2fbcfcc4491f978b98b23eb7c228","path":"Dockerfile","line_range":"1-27","gmt_create":"2026-08-06T19:44:26.7151712+08:00","gmt_modified":"2026-08-06T19:44:26.7151712+08:00"},{"id":"f323e0e130d5430bfe10b855cec3c58f","path":".dockerignore","line_range":"1-14","gmt_create":"2026-08-06T19:44:26.7151712+08:00","gmt_modified":"2026-08-06T19:44:26.7151712+08:00"},{"id":"d6564f083660a1c722075791cca2110e","path":"settings.xml","line_range":"1-14","gmt_create":"2026-08-06T19:44:26.7151712+08:00","gmt_modified":"2026-08-06T19:44:26.7151712+08:00"},{"id":"2fc84fcaf9df20eb79e9a967d98984fa","path":"docs/deploy-verify.md","line_range":"1-168","gmt_create":"2026-08-06T19:44:26.7161705+08:00","gmt_modified":"2026-08-06T19:44:26.7161705+08:00"},{"id":"53957daee7170ce40608b570cba5980d","path":"pom.xml","line_range":"21-28","gmt_create":"2026-08-07T15:24:43.434389+08:00","gmt_modified":"2026-08-07T15:24:43.434389+08:00"},{"id":"12e5caea42ee07d20505db3df48a1937","path":"crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java","line_range":"17-51","gmt_create":"2026-08-07T15:24:43.4349151+08:00","gmt_modified":"2026-08-07T15:24:43.4349151+08:00"},{"id":"63e090c854f40c12274907bcac0e79ba","path":"crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java","line_range":"17-61","gmt_create":"2026-08-07T15:24:43.4349151+08:00","gmt_modified":"2026-08-07T15:24:43.4349151+08:00"},{"id":"ee126b38b064f1c83040b5cae0ba8338","path":"crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java","line_range":"70-94","gmt_create":"2026-08-07T15:24:43.4349151+08:00","gmt_modified":"2026-08-07T15:24:43.4349151+08:00"},{"id":"76ab19591a8db22f1531ad386460dc3a","path":"crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java","line_range":"141-236","gmt_create":"2026-08-07T15:24:43.4349151+08:00","gmt_modified":"2026-08-07T15:24:43.4349151+08:00"},{"id":"f580bcbe728b783e517f3e6684e4659f","path":"crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java","line_range":"7-31","gmt_create":"2026-08-07T15:24:43.4349151+08:00","gmt_modified":"2026-08-07T15:24:43.4349151+08:00"},{"id":"0eb35a657b57b57d8e696b36787b6981","path":"crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java","line_range":"24-30","gmt_create":"2026-08-07T15:24:43.4349151+08:00","gmt_modified":"2026-08-07T15:24:43.4349151+08:00"},{"id":"30305cf4a3c1be546d1e22b441b28a9a","path":"pom.xml","line_range":"48-74","gmt_create":"2026-08-07T15:24:43.4354339+08:00","gmt_modified":"2026-08-07T15:24:43.4354339+08:00"},{"id":"38600e00a7fa287399d8baeba3f4ed0c","path":"crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java","line_range":"96-137","gmt_create":"2026-08-07T15:24:43.4354339+08:00","gmt_modified":"2026-08-07T15:24:43.4354339+08:00"},{"id":"e889888359d3a6c10f530f5f6ad600bc","path":"crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java","line_range":"218-238","gmt_create":"2026-08-07T15:24:43.4354339+08:00","gmt_modified":"2026-08-07T15:24:43.4354339+08:00"},{"id":"76fd244decf9368e32c288727c7a655f","path":"crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java","line_range":"14-34","gmt_create":"2026-08-07T17:25:08.9391356+08:00","gmt_modified":"2026-08-07T17:25:08.9391356+08:00"},{"id":"c7303162131eb349fb6e1da5782dbff6","path":"crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java","line_range":"16-49","gmt_create":"2026-08-07T17:25:08.9391356+08:00","gmt_modified":"2026-08-07T17:25:08.9391356+08:00"}],"knowledge_relations":[{"id":1,"source_id":"6d8082c2-bade-49fb-b470-995db7466303","target_id":"ec96e8c3-c43c-463b-b4ba-7a9019ee0aff","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 6d8082c2-bade-49fb-b470-995db7466303 -\u003e ec96e8c3-c43c-463b-b4ba-7a9019ee0aff","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":2,"source_id":"6d8082c2-bade-49fb-b470-995db7466303","target_id":"918c82b4-acd2-47d1-9eb3-656deeb62e27","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 6d8082c2-bade-49fb-b470-995db7466303 -\u003e 918c82b4-acd2-47d1-9eb3-656deeb62e27","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":4,"source_id":"6d8082c2-bade-49fb-b470-995db7466303","target_id":"b574348c-289c-42ef-bbe5-f18434e0f9bf","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 6d8082c2-bade-49fb-b470-995db7466303 -\u003e b574348c-289c-42ef-bbe5-f18434e0f9bf","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":9,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"d3d1fc96-5f27-423b-a3de-43c5c5ce122a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e d3d1fc96-5f27-423b-a3de-43c5c5ce122a","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":10,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"be5bf550-c68c-431d-ba89-9836d61bfdf1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e be5bf550-c68c-431d-ba89-9836d61bfdf1","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":11,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"5a19aa15-dc0a-4794-a39b-582db554acf0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e 5a19aa15-dc0a-4794-a39b-582db554acf0","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":12,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e 068fc96f-bb8c-4ce6-b079-72c01ba04bae","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":13,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e f5db08f6-ba6c-48f9-a61d-1d476a52234e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":14,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"b50c7b86-b029-4352-a2e6-60c5e592e789","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e b50c7b86-b029-4352-a2e6-60c5e592e789","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":15,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"745079a2-2d3e-4e07-8e12-2b0c77a1aa4a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e 745079a2-2d3e-4e07-8e12-2b0c77a1aa4a","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":32,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"2c71e522-4140-46f9-9edb-90ec500c07e8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e 2c71e522-4140-46f9-9edb-90ec500c07e8","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":33,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e b04efc93-7ddd-4987-a71f-d5001040edcc","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":34,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"47dc438d-d49c-4082-84d6-779660f0d768","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e 47dc438d-d49c-4082-84d6-779660f0d768","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":42,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"6789c32b-de31-4bf0-8ec9-7ea000a6266e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e 6789c32b-de31-4bf0-8ec9-7ea000a6266e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":43,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"c4dd0228-d971-4375-a846-d7e0296721b4","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e c4dd0228-d971-4375-a846-d7e0296721b4","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":44,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"dae64a35-168f-4724-b194-c92cbe38136a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e dae64a35-168f-4724-b194-c92cbe38136a","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":45,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"c94ec056-eec7-48b6-9b01-92f02b60adf1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e c94ec056-eec7-48b6-9b01-92f02b60adf1","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":46,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"f7730619-12ac-4454-a2ba-a86e19e5d98e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e f7730619-12ac-4454-a2ba-a86e19e5d98e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":47,"source_id":"b04efc93-7ddd-4987-a71f-d5001040edcc","target_id":"e439cdc0-7e80-48a7-be4d-3abd32d3b4c6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b04efc93-7ddd-4987-a71f-d5001040edcc -\u003e e439cdc0-7e80-48a7-be4d-3abd32d3b4c6","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":48,"source_id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","target_id":"3fb2d355-11e4-4d85-9b53-cec9e9330b0b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 068fc96f-bb8c-4ce6-b079-72c01ba04bae -\u003e 3fb2d355-11e4-4d85-9b53-cec9e9330b0b","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":49,"source_id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","target_id":"0fc4f1d1-eb6f-4cfb-86f9-60b389db6b6e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 068fc96f-bb8c-4ce6-b079-72c01ba04bae -\u003e 0fc4f1d1-eb6f-4cfb-86f9-60b389db6b6e","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":50,"source_id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","target_id":"8ca9c912-4c7b-4540-b09d-66b362eb6629","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 068fc96f-bb8c-4ce6-b079-72c01ba04bae -\u003e 8ca9c912-4c7b-4540-b09d-66b362eb6629","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":51,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"291b69f4-e014-4afa-b35d-55cfbc845b23","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e 291b69f4-e014-4afa-b35d-55cfbc845b23","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":52,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"eec19a8f-6c17-4486-96ce-0a09474cf521","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e eec19a8f-6c17-4486-96ce-0a09474cf521","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":53,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"f6f5cb59-fe75-4076-8987-265d4ea8e886","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e f6f5cb59-fe75-4076-8987-265d4ea8e886","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":54,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"e9620c19-fd9a-47de-a0db-08ae92e834e9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e e9620c19-fd9a-47de-a0db-08ae92e834e9","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":55,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"6c78e496-40e5-4b38-bf17-218f38a977f7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e 6c78e496-40e5-4b38-bf17-218f38a977f7","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"id":64,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":65,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":66,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":67,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":68,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":69,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":70,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":71,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":72,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":73,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":74,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":75,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":76,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":77,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":78,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":79,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":80,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"70a8328bf44d129f9e9f84a552674c0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":81,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"450e832ef93367bf62c150db0a3c2257","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedData.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":82,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"e6cba19378ad4cca1120a969537c90a1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedDataMapper.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":83,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"a0e0e501f0f901ac1f12b089a1bf5f9a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":84,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"ef7f823f436c1c0a09594b106637d202","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":85,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"0a944d6947cd45922d3e267c069fee6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":86,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"e115f2054f8d1d592750cc634e682da8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/AuthUserServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":87,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"93b5379effd73cbce347a8747296d18c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/SysDeptServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":88,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"f204b35859a78f3352a067656ec89482","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":89,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":90,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":91,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":92,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":93,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":94,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":95,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":96,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":97,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":98,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":99,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":100,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":101,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":102,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":103,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":104,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"eb157d8b43dd11418aef51259017012c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":105,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":106,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":107,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":108,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":109,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":110,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"78a779bf8e042a4c180c7cf6b2f09c30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":111,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"39e025b53656f4fb1e51330f3f63f82f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/service/KkFileViewClientTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":112,"source_id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","target_id":"4ad3caa167521e41d486c8eb3e1d1f09","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/task/OrphanChunkCleanupTaskTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":113,"source_id":"9f120716e7b0381e045c66412550d1a9","target_id":"8813519db2ec8d3788102bcc7d1f19bc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":114,"source_id":"ec731c3e8b12fffc7e23eb4ecd950b53","target_id":"3fa8c5117e3c0c5c18c29826dc404c80","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":115,"source_id":"5da86b8d801192fd63ea6aa57b666057","target_id":"d08cb0ea7e38d4900671b643422d5ad7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":116,"source_id":"26cb8256b5c728bdc24b532313d3a166","target_id":"a5b530b2374acc884aa38fa2a38818b2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":117,"source_id":"aea6b84411302cc9a5fbcaf774ac6a29","target_id":"356a1716308638ff71e5f09f64fd1cd3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":118,"source_id":"20f7693b186c4e003d04031dafd605b5","target_id":"28f6dcd948c2cff2f329ab3bbf4c5e06","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":119,"source_id":"e1f225cc9efe7384e97ee284b89eabc0","target_id":"a302758d59394067216d751ebb661f5e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":120,"source_id":"8fa19465d23be26b999639add960b23d","target_id":"353fced7452ae984d04aedecaaee5ab4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":121,"source_id":"f9926a70a628c5e92f0d239030b13f71","target_id":"6482a0415c4c01dfd3196a91192fb7ca","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":122,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"5802bf27629a4700e1fad48a339eab95","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":123,"source_id":"ad239f5e0129b57722497e4051492302","target_id":"ebfb395550c37ba4027584bbf2fd76ed","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":124,"source_id":"6d19e7c47ad418f3577ff8cfcd56590f","target_id":"78733cea63a5784d74c82bdf50e7b713","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":125,"source_id":"10a536bc357c7840a6eec61b40741915","target_id":"72a034c4f1317ca49826baf8790a4c2e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":126,"source_id":"ef98104ba47dd7d33624e1916c0694cd","target_id":"7799b89815bb4f06dd5caa2b3bd5568c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":127,"source_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","target_id":"bb259727923efab26488eca0b1f201e0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":128,"source_id":"9b38bcfac9c3a14d74c16429d22380fd","target_id":"626400c1d41e3b48d2a8e30ee87562fa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":129,"source_id":"720e90c29ddd88a8633c9d31ce443b5e","target_id":"df096476d97c54172c5839a266e46867","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":130,"source_id":"5be8fe765c8b4c953e524cdf749f440b","target_id":"8629bee3416a369162b306881e5bf5d0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":131,"source_id":"485d0b6edfad127744af104bc2fccdec","target_id":"a807bda309df8f0aa0cf90bbf4c0afd4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":132,"source_id":"33650500053c4035f9b41cc603ec7177","target_id":"cd7e601b4125b471cf816bcec228b752","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":133,"source_id":"7f1c91eeb163925e7598ee1fa3808178","target_id":"eb168003b2929c81d3cf503a3ae9e8c9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":134,"source_id":"624d3c748c2d1b470b26409fbb19c4d3","target_id":"faf664190fd4a09ddb120b40bf445a54","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":135,"source_id":"979b533c66100f0a3f79f7542e2b01e0","target_id":"0b81c5221d14e935e18bc19956fe502f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":136,"source_id":"4194d46035c0037d3488ab82e57001ba","target_id":"21915525255d4fef3daeb8643a5bae4c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":137,"source_id":"219bfc88fc6b98fdc50a57b641262250","target_id":"7c974ab041f6a9430c3be1c39833b929","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":138,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":139,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":140,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":141,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":142,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":143,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":144,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"30ac7fd632012faca8156feaa071ff46","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":145,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"28e5eef69286d763453cf31a32070685","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":146,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":147,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":148,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":149,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":150,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":151,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":152,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":153,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":154,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":155,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":156,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":157,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":158,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"7421afce22638e3b1ee9594dcf7236bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":159,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"2d521e834dd3215c45e67ea660ea37d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/config/CrmSqlInjector.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":160,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"88ddb7568e428a630b28d5be85d8b98b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/config/MybatisPlusConfig.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":161,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"a03716c4989d9bdbacbbf1b52dcfad7c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":162,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":163,"source_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":165,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":166,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":167,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":168,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":169,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":170,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":171,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"a03716c4989d9bdbacbbf1b52dcfad7c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":172,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":173,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":174,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":175,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":176,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":177,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"d9ade6309a688b79e49a87c991d5af6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":178,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":179,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":180,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":181,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":182,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":183,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":184,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":185,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":186,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":187,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":188,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":189,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":190,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":191,"source_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-01T12:28:52+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"id":192,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":193,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":194,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":195,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":196,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":197,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":198,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":199,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":200,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":201,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":202,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":203,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":204,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":205,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":206,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"45f8c9e51de204a6ce44b7b414bf967f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":207,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":208,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"d9ade6309a688b79e49a87c991d5af6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":209,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"aab51a092e42f86e794b23b95107cba3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":210,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"30ac7fd632012faca8156feaa071ff46","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":211,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"38d9b83ff8f46a8113aa787616b2f802","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":212,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"d9d6f5b3e8856fa6995fdc7ed74c6382","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":213,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"eb41d1eb6dbcb66d966ca3b557af45d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":214,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"28e5eef69286d763453cf31a32070685","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":215,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"c4daef7910e2cd6aaaae07759d897d03","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":216,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":217,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":218,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":219,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"a03716c4989d9bdbacbbf1b52dcfad7c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":220,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":221,"source_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-01T12:29:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"id":222,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"b1a16c73af31999d323930a2c4167a74","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":223,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"fdbf8ef6fe6c3e0273244b9efa4f4563","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":224,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"44756b6ca3948002965adbdf75e287e4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":225,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"4645e05fc44e0cd3f1efadca1d825a88","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":226,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"0a944d6947cd45922d3e267c069fee6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":227,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"e115f2054f8d1d592750cc634e682da8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/AuthUserServiceImplTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":228,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"93b5379effd73cbce347a8747296d18c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/SysDeptServiceImplTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":229,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"f204b35859a78f3352a067656ec89482","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":230,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"a0e0e501f0f901ac1f12b089a1bf5f9a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":231,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"ef7f823f436c1c0a09594b106637d202","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":232,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"70a8328bf44d129f9e9f84a552674c0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":233,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"78a779bf8e042a4c180c7cf6b2f09c30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":234,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"39e025b53656f4fb1e51330f3f63f82f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/service/KkFileViewClientTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":235,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"4e86e9e389b4b08fe8963d3cf346bef6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/test/java/com/crm/file/task/Or orphanChunkCleanupTaskTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":236,"source_id":"7ef884a5-5749-405d-9da2-6cc20683c050","target_id":"eb157d8b43dd11418aef51259017012c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":238,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"7ef884a5-5749-405d-9da2-6cc20683c050","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e 7ef884a5-5749-405d-9da2-6cc20683c050","gmt_create":"2026-08-01T12:30:45+08:00","gmt_modified":"2026-08-01T12:30:45+08:00"},{"id":263,"source_id":"246da6901c21f063ab47e58aaebcdd3c","target_id":"9c3911a56d8521ef26f3e3ec2accd8a5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-34","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":265,"source_id":"cff6e76ddd2bdf3e405ed171c279d307","target_id":"7b901ed8b88126265d0f6a5b26105fac","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-15","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":267,"source_id":"5725c122fbf467925192bf42403e7787","target_id":"daaa931a3614c39bba377186b1f5be5f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 64-93","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":269,"source_id":"58507cf1cc358b2da45575d16c857d87","target_id":"c440d4eea295917cf8174d31ba36318a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 13-23","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":271,"source_id":"246da6901c21f063ab47e58aaebcdd3c","target_id":"bb69d53898126328709f0ffa74b84a21","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-41","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":273,"source_id":"246da6901c21f063ab47e58aaebcdd3c","target_id":"08f1e1f256663048fa344ad9d0b2ec50","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 43-47","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":275,"source_id":"8cac10327042dbf538d05120f601aa48","target_id":"bf93fb5169672f79ac4fd9358def044a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-41","gmt_create":"2026-08-03T19:26:09+08:00","gmt_modified":"2026-08-03T19:26:09+08:00"},{"id":276,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":277,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":278,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"21067ee0ba0180f2b8514173343f7b0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":279,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":280,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":281,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":282,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":283,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":284,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":285,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"d9ade6309a688b79e49a87c991d5af6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":286,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":287,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":288,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":289,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":290,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":291,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":292,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":293,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":294,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":295,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":296,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":297,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":298,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":299,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":300,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":301,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":302,"source_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","target_id":"a0e0e501f0f901ac1f12b089a1bf5f9a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java","gmt_create":"2026-08-03T19:26:44+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"id":303,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":304,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":305,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":306,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":307,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"b1a16c73af31999d323930a2c4167a74","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: pom.xml","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":308,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":309,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":310,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"949d7f85b20c96ff625551608a0a3453","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":311,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":312,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":313,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":314,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":315,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":316,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":317,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":318,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":319,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":320,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":321,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":322,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":323,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":324,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":325,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":326,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":327,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":328,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":329,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":330,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":331,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":332,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":333,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":334,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":335,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":336,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":337,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":338,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"de4842c7b9763f7398ef2c3dec53465d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: docs/adr/0009-sso-reuses-scan-login-endpoint.md","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":339,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"ce03262b-4baa-4304-84b5-4f936862ebac","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e ce03262b-4baa-4304-84b5-4f936862ebac","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":341,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"6a3ce482-07a4-416a-98d2-110c5877bf11","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e 6a3ce482-07a4-416a-98d2-110c5877bf11","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":342,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"f34d9fa4-1ba0-428e-a8bf-dc560bb5c61c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e f34d9fa4-1ba0-428e-a8bf-dc560bb5c61c","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":343,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"5a282910-9cce-41af-8c7a-7fb5d0d295dd","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e 5a282910-9cce-41af-8c7a-7fb5d0d295dd","gmt_create":"2026-08-03T19:27:27+08:00","gmt_modified":"2026-08-03T19:27:27+08:00"},{"id":346,"source_id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:55:26+08:00","gmt_modified":"2026-08-03T19:55:26+08:00"},{"id":347,"source_id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:26+08:00","gmt_modified":"2026-08-03T19:55:26+08:00"},{"id":348,"source_id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:26+08:00","gmt_modified":"2026-08-03T19:55:26+08:00"},{"id":349,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":350,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":351,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":352,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":353,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":354,"source_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","target_id":"aab51a092e42f86e794b23b95107cba3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","gmt_create":"2026-08-03T19:55:33+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"id":355,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":356,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":357,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":358,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":359,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"3204c0be957891dd9b878beed284f4a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":360,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":361,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":362,"source_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":365,"source_id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","target_id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: f5db08f6-ba6c-48f9-a61d-1d476a52234e -\u003e 48cadf57-f1d9-4cff-8455-1f96e33b15ec","gmt_create":"2026-08-03T19:55:42+08:00","gmt_modified":"2026-08-03T19:55:42+08:00"},{"id":366,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":367,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":368,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"f648b675f6acc57fd1e4fe32e9a205c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":369,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":370,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"d9d6f5b3e8856fa6995fdc7ed74c6382","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":371,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"eb41d1eb6dbcb66d966ca3b557af45d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":372,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"3259a2ba7196998a24118782cceeecee","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":373,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":374,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"f9926a70a628c5e92f0d239030b13f71","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":375,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":376,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":377,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":378,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":379,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":380,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":381,"source_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","target_id":"53e5a23ce2cd9f508b08b6e1eb290542","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":382,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"ef0fb46c0db255fd9bde4380928104bf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":383,"source_id":"f648b675f6acc57fd1e4fe32e9a205c4","target_id":"aafd447ec3bbf25736e2c0c9c6fa613c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-51","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":384,"source_id":"26cb8256b5c728bdc24b532313d3a166","target_id":"f3443603f743cb75a94a04d692a61a9f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-76","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":385,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"0be9e4b0a80212931a37787fb4305723","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-79","gmt_create":"2026-08-04T09:27:04+08:00","gmt_modified":"2026-08-04T09:27:04+08:00"},{"id":387,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"e2830d81d6e28aed10dccc2713cc2d1b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-48","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":388,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"45bf77ddaa679acca8c5535083b5945c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-262","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":389,"source_id":"e42a3afd007bd414adca430109ffa7f2","target_id":"8db96ae3b010284910f8431c1c2367f0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-26","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":390,"source_id":"f9926a70a628c5e92f0d239030b13f71","target_id":"88730f3c070dfa62a6a9093270580a8b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-123","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":391,"source_id":"5be8fe765c8b4c953e524cdf749f440b","target_id":"c0493efa487cf930abd2933af3e72781","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-19","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":392,"source_id":"4194d46035c0037d3488ab82e57001ba","target_id":"5fe39f4159a0d5a68c0d1ee34a2b6103","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-76","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":449,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"9488e996384d45f67488bdccc4e0f0b6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-04T09:57:47+08:00","gmt_modified":"2026-08-04T09:57:47+08:00"},{"id":451,"source_id":"01c3b61921ce0cdb4028d7335ad82908","target_id":"57d5a8ab851652a3705c29fe5c19864f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-106","gmt_create":"2026-08-04T09:57:47+08:00","gmt_modified":"2026-08-04T09:57:47+08:00"},{"id":456,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"14a15fa440881d50b36d8c53e94dd736","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 165-194","gmt_create":"2026-08-04T10:27:21+08:00","gmt_modified":"2026-08-04T10:27:21+08:00"},{"id":457,"source_id":"f648b675f6acc57fd1e4fe32e9a205c4","target_id":"7b42b81da49de266d4cee69b9c075f9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-50","gmt_create":"2026-08-04T10:27:21+08:00","gmt_modified":"2026-08-04T10:27:21+08:00"},{"id":458,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"89b76c08a217330b3e8334f4e696a002","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 235-238","gmt_create":"2026-08-04T10:27:21+08:00","gmt_modified":"2026-08-04T10:27:21+08:00"},{"id":504,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"b2e64975f941d389f848f0911b5d21fc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-84","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":506,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"11ff686199a527b16c34abb2c1c3f179","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-56","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":508,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"204b3d8b3f185c9d4e51d901e51ade12","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-265","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":524,"source_id":"f648b675f6acc57fd1e4fe32e9a205c4","target_id":"77b6a344d88f4c26037ba82e391ac061","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 12-52","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":546,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"eebd80b02064751aa384ae1f18d557dd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 169-198","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":548,"source_id":"f648b675f6acc57fd1e4fe32e9a205c4","target_id":"f8d3167a88d67e6e0bc04c71cca4a65d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 37-51","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":550,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"7687130ee4a47c1e4e4ef1082d573508","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 239-242","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":552,"source_id":"53e5a23ce2cd9f508b08b6e1eb290542","target_id":"91398e71753529e02986d50a8cfc06e8","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 36-71","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":554,"source_id":"145452b72cda2735ac97a690f2b5cbd9","target_id":"887ed5c02b23a570f50766518fc13e38","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-50","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":556,"source_id":"53e5a23ce2cd9f508b08b6e1eb290542","target_id":"62a16405b98e80047bc86598efeeb2c2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-91","gmt_create":"2026-08-04T11:27:20+08:00","gmt_modified":"2026-08-04T11:27:20+08:00"},{"id":578,"source_id":"4b325dd0ffe965ccff6bc2e8acc431d6","target_id":"b37809db1bcbb443f89e776fd2522d74","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-36","gmt_create":"2026-08-04T17:13:27.2547039+08:00","gmt_modified":"2026-08-04T17:13:27.2547039+08:00"},{"id":580,"source_id":"74123de2770c04a2d8a4787f177714fc","target_id":"281426f342c415888879dec628d8ede2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-68","gmt_create":"2026-08-04T17:13:27.2557011+08:00","gmt_modified":"2026-08-04T17:13:27.2557011+08:00"},{"id":582,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"8bfb66ee95e0b604e7e00a10d54b97e2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-140","gmt_create":"2026-08-04T17:13:27.2557011+08:00","gmt_modified":"2026-08-04T17:13:27.2557011+08:00"},{"id":588,"source_id":"4b325dd0ffe965ccff6bc2e8acc431d6","target_id":"0415a1cb895b4930fc134a552eb7fcd9","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-35","gmt_create":"2026-08-04T17:13:27.2576965+08:00","gmt_modified":"2026-08-04T17:13:27.2576965+08:00"},{"id":590,"source_id":"74123de2770c04a2d8a4787f177714fc","target_id":"de8131647b7f08746c909c1fdda7ae19","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-67","gmt_create":"2026-08-04T17:13:27.2576965+08:00","gmt_modified":"2026-08-04T17:13:27.2576965+08:00"},{"id":592,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"6a73c502cfcf49993f7db005be0fcab3","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-139","gmt_create":"2026-08-04T17:13:27.2586936+08:00","gmt_modified":"2026-08-04T17:13:27.2586936+08:00"},{"id":594,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"1d5a19e1dc4ede80e406d2b2e272b233","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 52-104","gmt_create":"2026-08-04T17:13:27.2586936+08:00","gmt_modified":"2026-08-04T17:13:27.2586936+08:00"},{"id":596,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"f949367b75ef88b463185169c2da20e7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 106-116","gmt_create":"2026-08-04T17:13:27.2596899+08:00","gmt_modified":"2026-08-04T17:13:27.2596899+08:00"},{"id":619,"source_id":"5b91363610bf599cc013882938cf595a","target_id":"64aec830421b2d35910074429d1ee986","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-04T17:13:27.3751444+08:00","gmt_modified":"2026-08-04T17:13:27.3751444+08:00"},{"id":627,"source_id":"46bb7615dec0d0825cbcc4b846b93bf6","target_id":"5609defe76e630b07bff8855db378c55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-50","gmt_create":"2026-08-04T17:13:27.3777241+08:00","gmt_modified":"2026-08-04T17:13:27.3777241+08:00"},{"id":677,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-04T17:15:13.3088531+08:00","gmt_modified":"2026-08-04T17:15:13.3088531+08:00"},{"id":678,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-04T17:15:13.3094144+08:00","gmt_modified":"2026-08-04T17:15:13.3094144+08:00"},{"id":679,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-04T17:15:13.3094144+08:00","gmt_modified":"2026-08-04T17:15:13.3094144+08:00"},{"id":680,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-04T17:15:13.3099407+08:00","gmt_modified":"2026-08-04T17:15:13.3099407+08:00"},{"id":681,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"2467957f6e01fd8cb020680dae20873c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibility.java","gmt_create":"2026-08-04T17:15:13.3099407+08:00","gmt_modified":"2026-08-04T17:15:13.3099407+08:00"},{"id":682,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"43e90eb333a5285a72ef91c378ede1da","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/VisibilityScope.java","gmt_create":"2026-08-04T17:15:13.3104483+08:00","gmt_modified":"2026-08-04T17:15:13.3104483+08:00"},{"id":683,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-04T17:15:13.3109553+08:00","gmt_modified":"2026-08-04T17:15:13.3109553+08:00"},{"id":684,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-04T17:15:13.3109553+08:00","gmt_modified":"2026-08-04T17:15:13.3109553+08:00"},{"id":685,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-04T17:15:13.3109553+08:00","gmt_modified":"2026-08-04T17:15:13.3109553+08:00"},{"id":686,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-04T17:15:13.3109553+08:00","gmt_modified":"2026-08-04T17:15:13.3109553+08:00"},{"id":687,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-04T17:15:13.3114942+08:00","gmt_modified":"2026-08-04T17:15:13.3114942+08:00"},{"id":688,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-04T17:15:13.3114942+08:00","gmt_modified":"2026-08-04T17:15:13.3114942+08:00"},{"id":689,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-04T17:15:13.3114942+08:00","gmt_modified":"2026-08-04T17:15:13.3114942+08:00"},{"id":690,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"4b325dd0ffe965ccff6bc2e8acc431d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","gmt_create":"2026-08-04T17:15:13.3120014+08:00","gmt_modified":"2026-08-04T17:15:13.3120014+08:00"},{"id":691,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"46bb7615dec0d0825cbcc4b846b93bf6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","gmt_create":"2026-08-04T17:15:13.3120014+08:00","gmt_modified":"2026-08-04T17:15:13.3120014+08:00"},{"id":692,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"74123de2770c04a2d8a4787f177714fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","gmt_create":"2026-08-04T17:15:13.3120014+08:00","gmt_modified":"2026-08-04T17:15:13.3120014+08:00"},{"id":693,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-04T17:15:13.3125112+08:00","gmt_modified":"2026-08-04T17:15:13.3125112+08:00"},{"id":694,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-04T17:15:13.3125112+08:00","gmt_modified":"2026-08-04T17:15:13.3125112+08:00"},{"id":695,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"aab51a092e42f86e794b23b95107cba3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","gmt_create":"2026-08-04T17:15:13.3125112+08:00","gmt_modified":"2026-08-04T17:15:13.3125112+08:00"},{"id":696,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-04T17:15:13.3130328+08:00","gmt_modified":"2026-08-04T17:15:13.3130328+08:00"},{"id":697,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-04T17:15:13.3130328+08:00","gmt_modified":"2026-08-04T17:15:13.3130328+08:00"},{"id":698,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-04T17:15:13.3130328+08:00","gmt_modified":"2026-08-04T17:15:13.3130328+08:00"},{"id":699,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"70a8328bf44d129f9e9f84a552674c0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java","gmt_create":"2026-08-04T17:15:13.3130328+08:00","gmt_modified":"2026-08-04T17:15:13.3130328+08:00"},{"id":700,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"450e832ef93367bf62c150db0a3c2257","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedData.java","gmt_create":"2026-08-04T17:15:13.3135414+08:00","gmt_modified":"2026-08-04T17:15:13.3135414+08:00"},{"id":701,"source_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","target_id":"e6cba19378ad4cca1120a969537c90a1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedDataMapper.java","gmt_create":"2026-08-04T17:15:13.3135414+08:00","gmt_modified":"2026-08-04T17:15:13.3135414+08:00"},{"id":724,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"b035fb3ad85211cbb45c19394a008a00","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-47","gmt_create":"2026-08-04T17:43:50.0816056+08:00","gmt_modified":"2026-08-04T17:43:50.0816056+08:00"},{"id":726,"source_id":"8a7bb9534d7381df886b1a476664b902","target_id":"b2442a608015b36893e09b8b2f7b494d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 8-24","gmt_create":"2026-08-04T17:43:50.0821389+08:00","gmt_modified":"2026-08-04T17:43:50.0821389+08:00"},{"id":728,"source_id":"db5d3491fb45251456163d012a823f5d","target_id":"ef24be7c3ce60d8e7b85f3203a781aa0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 85-95","gmt_create":"2026-08-04T17:43:50.0821389+08:00","gmt_modified":"2026-08-04T17:43:50.0821389+08:00"},{"id":772,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"bde5b6b2040fcc42ff440b833e618413","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-36","gmt_create":"2026-08-04T17:43:50.1196607+08:00","gmt_modified":"2026-08-04T17:43:50.1196607+08:00"},{"id":774,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"aab06df7332d57aad5c5bfbfe932e815","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 38-46","gmt_create":"2026-08-04T17:43:50.1201713+08:00","gmt_modified":"2026-08-04T17:43:50.1201713+08:00"},{"id":776,"source_id":"8a7bb9534d7381df886b1a476664b902","target_id":"a5de4c49ca519b57c5ebbebba0bf26dd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 10-23","gmt_create":"2026-08-04T17:43:50.1206821+08:00","gmt_modified":"2026-08-04T17:43:50.1206821+08:00"},{"id":779,"source_id":"db5d3491fb45251456163d012a823f5d","target_id":"90f1865562e9f5620beef18de905d9e7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-36","gmt_create":"2026-08-04T17:43:50.1217018+08:00","gmt_modified":"2026-08-04T17:43:50.1217018+08:00"},{"id":782,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-04T17:44:06.5407164+08:00","gmt_modified":"2026-08-04T17:44:06.5407164+08:00"},{"id":783,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-04T17:44:06.5407164+08:00","gmt_modified":"2026-08-04T17:44:06.5407164+08:00"},{"id":784,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-04T17:44:06.5407164+08:00","gmt_modified":"2026-08-04T17:44:06.5407164+08:00"},{"id":785,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-04T17:44:06.5412253+08:00","gmt_modified":"2026-08-04T17:44:06.5412253+08:00"},{"id":786,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"4b325dd0ffe965ccff6bc2e8acc431d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","gmt_create":"2026-08-04T17:44:06.5412253+08:00","gmt_modified":"2026-08-04T17:44:06.5412253+08:00"},{"id":787,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"46bb7615dec0d0825cbcc4b846b93bf6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","gmt_create":"2026-08-04T17:44:06.5412253+08:00","gmt_modified":"2026-08-04T17:44:06.5412253+08:00"},{"id":788,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"74123de2770c04a2d8a4787f177714fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","gmt_create":"2026-08-04T17:44:06.5412253+08:00","gmt_modified":"2026-08-04T17:44:06.5412253+08:00"},{"id":789,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"2467957f6e01fd8cb020680dae20873c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibility.java","gmt_create":"2026-08-04T17:44:06.5417905+08:00","gmt_modified":"2026-08-04T17:44:06.5417905+08:00"},{"id":790,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-04T17:44:06.5417905+08:00","gmt_modified":"2026-08-04T17:44:06.5417905+08:00"},{"id":791,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-04T17:44:06.5417905+08:00","gmt_modified":"2026-08-04T17:44:06.5417905+08:00"},{"id":792,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-04T17:44:06.5423441+08:00","gmt_modified":"2026-08-04T17:44:06.5423441+08:00"},{"id":793,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-04T17:44:06.5423441+08:00","gmt_modified":"2026-08-04T17:44:06.5423441+08:00"},{"id":794,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-04T17:44:06.5423441+08:00","gmt_modified":"2026-08-04T17:44:06.5423441+08:00"},{"id":795,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-04T17:44:06.5428567+08:00","gmt_modified":"2026-08-04T17:44:06.5428567+08:00"},{"id":796,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-04T17:44:06.5428567+08:00","gmt_modified":"2026-08-04T17:44:06.5428567+08:00"},{"id":797,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-04T17:44:06.5428567+08:00","gmt_modified":"2026-08-04T17:44:06.5428567+08:00"},{"id":798,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-04T17:44:06.5433767+08:00","gmt_modified":"2026-08-04T17:44:06.5433767+08:00"},{"id":799,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-04T17:44:06.5439327+08:00","gmt_modified":"2026-08-04T17:44:06.5439327+08:00"},{"id":800,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"4bbbc2f3c27f80699526357490785390","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","gmt_create":"2026-08-04T17:44:06.5439327+08:00","gmt_modified":"2026-08-04T17:44:06.5439327+08:00"},{"id":801,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"206da08c92480415f9750a64c534d171","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/service/IBaseService.java","gmt_create":"2026-08-04T17:44:06.5444528+08:00","gmt_modified":"2026-08-04T17:44:06.5444528+08:00"},{"id":802,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-04T17:44:06.5449575+08:00","gmt_modified":"2026-08-04T17:44:06.5449575+08:00"},{"id":803,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-04T17:44:06.5449709+08:00","gmt_modified":"2026-08-04T17:44:06.5449709+08:00"},{"id":804,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-04T17:44:06.5449709+08:00","gmt_modified":"2026-08-04T17:44:06.5449709+08:00"},{"id":805,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-04T17:44:06.5449709+08:00","gmt_modified":"2026-08-04T17:44:06.5449709+08:00"},{"id":806,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"daaa931a3614c39bba377186b1f5be5f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java#64-93","gmt_create":"2026-08-04T17:44:06.5454834+08:00","gmt_modified":"2026-08-04T17:44:06.5454834+08:00"},{"id":807,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"2f06083130bf64ee2a878837250ee2af","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java#117-139","gmt_create":"2026-08-04T17:44:06.5454834+08:00","gmt_modified":"2026-08-04T17:44:06.5454834+08:00"},{"id":808,"source_id":"5725c122fbf467925192bf42403e7787","target_id":"2f06083130bf64ee2a878837250ee2af","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 117-139","gmt_create":"2026-08-04T17:44:06.5459867+08:00","gmt_modified":"2026-08-04T17:44:06.5459867+08:00"},{"id":809,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"5fc541009259cef5dde6459097ee02c7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java#149-165","gmt_create":"2026-08-04T17:44:06.545997+08:00","gmt_modified":"2026-08-04T17:44:06.545997+08:00"},{"id":810,"source_id":"5725c122fbf467925192bf42403e7787","target_id":"5fc541009259cef5dde6459097ee02c7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 149-165","gmt_create":"2026-08-04T17:44:06.545997+08:00","gmt_modified":"2026-08-04T17:44:06.545997+08:00"},{"id":811,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"c8fe83bfdcdebf6c4cbafe5ccc3fff2c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java#15-53","gmt_create":"2026-08-04T17:44:06.545997+08:00","gmt_modified":"2026-08-04T17:44:06.545997+08:00"},{"id":812,"source_id":"8e967137fd04208873ef2894951b2b3d","target_id":"c8fe83bfdcdebf6c4cbafe5ccc3fff2c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-53","gmt_create":"2026-08-04T17:44:06.546509+08:00","gmt_modified":"2026-08-04T17:44:06.546509+08:00"},{"id":813,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"2402e2fbf96b2963b98e75da818f2777","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java#15-34","gmt_create":"2026-08-04T17:44:06.546509+08:00","gmt_modified":"2026-08-04T17:44:06.546509+08:00"},{"id":814,"source_id":"7179946069c5d0654ca49cca77eaaedb","target_id":"2402e2fbf96b2963b98e75da818f2777","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 15-34","gmt_create":"2026-08-04T17:44:06.546509+08:00","gmt_modified":"2026-08-04T17:44:06.546509+08:00"},{"id":815,"source_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","target_id":"46fa00e13eb3286302d3787e8c1f1051","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java#127-138","gmt_create":"2026-08-04T17:44:06.5470183+08:00","gmt_modified":"2026-08-04T17:44:06.5470183+08:00"},{"id":816,"source_id":"5725c122fbf467925192bf42403e7787","target_id":"46fa00e13eb3286302d3787e8c1f1051","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 127-138","gmt_create":"2026-08-04T17:44:06.5470183+08:00","gmt_modified":"2026-08-04T17:44:06.5470183+08:00"},{"id":817,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-04T17:44:30.7473472+08:00","gmt_modified":"2026-08-04T17:44:30.7473472+08:00"},{"id":818,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"3d68f400d8919945b4f8a1aff4375e39","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/WebMvcConfig.java","gmt_create":"2026-08-04T17:44:30.747857+08:00","gmt_modified":"2026-08-04T17:44:30.747857+08:00"},{"id":819,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"46667b5e631f28a6dd940cfc171debf2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/ApiPermissionInterceptor.java","gmt_create":"2026-08-04T17:44:30.747857+08:00","gmt_modified":"2026-08-04T17:44:30.747857+08:00"},{"id":820,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"91ab5af5f40c9f910746f8c5c7825100","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/ApiPermissionCache.java","gmt_create":"2026-08-04T17:44:30.747857+08:00","gmt_modified":"2026-08-04T17:44:30.747857+08:00"},{"id":821,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"1c8f46373fde157638a9331bc5ac12f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/ApiPermissionRule.java","gmt_create":"2026-08-04T17:44:30.7483675+08:00","gmt_modified":"2026-08-04T17:44:30.7483675+08:00"},{"id":822,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-04T17:44:30.7483675+08:00","gmt_modified":"2026-08-04T17:44:30.7483675+08:00"},{"id":823,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-04T17:44:30.7483675+08:00","gmt_modified":"2026-08-04T17:44:30.7483675+08:00"},{"id":824,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-04T17:44:30.7488774+08:00","gmt_modified":"2026-08-04T17:44:30.7488774+08:00"},{"id":825,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-04T17:44:30.7488774+08:00","gmt_modified":"2026-08-04T17:44:30.7488774+08:00"},{"id":826,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-04T17:44:30.7493856+08:00","gmt_modified":"2026-08-04T17:44:30.7493856+08:00"},{"id":827,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-04T17:44:30.7493856+08:00","gmt_modified":"2026-08-04T17:44:30.7493856+08:00"},{"id":828,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-04T17:44:30.7493856+08:00","gmt_modified":"2026-08-04T17:44:30.7493856+08:00"},{"id":829,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-04T17:44:30.7498987+08:00","gmt_modified":"2026-08-04T17:44:30.7498987+08:00"},{"id":830,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"949d7f85b20c96ff625551608a0a3453","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-04T17:44:30.7498987+08:00","gmt_modified":"2026-08-04T17:44:30.7498987+08:00"},{"id":831,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-04T17:44:30.7498987+08:00","gmt_modified":"2026-08-04T17:44:30.7498987+08:00"},{"id":832,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-04T17:44:30.7504084+08:00","gmt_modified":"2026-08-04T17:44:30.7504084+08:00"},{"id":833,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-04T17:44:30.7504084+08:00","gmt_modified":"2026-08-04T17:44:30.7504084+08:00"},{"id":834,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-04T17:44:30.7504084+08:00","gmt_modified":"2026-08-04T17:44:30.7504084+08:00"},{"id":835,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-04T17:44:30.7509233+08:00","gmt_modified":"2026-08-04T17:44:30.7509233+08:00"},{"id":836,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-04T17:44:30.7509233+08:00","gmt_modified":"2026-08-04T17:44:30.7509233+08:00"},{"id":837,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-04T17:44:30.7509233+08:00","gmt_modified":"2026-08-04T17:44:30.7509233+08:00"},{"id":838,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-04T17:44:30.7514309+08:00","gmt_modified":"2026-08-04T17:44:30.7514309+08:00"},{"id":839,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"197b55f1b7d7d1be28b124897acfa1eb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","gmt_create":"2026-08-04T17:44:30.7514309+08:00","gmt_modified":"2026-08-04T17:44:30.7514309+08:00"},{"id":840,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"e42a3afd007bd414adca430109ffa7f2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IResourceService.java","gmt_create":"2026-08-04T17:44:30.7514309+08:00","gmt_modified":"2026-08-04T17:44:30.7514309+08:00"},{"id":841,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"145452b72cda2735ac97a690f2b5cbd9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","gmt_create":"2026-08-04T17:44:30.7519472+08:00","gmt_modified":"2026-08-04T17:44:30.7519472+08:00"},{"id":842,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-04T17:44:30.7519472+08:00","gmt_modified":"2026-08-04T17:44:30.7519472+08:00"},{"id":843,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-04T17:44:30.7519472+08:00","gmt_modified":"2026-08-04T17:44:30.7519472+08:00"},{"id":844,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"f648b675f6acc57fd1e4fe32e9a205c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","gmt_create":"2026-08-04T17:44:30.7524564+08:00","gmt_modified":"2026-08-04T17:44:30.7524564+08:00"},{"id":845,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-04T17:44:30.7524564+08:00","gmt_modified":"2026-08-04T17:44:30.7524564+08:00"},{"id":846,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-04T17:44:30.7529658+08:00","gmt_modified":"2026-08-04T17:44:30.7529658+08:00"},{"id":847,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-04T17:44:30.7529658+08:00","gmt_modified":"2026-08-04T17:44:30.7529658+08:00"},{"id":848,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-04T17:44:30.7529658+08:00","gmt_modified":"2026-08-04T17:44:30.7529658+08:00"},{"id":849,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"4b325dd0ffe965ccff6bc2e8acc431d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","gmt_create":"2026-08-04T17:44:30.7529658+08:00","gmt_modified":"2026-08-04T17:44:30.7529658+08:00"},{"id":850,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"46bb7615dec0d0825cbcc4b846b93bf6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","gmt_create":"2026-08-04T17:44:30.7534707+08:00","gmt_modified":"2026-08-04T17:44:30.7534707+08:00"},{"id":851,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"74123de2770c04a2d8a4787f177714fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","gmt_create":"2026-08-04T17:44:30.7534707+08:00","gmt_modified":"2026-08-04T17:44:30.7534707+08:00"},{"id":852,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"34e7e1e31cc014e8ab3104acc807cc73","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java","gmt_create":"2026-08-04T17:45:24.5949393+08:00","gmt_modified":"2026-08-04T17:45:24.5949393+08:00"},{"id":853,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"f77483962ff198e16f41554c6e1ceb39","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java","gmt_create":"2026-08-04T17:45:24.5949393+08:00","gmt_modified":"2026-08-04T17:45:24.5949393+08:00"},{"id":854,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-04T17:45:24.595455+08:00","gmt_modified":"2026-08-04T17:45:24.595455+08:00"},{"id":855,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-04T17:45:24.595455+08:00","gmt_modified":"2026-08-04T17:45:24.595455+08:00"},{"id":856,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-04T17:45:24.595455+08:00","gmt_modified":"2026-08-04T17:45:24.595455+08:00"},{"id":857,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"0515f235f6ec8e32043a3b870d857764","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java","gmt_create":"2026-08-04T17:45:24.5959627+08:00","gmt_modified":"2026-08-04T17:45:24.5959627+08:00"},{"id":858,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"7f4bc54539c21a1d994bbbabe2868f2e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-04T17:45:24.5959627+08:00","gmt_modified":"2026-08-04T17:45:24.5959627+08:00"},{"id":859,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"83821a36e4f3e52f5bffc50e24952e99","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-04T17:45:24.5959627+08:00","gmt_modified":"2026-08-04T17:45:24.5959627+08:00"},{"id":860,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-04T17:45:24.5959627+08:00","gmt_modified":"2026-08-04T17:45:24.5959627+08:00"},{"id":861,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-04T17:45:24.5964744+08:00","gmt_modified":"2026-08-04T17:45:24.5964744+08:00"},{"id":862,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-04T17:45:24.5964744+08:00","gmt_modified":"2026-08-04T17:45:24.5964744+08:00"},{"id":863,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-04T17:45:24.5969787+08:00","gmt_modified":"2026-08-04T17:45:24.5969787+08:00"},{"id":864,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-04T17:45:24.5969914+08:00","gmt_modified":"2026-08-04T17:45:24.5969914+08:00"},{"id":865,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-04T17:45:24.5969914+08:00","gmt_modified":"2026-08-04T17:45:24.5969914+08:00"},{"id":866,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-04T17:45:24.5969914+08:00","gmt_modified":"2026-08-04T17:45:24.5969914+08:00"},{"id":867,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-04T17:45:24.5975052+08:00","gmt_modified":"2026-08-04T17:45:24.5975052+08:00"},{"id":868,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-04T17:45:24.5975052+08:00","gmt_modified":"2026-08-04T17:45:24.5975052+08:00"},{"id":869,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"f648b675f6acc57fd1e4fe32e9a205c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","gmt_create":"2026-08-04T17:45:24.5975052+08:00","gmt_modified":"2026-08-04T17:45:24.5975052+08:00"},{"id":870,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-04T17:45:24.5980482+08:00","gmt_modified":"2026-08-04T17:45:24.5980482+08:00"},{"id":871,"source_id":"aac0b656-e390-412c-a1a3-16b77a280875","target_id":"145452b72cda2735ac97a690f2b5cbd9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","gmt_create":"2026-08-04T17:45:24.5980482+08:00","gmt_modified":"2026-08-04T17:45:24.5980482+08:00"},{"id":872,"source_id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","target_id":"aac0b656-e390-412c-a1a3-16b77a280875","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8fe6d28f-484c-4d9e-aab9-2ff716cdd083 -\u003e aac0b656-e390-412c-a1a3-16b77a280875","gmt_create":"2026-08-04T17:46:34.0368511+08:00","gmt_modified":"2026-08-04T17:46:34.0368511+08:00"},{"id":876,"source_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","target_id":"e886a159-657d-4516-9922-a6cabb6aabc0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 85dce05c-14ae-4632-82e5-30fab7771e6d -\u003e e886a159-657d-4516-9922-a6cabb6aabc0","gmt_create":"2026-08-04T17:46:34.0471887+08:00","gmt_modified":"2026-08-04T17:46:34.0471887+08:00"},{"id":983,"source_id":"443c00696b8cf69bb4c73995c949f40d","target_id":"bf2a5b38e2282ce9fac3ddffb79caa77","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 33-91","gmt_create":"2026-08-05T12:14:37.8289543+08:00","gmt_modified":"2026-08-05T12:14:37.8289543+08:00"},{"id":985,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"9c19bba97b38fe3dbcde5a59ab43be02","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22","gmt_create":"2026-08-05T12:14:37.8294687+08:00","gmt_modified":"2026-08-05T12:14:37.8294687+08:00"},{"id":994,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"1836e8519a64afa41b6149f64004367d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 99-115","gmt_create":"2026-08-05T12:14:37.8315025+08:00","gmt_modified":"2026-08-05T12:14:37.8315025+08:00"},{"id":996,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"ee8780ef7b8bf30f59a58835f45a37cf","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 52-64","gmt_create":"2026-08-05T12:14:37.8315025+08:00","gmt_modified":"2026-08-05T12:14:37.8315025+08:00"},{"id":998,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"27c5906bd5f3cc82cbe0f9fe969cc057","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 118-124","gmt_create":"2026-08-05T12:14:37.8320185+08:00","gmt_modified":"2026-08-05T12:14:37.8320185+08:00"},{"id":1038,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-05T12:14:49.6490123+08:00","gmt_modified":"2026-08-05T12:14:49.6490123+08:00"},{"id":1039,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1040,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1041,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1042,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1043,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1044,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1045,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"197b55f1b7d7d1be28b124897acfa1eb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","gmt_create":"2026-08-05T12:14:49.6499561+08:00","gmt_modified":"2026-08-05T12:14:49.6499561+08:00"},{"id":1046,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"443c00696b8cf69bb4c73995c949f40d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1047,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1048,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1049,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1050,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1051,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1052,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1053,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-05T12:14:49.6509534+08:00","gmt_modified":"2026-08-05T12:14:49.6509534+08:00"},{"id":1054,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1055,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1056,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1057,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1058,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1059,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8a7bb9534d7381df886b1a476664b902","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","gmt_create":"2026-08-05T12:14:49.6519506+08:00","gmt_modified":"2026-08-05T12:14:49.6519506+08:00"},{"id":1060,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1061,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"3259a2ba7196998a24118782cceeecee","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1062,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1063,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"0951805a35c8cf0d998263dfed532ebe","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1064,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6529479+08:00","gmt_modified":"2026-08-05T12:14:49.6529479+08:00"},{"id":1065,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"e42a3afd007bd414adca430109ffa7f2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IResourceService.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1066,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"145452b72cda2735ac97a690f2b5cbd9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1067,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1068,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1069,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1070,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1071,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"a03716c4989d9bdbacbbf1b52dcfad7c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","gmt_create":"2026-08-05T12:14:49.6539453+08:00","gmt_modified":"2026-08-05T12:14:49.6539453+08:00"},{"id":1072,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-05T12:14:49.6549426+08:00","gmt_modified":"2026-08-05T12:14:49.6549426+08:00"},{"id":1073,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"34070e2c4487d700b9aae2fc036dcced","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","gmt_create":"2026-08-05T12:14:49.6549426+08:00","gmt_modified":"2026-08-05T12:14:49.6549426+08:00"},{"id":1074,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-05T12:14:49.6549426+08:00","gmt_modified":"2026-08-05T12:14:49.6549426+08:00"},{"id":1075,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-05T12:14:49.6559465+08:00","gmt_modified":"2026-08-05T12:14:49.6559465+08:00"},{"id":1076,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-05T12:14:49.6569374+08:00","gmt_modified":"2026-08-05T12:14:49.6569374+08:00"},{"id":1077,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-05T12:14:49.6569374+08:00","gmt_modified":"2026-08-05T12:14:49.6569374+08:00"},{"id":1078,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-05T12:14:49.6707855+08:00","gmt_modified":"2026-08-05T12:14:49.6707855+08:00"},{"id":1079,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-05T12:14:49.6724674+08:00","gmt_modified":"2026-08-05T12:14:49.6724674+08:00"},{"id":1080,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T12:14:49.6724674+08:00","gmt_modified":"2026-08-05T12:14:49.6724674+08:00"},{"id":1081,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T12:14:49.6724674+08:00","gmt_modified":"2026-08-05T12:14:49.6724674+08:00"},{"id":1082,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-05T12:14:49.6729763+08:00","gmt_modified":"2026-08-05T12:14:49.6729763+08:00"},{"id":1083,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-05T12:14:49.6729763+08:00","gmt_modified":"2026-08-05T12:14:49.6729763+08:00"},{"id":1084,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-05T12:14:49.6729763+08:00","gmt_modified":"2026-08-05T12:14:49.6729763+08:00"},{"id":1085,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-05T12:14:49.6734994+08:00","gmt_modified":"2026-08-05T12:14:49.6734994+08:00"},{"id":1086,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-05T12:14:49.6734994+08:00","gmt_modified":"2026-08-05T12:14:49.6734994+08:00"},{"id":1087,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-05T12:14:49.674014+08:00","gmt_modified":"2026-08-05T12:14:49.674014+08:00"},{"id":1088,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-05T12:14:49.674014+08:00","gmt_modified":"2026-08-05T12:14:49.674014+08:00"},{"id":1089,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-05T12:14:49.674014+08:00","gmt_modified":"2026-08-05T12:14:49.674014+08:00"},{"id":1090,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"38d9b83ff8f46a8113aa787616b2f802","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java","gmt_create":"2026-08-05T12:14:49.674014+08:00","gmt_modified":"2026-08-05T12:14:49.674014+08:00"},{"id":1091,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-05T12:14:49.6745262+08:00","gmt_modified":"2026-08-05T12:14:49.6745262+08:00"},{"id":1092,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-05T12:14:49.6745262+08:00","gmt_modified":"2026-08-05T12:14:49.6745262+08:00"},{"id":1093,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"fe2b7c626178194ac3902aff308e602c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java#1-98","gmt_create":"2026-08-05T12:14:49.6750371+08:00","gmt_modified":"2026-08-05T12:14:49.6750371+08:00"},{"id":1094,"source_id":"443c00696b8cf69bb4c73995c949f40d","target_id":"fe2b7c626178194ac3902aff308e602c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-98","gmt_create":"2026-08-05T12:14:49.6750371+08:00","gmt_modified":"2026-08-05T12:14:49.6750371+08:00"},{"id":1095,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"0258e4223cc6ad38e6889a0dbe4226f4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#1-137","gmt_create":"2026-08-05T12:14:49.6750371+08:00","gmt_modified":"2026-08-05T12:14:49.6750371+08:00"},{"id":1096,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"0258e4223cc6ad38e6889a0dbe4226f4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-137","gmt_create":"2026-08-05T12:14:49.6755493+08:00","gmt_modified":"2026-08-05T12:14:49.6755493+08:00"},{"id":1097,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"cec4b333c23562375f8ba726ff8e33d4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java#1-43","gmt_create":"2026-08-05T12:14:49.6755493+08:00","gmt_modified":"2026-08-05T12:14:49.6755493+08:00"},{"id":1098,"source_id":"8a7bb9534d7381df886b1a476664b902","target_id":"cec4b333c23562375f8ba726ff8e33d4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-43","gmt_create":"2026-08-05T12:14:49.6755493+08:00","gmt_modified":"2026-08-05T12:14:49.6755493+08:00"},{"id":1099,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"3e766fa579578b179ce86668688a696e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java#1-61","gmt_create":"2026-08-05T12:14:49.676067+08:00","gmt_modified":"2026-08-05T12:14:49.676067+08:00"},{"id":1100,"source_id":"34070e2c4487d700b9aae2fc036dcced","target_id":"3e766fa579578b179ce86668688a696e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-61","gmt_create":"2026-08-05T12:14:49.676067+08:00","gmt_modified":"2026-08-05T12:14:49.676067+08:00"},{"id":1101,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"b0e4bf2cdfbf64b762ff202adf131edb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java#1-41","gmt_create":"2026-08-05T12:14:49.6765829+08:00","gmt_modified":"2026-08-05T12:14:49.6765829+08:00"},{"id":1102,"source_id":"5da86b8d801192fd63ea6aa57b666057","target_id":"b0e4bf2cdfbf64b762ff202adf131edb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-41","gmt_create":"2026-08-05T12:14:49.6765829+08:00","gmt_modified":"2026-08-05T12:14:49.6765829+08:00"},{"id":1103,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"f8cfac232dc38f8f3198444a305761ef","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java#1-31","gmt_create":"2026-08-05T12:14:49.6765829+08:00","gmt_modified":"2026-08-05T12:14:49.6765829+08:00"},{"id":1104,"source_id":"20f7693b186c4e003d04031dafd605b5","target_id":"f8cfac232dc38f8f3198444a305761ef","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-31","gmt_create":"2026-08-05T12:14:49.6770863+08:00","gmt_modified":"2026-08-05T12:14:49.6770863+08:00"},{"id":1105,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"e2830d81d6e28aed10dccc2713cc2d1b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#1-48","gmt_create":"2026-08-05T12:14:49.6770937+08:00","gmt_modified":"2026-08-05T12:14:49.6770937+08:00"},{"id":1106,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"45bf77ddaa679acca8c5535083b5945c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java#1-262","gmt_create":"2026-08-05T12:14:49.6770937+08:00","gmt_modified":"2026-08-05T12:14:49.6770937+08:00"},{"id":1107,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"8db96ae3b010284910f8431c1c2367f0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/IResourceService.java#1-26","gmt_create":"2026-08-05T12:14:49.6776023+08:00","gmt_modified":"2026-08-05T12:14:49.6776023+08:00"},{"id":1108,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"9488e996384d45f67488bdccc4e0f0b6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java#1-80","gmt_create":"2026-08-05T12:14:49.6776023+08:00","gmt_modified":"2026-08-05T12:14:49.6776023+08:00"},{"id":1109,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"57d5a8ab851652a3705c29fe5c19864f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-file/src/main/java/com/crm/file/api/FileApi.java#1-106","gmt_create":"2026-08-05T12:14:49.6781106+08:00","gmt_modified":"2026-08-05T12:14:49.6781106+08:00"},{"id":1112,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"a946df03-41d0-4e28-8069-d41d28c91eed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e a946df03-41d0-4e28-8069-d41d28c91eed","gmt_create":"2026-08-05T12:14:50.3214448+08:00","gmt_modified":"2026-08-05T12:14:50.3214448+08:00"},{"id":1114,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"81106841-6bef-41d3-8f76-7dc6437e7e04","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e 81106841-6bef-41d3-8f76-7dc6437e7e04","gmt_create":"2026-08-05T12:14:50.32249+08:00","gmt_modified":"2026-08-05T12:14:50.32249+08:00"},{"id":1115,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"85dce05c-14ae-4632-82e5-30fab7771e6d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e 85dce05c-14ae-4632-82e5-30fab7771e6d","gmt_create":"2026-08-05T12:14:50.32249+08:00","gmt_modified":"2026-08-05T12:14:50.32249+08:00"},{"id":1116,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e 5e6e2407-3ea1-4872-9776-be307dbfdedc","gmt_create":"2026-08-05T12:14:50.3230075+08:00","gmt_modified":"2026-08-05T12:14:50.3230075+08:00"},{"id":1117,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-05T14:14:28.2249128+08:00","gmt_modified":"2026-08-05T14:14:28.2249128+08:00"},{"id":1118,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"197b55f1b7d7d1be28b124897acfa1eb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","gmt_create":"2026-08-05T14:14:28.2249128+08:00","gmt_modified":"2026-08-05T14:14:28.2249128+08:00"},{"id":1119,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-05T14:14:28.2254199+08:00","gmt_modified":"2026-08-05T14:14:28.2254199+08:00"},{"id":1120,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-05T14:14:28.2254199+08:00","gmt_modified":"2026-08-05T14:14:28.2254199+08:00"},{"id":1121,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-05T14:14:28.2254199+08:00","gmt_modified":"2026-08-05T14:14:28.2254199+08:00"},{"id":1122,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-05T14:14:28.2259317+08:00","gmt_modified":"2026-08-05T14:14:28.2259317+08:00"},{"id":1123,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-05T14:14:28.2259317+08:00","gmt_modified":"2026-08-05T14:14:28.2259317+08:00"},{"id":1124,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-05T14:14:28.2259317+08:00","gmt_modified":"2026-08-05T14:14:28.2259317+08:00"},{"id":1125,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-05T14:14:28.2264441+08:00","gmt_modified":"2026-08-05T14:14:28.2264441+08:00"},{"id":1126,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-05T14:14:28.2264441+08:00","gmt_modified":"2026-08-05T14:14:28.2264441+08:00"},{"id":1127,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-05T14:14:28.2264441+08:00","gmt_modified":"2026-08-05T14:14:28.2264441+08:00"},{"id":1128,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-05T14:14:28.226957+08:00","gmt_modified":"2026-08-05T14:14:28.226957+08:00"},{"id":1129,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-05T14:14:28.226957+08:00","gmt_modified":"2026-08-05T14:14:28.226957+08:00"},{"id":1130,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-05T14:14:28.226957+08:00","gmt_modified":"2026-08-05T14:14:28.226957+08:00"},{"id":1131,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T14:14:28.2274964+08:00","gmt_modified":"2026-08-05T14:14:28.2274964+08:00"},{"id":1132,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T14:14:28.2274964+08:00","gmt_modified":"2026-08-05T14:14:28.2274964+08:00"},{"id":1133,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-05T14:14:28.2280177+08:00","gmt_modified":"2026-08-05T14:14:28.2280177+08:00"},{"id":1134,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-05T14:14:28.2280177+08:00","gmt_modified":"2026-08-05T14:14:28.2280177+08:00"},{"id":1135,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-05T14:14:28.2280177+08:00","gmt_modified":"2026-08-05T14:14:28.2280177+08:00"},{"id":1136,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-05T14:14:28.2285334+08:00","gmt_modified":"2026-08-05T14:14:28.2285334+08:00"},{"id":1137,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-05T14:14:28.2285334+08:00","gmt_modified":"2026-08-05T14:14:28.2285334+08:00"},{"id":1138,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-05T14:14:28.2285334+08:00","gmt_modified":"2026-08-05T14:14:28.2285334+08:00"},{"id":1139,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-05T14:14:28.2290508+08:00","gmt_modified":"2026-08-05T14:14:28.2290508+08:00"},{"id":1140,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-05T14:14:28.2295697+08:00","gmt_modified":"2026-08-05T14:14:28.2295697+08:00"},{"id":1141,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-05T14:14:28.230085+08:00","gmt_modified":"2026-08-05T14:14:28.230085+08:00"},{"id":1142,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"9c3911a56d8521ef26f3e3ec2accd8a5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java#30-34","gmt_create":"2026-08-05T14:14:28.230085+08:00","gmt_modified":"2026-08-05T14:14:28.230085+08:00"},{"id":1143,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"b037341ea6352c6b7a9b782e75a1b0e4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java#18-22","gmt_create":"2026-08-05T14:14:28.230085+08:00","gmt_modified":"2026-08-05T14:14:28.230085+08:00"},{"id":1144,"source_id":"58507cf1cc358b2da45575d16c857d87","target_id":"b037341ea6352c6b7a9b782e75a1b0e4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-22","gmt_create":"2026-08-05T14:14:28.230596+08:00","gmt_modified":"2026-08-05T14:14:28.230596+08:00"},{"id":1145,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"bb69d53898126328709f0ffa74b84a21","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java#36-41","gmt_create":"2026-08-05T14:14:28.2311097+08:00","gmt_modified":"2026-08-05T14:14:28.2311097+08:00"},{"id":1146,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"08f1e1f256663048fa344ad9d0b2ec50","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java#43-47","gmt_create":"2026-08-05T14:14:28.2311097+08:00","gmt_modified":"2026-08-05T14:14:28.2311097+08:00"},{"id":1147,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"84dbb0a8a48a1b0cb09caa8ff5e37772","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java#18-40","gmt_create":"2026-08-05T14:14:28.2316496+08:00","gmt_modified":"2026-08-05T14:14:28.2316496+08:00"},{"id":1148,"source_id":"8cac10327042dbf538d05120f601aa48","target_id":"84dbb0a8a48a1b0cb09caa8ff5e37772","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 18-40","gmt_create":"2026-08-05T14:14:28.2316496+08:00","gmt_modified":"2026-08-05T14:14:28.2316496+08:00"},{"id":1149,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"358d17256baad827344f9c962732f05f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#28-32","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1150,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"358d17256baad827344f9c962732f05f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 28-32","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1151,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"7630382313cadec5c6d8adc92dcc9fee","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java#23-60","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1152,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"7630382313cadec5c6d8adc92dcc9fee","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-60","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1153,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"a93ae9fd67ae091cc5de42e9372a4a5b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#35-39","gmt_create":"2026-08-05T14:14:28.2321665+08:00","gmt_modified":"2026-08-05T14:14:28.2321665+08:00"},{"id":1154,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"a93ae9fd67ae091cc5de42e9372a4a5b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 35-39","gmt_create":"2026-08-05T14:14:28.2331505+08:00","gmt_modified":"2026-08-05T14:14:28.2331505+08:00"},{"id":1155,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"852adaecbef1690c54f6a1a0c07b01b1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java#23-57","gmt_create":"2026-08-05T14:14:28.2331505+08:00","gmt_modified":"2026-08-05T14:14:28.2331505+08:00"},{"id":1156,"source_id":"d63e53ca9d76d8f81dd89d981569d9f3","target_id":"852adaecbef1690c54f6a1a0c07b01b1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 23-57","gmt_create":"2026-08-05T14:14:28.2331505+08:00","gmt_modified":"2026-08-05T14:14:28.2331505+08:00"},{"id":1157,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"6752445343d892cce179d933238b24a6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#42-47","gmt_create":"2026-08-05T14:14:28.2331505+08:00","gmt_modified":"2026-08-05T14:14:28.2331505+08:00"},{"id":1158,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"6752445343d892cce179d933238b24a6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 42-47","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1159,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"30311c6851277a382e67d95b83c45f16","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#50-54","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1160,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"30311c6851277a382e67d95b83c45f16","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 50-54","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1161,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"ab67df1936419ba1cf1e0029a23c5bf2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java#35-39","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1162,"source_id":"db5d3491fb45251456163d012a823f5d","target_id":"ab67df1936419ba1cf1e0029a23c5bf2","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 35-39","gmt_create":"2026-08-05T14:14:28.2341479+08:00","gmt_modified":"2026-08-05T14:14:28.2341479+08:00"},{"id":1163,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"b300c143a1d0c61e70f56c406a4d7a91","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java#43-49","gmt_create":"2026-08-05T14:14:28.2351452+08:00","gmt_modified":"2026-08-05T14:14:28.2351452+08:00"},{"id":1164,"source_id":"db5d3491fb45251456163d012a823f5d","target_id":"b300c143a1d0c61e70f56c406a4d7a91","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 43-49","gmt_create":"2026-08-05T14:14:28.2351452+08:00","gmt_modified":"2026-08-05T14:14:28.2351452+08:00"},{"id":1165,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"205841de1f0b7e0b83cdb8a171f441a0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java#22-47","gmt_create":"2026-08-05T14:14:28.2351452+08:00","gmt_modified":"2026-08-05T14:14:28.2351452+08:00"},{"id":1166,"source_id":"246da6901c21f063ab47e58aaebcdd3c","target_id":"205841de1f0b7e0b83cdb8a171f441a0","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 22-47","gmt_create":"2026-08-05T14:14:28.2351452+08:00","gmt_modified":"2026-08-05T14:14:28.2351452+08:00"},{"id":1167,"source_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","target_id":"b0af3174f3549d3d50b7051ecf1610ad","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#28-54","gmt_create":"2026-08-05T14:14:28.2361427+08:00","gmt_modified":"2026-08-05T14:14:28.2361427+08:00"},{"id":1168,"source_id":"197b55f1b7d7d1be28b124897acfa1eb","target_id":"b0af3174f3549d3d50b7051ecf1610ad","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 28-54","gmt_create":"2026-08-05T14:14:28.2361427+08:00","gmt_modified":"2026-08-05T14:14:28.2361427+08:00"},{"id":1169,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"4b325dd0ffe965ccff6bc2e8acc431d6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","gmt_create":"2026-08-05T14:15:12.751001+08:00","gmt_modified":"2026-08-05T14:15:12.751001+08:00"},{"id":1170,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"74123de2770c04a2d8a4787f177714fc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","gmt_create":"2026-08-05T14:15:12.751001+08:00","gmt_modified":"2026-08-05T14:15:12.751001+08:00"},{"id":1171,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"46bb7615dec0d0825cbcc4b846b93bf6","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","gmt_create":"2026-08-05T14:15:12.7519919+08:00","gmt_modified":"2026-08-05T14:15:12.7519919+08:00"},{"id":1172,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-05T14:15:12.7519919+08:00","gmt_modified":"2026-08-05T14:15:12.7519919+08:00"},{"id":1173,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"8a7bb9534d7381df886b1a476664b902","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","gmt_create":"2026-08-05T14:15:12.7519919+08:00","gmt_modified":"2026-08-05T14:15:12.7519919+08:00"},{"id":1174,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-05T14:15:12.7535025+08:00","gmt_modified":"2026-08-05T14:15:12.7535025+08:00"},{"id":1175,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-05T14:15:12.7544973+08:00","gmt_modified":"2026-08-05T14:15:12.7544973+08:00"},{"id":1176,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-05T14:15:12.7564921+08:00","gmt_modified":"2026-08-05T14:15:12.7564921+08:00"},{"id":1177,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"443c00696b8cf69bb4c73995c949f40d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","gmt_create":"2026-08-05T14:15:12.7564921+08:00","gmt_modified":"2026-08-05T14:15:12.7564921+08:00"},{"id":1178,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"197b55f1b7d7d1be28b124897acfa1eb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","gmt_create":"2026-08-05T14:15:12.7574899+08:00","gmt_modified":"2026-08-05T14:15:12.7574899+08:00"},{"id":1179,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-05T14:15:12.7574899+08:00","gmt_modified":"2026-08-05T14:15:12.7574899+08:00"},{"id":1180,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T14:15:12.7584874+08:00","gmt_modified":"2026-08-05T14:15:12.7584874+08:00"},{"id":1181,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T14:15:12.759484+08:00","gmt_modified":"2026-08-05T14:15:12.759484+08:00"},{"id":1182,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"34070e2c4487d700b9aae2fc036dcced","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","gmt_create":"2026-08-05T14:15:12.7604817+08:00","gmt_modified":"2026-08-05T14:15:12.7604817+08:00"},{"id":1183,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"d63e53ca9d76d8f81dd89d981569d9f3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","gmt_create":"2026-08-05T14:15:12.7624794+08:00","gmt_modified":"2026-08-05T14:15:12.7624794+08:00"},{"id":1184,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"f648b675f6acc57fd1e4fe32e9a205c4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","gmt_create":"2026-08-05T14:15:12.7634728+08:00","gmt_modified":"2026-08-05T14:15:12.7634728+08:00"},{"id":1185,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-05T14:15:12.764471+08:00","gmt_modified":"2026-08-05T14:15:12.764471+08:00"},{"id":1186,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"53e5a23ce2cd9f508b08b6e1eb290542","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","gmt_create":"2026-08-05T14:15:12.764471+08:00","gmt_modified":"2026-08-05T14:15:12.764471+08:00"},{"id":1187,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-05T14:15:12.7654678+08:00","gmt_modified":"2026-08-05T14:15:12.7654678+08:00"},{"id":1188,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-05T14:15:12.7654678+08:00","gmt_modified":"2026-08-05T14:15:12.7654678+08:00"},{"id":1189,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"8813519db2ec8d3788102bcc7d1f19bc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-app/src/main/java/com/crm/app/CrmAppApplication.java#1-200","gmt_create":"2026-08-05T14:15:12.7989776+08:00","gmt_modified":"2026-08-05T14:15:12.7989776+08:00"},{"id":1190,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-05T14:15:12.801607+08:00","gmt_modified":"2026-08-05T14:15:12.801607+08:00"},{"id":1191,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"3fa8c5117e3c0c5c18c29826dc404c80","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/AuthApplication.java#1-200","gmt_create":"2026-08-05T14:15:12.801607+08:00","gmt_modified":"2026-08-05T14:15:12.801607+08:00"},{"id":1192,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"332679fa8feff09a65449fc04e7b0399","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#30-42","gmt_create":"2026-08-05T14:15:12.8021235+08:00","gmt_modified":"2026-08-05T14:15:12.8021235+08:00"},{"id":1193,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"332679fa8feff09a65449fc04e7b0399","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 30-42","gmt_create":"2026-08-05T14:15:12.8021235+08:00","gmt_modified":"2026-08-05T14:15:12.8021235+08:00"},{"id":1194,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"da087c2c1b417a29878e1da67b50ab55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java#9-42","gmt_create":"2026-08-05T14:15:12.802636+08:00","gmt_modified":"2026-08-05T14:15:12.802636+08:00"},{"id":1195,"source_id":"8a7bb9534d7381df886b1a476664b902","target_id":"da087c2c1b417a29878e1da67b50ab55","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 9-42","gmt_create":"2026-08-05T14:15:12.8031571+08:00","gmt_modified":"2026-08-05T14:15:12.8031571+08:00"},{"id":1196,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"a800a64e16cca84b005d717faf00070c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java#25-30","gmt_create":"2026-08-05T14:15:12.8031571+08:00","gmt_modified":"2026-08-05T14:15:12.8031571+08:00"},{"id":1197,"source_id":"443c00696b8cf69bb4c73995c949f40d","target_id":"a800a64e16cca84b005d717faf00070c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 25-30","gmt_create":"2026-08-05T14:15:12.8031571+08:00","gmt_modified":"2026-08-05T14:15:12.8031571+08:00"},{"id":1198,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"9c19bba97b38fe3dbcde5a59ab43be02","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#22","gmt_create":"2026-08-05T14:15:12.8036745+08:00","gmt_modified":"2026-08-05T14:15:12.8036745+08:00"},{"id":1199,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"b37809db1bcbb443f89e776fd2522d74","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java#1-36","gmt_create":"2026-08-05T14:15:12.8036745+08:00","gmt_modified":"2026-08-05T14:15:12.8036745+08:00"},{"id":1200,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"281426f342c415888879dec628d8ede2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java#1-68","gmt_create":"2026-08-05T14:15:12.8042008+08:00","gmt_modified":"2026-08-05T14:15:12.8042008+08:00"},{"id":1201,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"8bfb66ee95e0b604e7e00a10d54b97e2","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java#1-140","gmt_create":"2026-08-05T14:15:12.8047244+08:00","gmt_modified":"2026-08-05T14:15:12.8047244+08:00"},{"id":1202,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-05T14:15:12.8057225+08:00","gmt_modified":"2026-08-05T14:15:12.8057225+08:00"},{"id":1203,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"78733cea63a5784d74c82bdf50e7b713","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java#1-200","gmt_create":"2026-08-05T14:15:12.8057225+08:00","gmt_modified":"2026-08-05T14:15:12.8057225+08:00"},{"id":1204,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-05T14:15:12.8062424+08:00","gmt_modified":"2026-08-05T14:15:12.8062424+08:00"},{"id":1205,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"72a034c4f1317ca49826baf8790a4c2e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java#1-200","gmt_create":"2026-08-05T14:15:12.8062424+08:00","gmt_modified":"2026-08-05T14:15:12.8062424+08:00"},{"id":1206,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"18e7588cf137e60731d97339c707dfab","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#44-86","gmt_create":"2026-08-05T14:15:12.8067617+08:00","gmt_modified":"2026-08-05T14:15:12.8067617+08:00"},{"id":1207,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"18e7588cf137e60731d97339c707dfab","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 44-86","gmt_create":"2026-08-05T14:15:12.8072799+08:00","gmt_modified":"2026-08-05T14:15:12.8072799+08:00"},{"id":1208,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"2738929e90eb6e3d8a356e1b4f661bb7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java#17-41","gmt_create":"2026-08-05T14:15:12.8072799+08:00","gmt_modified":"2026-08-05T14:15:12.8072799+08:00"},{"id":1209,"source_id":"ad239f5e0129b57722497e4051492302","target_id":"2738929e90eb6e3d8a356e1b4f661bb7","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-41","gmt_create":"2026-08-05T14:15:12.8072799+08:00","gmt_modified":"2026-08-05T14:15:12.8072799+08:00"},{"id":1210,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"6ae7a9512788cb4d4a693b3edf3bff24","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#105-122","gmt_create":"2026-08-05T14:15:12.8077972+08:00","gmt_modified":"2026-08-05T14:15:12.8077972+08:00"},{"id":1211,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"6ae7a9512788cb4d4a693b3edf3bff24","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 105-122","gmt_create":"2026-08-05T14:15:12.8077972+08:00","gmt_modified":"2026-08-05T14:15:12.8077972+08:00"},{"id":1212,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"472299cc5292d464668a566f315641cc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java#124-142","gmt_create":"2026-08-05T14:15:12.8083004+08:00","gmt_modified":"2026-08-05T14:15:12.8083004+08:00"},{"id":1213,"source_id":"435000e19b9da20904d5764f4f2352c5","target_id":"472299cc5292d464668a566f315641cc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 124-142","gmt_create":"2026-08-05T14:15:12.816635+08:00","gmt_modified":"2026-08-05T14:15:12.816635+08:00"},{"id":1214,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"cfb2f09353f8b4ef5e4e5db759504d05","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java#32-96","gmt_create":"2026-08-05T14:15:12.8171542+08:00","gmt_modified":"2026-08-05T14:15:12.8171542+08:00"},{"id":1215,"source_id":"443c00696b8cf69bb4c73995c949f40d","target_id":"cfb2f09353f8b4ef5e4e5db759504d05","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 32-96","gmt_create":"2026-08-05T14:15:12.8176575+08:00","gmt_modified":"2026-08-05T14:15:12.8176575+08:00"},{"id":1216,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"77b6a344d88f4c26037ba82e391ac061","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java#12-52","gmt_create":"2026-08-05T14:15:12.8176706+08:00","gmt_modified":"2026-08-05T14:15:12.8176706+08:00"},{"id":1217,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"f3443603f743cb75a94a04d692a61a9f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java#12-76","gmt_create":"2026-08-05T14:15:12.818185+08:00","gmt_modified":"2026-08-05T14:15:12.818185+08:00"},{"id":1218,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"b2e64975f941d389f848f0911b5d21fc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java#16-84","gmt_create":"2026-08-05T14:15:12.818185+08:00","gmt_modified":"2026-08-05T14:15:12.818185+08:00"},{"id":1219,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"11ff686199a527b16c34abb2c1c3f179","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java#1-56","gmt_create":"2026-08-05T14:15:12.8187003+08:00","gmt_modified":"2026-08-05T14:15:12.8187003+08:00"},{"id":1220,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"c0493efa487cf930abd2933af3e72781","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java#1-19","gmt_create":"2026-08-05T14:15:12.8187085+08:00","gmt_modified":"2026-08-05T14:15:12.8187085+08:00"},{"id":1221,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-05T14:15:12.8192163+08:00","gmt_modified":"2026-08-05T14:15:12.8192163+08:00"},{"id":1222,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"a807bda309df8f0aa0cf90bbf4c0afd4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/annotation/DataScope.java#1-200","gmt_create":"2026-08-05T14:15:12.8192163+08:00","gmt_modified":"2026-08-05T14:15:12.8192163+08:00"},{"id":1223,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-05T14:15:12.8197472+08:00","gmt_modified":"2026-08-05T14:15:12.8197472+08:00"},{"id":1224,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"7799b89815bb4f06dd5caa2b3bd5568c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java#1-200","gmt_create":"2026-08-05T14:15:12.8197472+08:00","gmt_modified":"2026-08-05T14:15:12.8197472+08:00"},{"id":1225,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-05T14:15:12.8197472+08:00","gmt_modified":"2026-08-05T14:15:12.8197472+08:00"},{"id":1226,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"bb259727923efab26488eca0b1f201e0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java#1-200","gmt_create":"2026-08-05T14:15:12.8202866+08:00","gmt_modified":"2026-08-05T14:15:12.8202866+08:00"},{"id":1227,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-05T14:15:12.8202866+08:00","gmt_modified":"2026-08-05T14:15:12.8202866+08:00"},{"id":1228,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"cd7e601b4125b471cf816bcec228b752","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java#1-200","gmt_create":"2026-08-05T14:15:12.8207899+08:00","gmt_modified":"2026-08-05T14:15:12.8207899+08:00"},{"id":1229,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-05T14:15:12.8213548+08:00","gmt_modified":"2026-08-05T14:15:12.8213548+08:00"},{"id":1230,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"faf664190fd4a09ddb120b40bf445a54","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java#1-200","gmt_create":"2026-08-05T14:15:12.8213548+08:00","gmt_modified":"2026-08-05T14:15:12.8213548+08:00"},{"id":1231,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-05T14:15:12.8218923+08:00","gmt_modified":"2026-08-05T14:15:12.8218923+08:00"},{"id":1232,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"df096476d97c54172c5839a266e46867","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/TokenService.java#1-200","gmt_create":"2026-08-05T14:15:12.8218923+08:00","gmt_modified":"2026-08-05T14:15:12.8218923+08:00"},{"id":1233,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-05T14:15:12.8224095+08:00","gmt_modified":"2026-08-05T14:15:12.8224095+08:00"},{"id":1234,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"64aec830421b2d35910074429d1ee986","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java#1-200","gmt_create":"2026-08-05T14:15:12.8229265+08:00","gmt_modified":"2026-08-05T14:15:12.8229265+08:00"},{"id":1235,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-05T14:15:12.8229265+08:00","gmt_modified":"2026-08-05T14:15:12.8229265+08:00"},{"id":1236,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"0b81c5221d14e935e18bc19956fe502f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java#1-200","gmt_create":"2026-08-05T14:15:12.8229265+08:00","gmt_modified":"2026-08-05T14:15:12.8229265+08:00"},{"id":1237,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5fe39f4159a0d5a68c0d1ee34a2b6103","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java#1-76","gmt_create":"2026-08-05T14:15:12.8234421+08:00","gmt_modified":"2026-08-05T14:15:12.8234421+08:00"},{"id":1238,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"145452b72cda2735ac97a690f2b5cbd9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","gmt_create":"2026-08-05T14:15:12.8239733+08:00","gmt_modified":"2026-08-05T14:15:12.8239733+08:00"},{"id":1239,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"7687130ee4a47c1e4e4ef1082d573508","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java#239-242","gmt_create":"2026-08-05T14:15:12.8239733+08:00","gmt_modified":"2026-08-05T14:15:12.8239733+08:00"},{"id":1240,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"91398e71753529e02986d50a8cfc06e8","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java#36-71","gmt_create":"2026-08-05T14:15:12.8245055+08:00","gmt_modified":"2026-08-05T14:15:12.8245055+08:00"},{"id":1241,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"ef24be7c3ce60d8e7b85f3203a781aa0","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java#85-95","gmt_create":"2026-08-05T14:15:12.8250198+08:00","gmt_modified":"2026-08-05T14:15:12.8250198+08:00"},{"id":1242,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"5609defe76e630b07bff8855db378c55","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java#44-50","gmt_create":"2026-08-05T14:15:12.8255346+08:00","gmt_modified":"2026-08-05T14:15:12.8255346+08:00"},{"id":1243,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"90f1865562e9f5620beef18de905d9e7","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java#32-36","gmt_create":"2026-08-05T14:15:12.8260482+08:00","gmt_modified":"2026-08-05T14:15:12.8260482+08:00"},{"id":1244,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-05T14:15:12.8260482+08:00","gmt_modified":"2026-08-05T14:15:12.8260482+08:00"},{"id":1245,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"7c974ab041f6a9430c3be1c39833b929","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java#1-200","gmt_create":"2026-08-05T14:15:12.8265609+08:00","gmt_modified":"2026-08-05T14:15:12.8265609+08:00"},{"id":1246,"source_id":"1562e48f-2c79-4024-ab33-4c40084240e7","target_id":"204b3d8b3f185c9d4e51d901e51ade12","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java#1-265","gmt_create":"2026-08-05T14:15:12.8277424+08:00","gmt_modified":"2026-08-05T14:15:12.8277424+08:00"},{"id":1247,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-05T14:15:15.0857569+08:00","gmt_modified":"2026-08-05T14:15:15.0857569+08:00"},{"id":1248,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-05T14:15:15.0857569+08:00","gmt_modified":"2026-08-05T14:15:15.0857569+08:00"},{"id":1249,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-05T14:15:15.0862694+08:00","gmt_modified":"2026-08-05T14:15:15.0862694+08:00"},{"id":1250,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-05T14:15:15.0862694+08:00","gmt_modified":"2026-08-05T14:15:15.0862694+08:00"},{"id":1251,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-05T14:15:15.0862694+08:00","gmt_modified":"2026-08-05T14:15:15.0862694+08:00"},{"id":1252,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-05T14:15:15.0867856+08:00","gmt_modified":"2026-08-05T14:15:15.0867856+08:00"},{"id":1253,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-05T14:15:15.0867856+08:00","gmt_modified":"2026-08-05T14:15:15.0867856+08:00"},{"id":1254,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"443c00696b8cf69bb4c73995c949f40d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","gmt_create":"2026-08-05T14:15:15.0873039+08:00","gmt_modified":"2026-08-05T14:15:15.0873039+08:00"},{"id":1255,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-05T14:15:15.0873039+08:00","gmt_modified":"2026-08-05T14:15:15.0873039+08:00"},{"id":1256,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-05T14:15:15.0873039+08:00","gmt_modified":"2026-08-05T14:15:15.0873039+08:00"},{"id":1257,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-05T14:15:15.0873039+08:00","gmt_modified":"2026-08-05T14:15:15.0873039+08:00"},{"id":1258,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-05T14:15:15.0878186+08:00","gmt_modified":"2026-08-05T14:15:15.0878186+08:00"},{"id":1259,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"34070e2c4487d700b9aae2fc036dcced","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","gmt_create":"2026-08-05T14:15:15.0878186+08:00","gmt_modified":"2026-08-05T14:15:15.0878186+08:00"},{"id":1260,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-05T14:15:15.0878186+08:00","gmt_modified":"2026-08-05T14:15:15.0878186+08:00"},{"id":1261,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-05T14:15:15.0883279+08:00","gmt_modified":"2026-08-05T14:15:15.0883279+08:00"},{"id":1262,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-05T14:15:15.0883279+08:00","gmt_modified":"2026-08-05T14:15:15.0883279+08:00"},{"id":1263,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-05T14:15:15.0883279+08:00","gmt_modified":"2026-08-05T14:15:15.0883279+08:00"},{"id":1264,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-05T14:15:15.0888629+08:00","gmt_modified":"2026-08-05T14:15:15.0888629+08:00"},{"id":1265,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-05T14:15:15.0888629+08:00","gmt_modified":"2026-08-05T14:15:15.0888629+08:00"},{"id":1266,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-05T14:15:15.0888629+08:00","gmt_modified":"2026-08-05T14:15:15.0888629+08:00"},{"id":1267,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-05T14:15:15.0893818+08:00","gmt_modified":"2026-08-05T14:15:15.0893818+08:00"},{"id":1268,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-05T14:15:15.0893818+08:00","gmt_modified":"2026-08-05T14:15:15.0893818+08:00"},{"id":1269,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-05T14:15:15.0893818+08:00","gmt_modified":"2026-08-05T14:15:15.0893818+08:00"},{"id":1270,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-05T14:15:15.0899042+08:00","gmt_modified":"2026-08-05T14:15:15.0899042+08:00"},{"id":1271,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-05T14:15:15.0899042+08:00","gmt_modified":"2026-08-05T14:15:15.0899042+08:00"},{"id":1272,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"d9ade6309a688b79e49a87c991d5af6c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","gmt_create":"2026-08-05T14:15:15.0904322+08:00","gmt_modified":"2026-08-05T14:15:15.0904322+08:00"},{"id":1273,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"283041ef298919fe536ac20fad579c0a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-05T14:15:15.0904322+08:00","gmt_modified":"2026-08-05T14:15:15.0904322+08:00"},{"id":1274,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"aab51a092e42f86e794b23b95107cba3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","gmt_create":"2026-08-05T14:15:15.0904322+08:00","gmt_modified":"2026-08-05T14:15:15.0904322+08:00"},{"id":1275,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"d9d6f5b3e8856fa6995fdc7ed74c6382","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java","gmt_create":"2026-08-05T14:15:15.0909407+08:00","gmt_modified":"2026-08-05T14:15:15.0909407+08:00"},{"id":1276,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"38d9b83ff8f46a8113aa787616b2f802","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java","gmt_create":"2026-08-05T14:15:15.0909407+08:00","gmt_modified":"2026-08-05T14:15:15.0909407+08:00"},{"id":1277,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"eb41d1eb6dbcb66d966ca3b557af45d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java","gmt_create":"2026-08-05T14:15:15.0909407+08:00","gmt_modified":"2026-08-05T14:15:15.0909407+08:00"},{"id":1278,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"28e5eef69286d763453cf31a32070685","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java","gmt_create":"2026-08-05T14:15:15.091453+08:00","gmt_modified":"2026-08-05T14:15:15.091453+08:00"},{"id":1279,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"30ac7fd632012faca8156feaa071ff46","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java","gmt_create":"2026-08-05T14:15:15.091453+08:00","gmt_modified":"2026-08-05T14:15:15.091453+08:00"},{"id":1280,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-05T14:15:15.091453+08:00","gmt_modified":"2026-08-05T14:15:15.091453+08:00"},{"id":1281,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-05T14:15:15.091453+08:00","gmt_modified":"2026-08-05T14:15:15.091453+08:00"},{"id":1282,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-05T14:15:15.0919687+08:00","gmt_modified":"2026-08-05T14:15:15.0919687+08:00"},{"id":1283,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-05T14:15:15.0919687+08:00","gmt_modified":"2026-08-05T14:15:15.0919687+08:00"},{"id":1284,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-05T14:15:15.0919687+08:00","gmt_modified":"2026-08-05T14:15:15.0919687+08:00"},{"id":1285,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-05T14:15:15.0924836+08:00","gmt_modified":"2026-08-05T14:15:15.0924836+08:00"},{"id":1286,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-05T14:15:15.0924836+08:00","gmt_modified":"2026-08-05T14:15:15.0924836+08:00"},{"id":1287,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"21067ee0ba0180f2b8514173343f7b0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java","gmt_create":"2026-08-05T14:15:15.0924836+08:00","gmt_modified":"2026-08-05T14:15:15.0924836+08:00"},{"id":1288,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-05T14:15:15.092993+08:00","gmt_modified":"2026-08-05T14:15:15.092993+08:00"},{"id":1289,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-05T14:15:15.092993+08:00","gmt_modified":"2026-08-05T14:15:15.092993+08:00"},{"id":1290,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"7179946069c5d0654ca49cca77eaaedb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0935298+08:00","gmt_modified":"2026-08-05T14:15:15.0935298+08:00"},{"id":1291,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0935298+08:00","gmt_modified":"2026-08-05T14:15:15.0935298+08:00"},{"id":1292,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0935298+08:00","gmt_modified":"2026-08-05T14:15:15.0935298+08:00"},{"id":1293,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"f9926a70a628c5e92f0d239030b13f71","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0940427+08:00","gmt_modified":"2026-08-05T14:15:15.0940427+08:00"},{"id":1294,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0940427+08:00","gmt_modified":"2026-08-05T14:15:15.0940427+08:00"},{"id":1295,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0940427+08:00","gmt_modified":"2026-08-05T14:15:15.0940427+08:00"},{"id":1296,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-05T14:15:15.0945716+08:00","gmt_modified":"2026-08-05T14:15:15.0945716+08:00"},{"id":1297,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"3259a2ba7196998a24118782cceeecee","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","gmt_create":"2026-08-05T14:15:15.0945716+08:00","gmt_modified":"2026-08-05T14:15:15.0945716+08:00"},{"id":1298,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-05T14:15:15.0950751+08:00","gmt_modified":"2026-08-05T14:15:15.0950751+08:00"},{"id":1299,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"13f3009ef2305ed0a42d5528886e20bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","gmt_create":"2026-08-05T14:15:15.1094913+08:00","gmt_modified":"2026-08-05T14:15:15.1094913+08:00"},{"id":1300,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-05T14:15:15.1094913+08:00","gmt_modified":"2026-08-05T14:15:15.1094913+08:00"},{"id":1301,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-05T14:15:15.1094913+08:00","gmt_modified":"2026-08-05T14:15:15.1094913+08:00"},{"id":1302,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"db36768510c04fba9ecddbaac9538997","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysDept.java","gmt_create":"2026-08-05T14:15:15.1383313+08:00","gmt_modified":"2026-08-05T14:15:15.1383313+08:00"},{"id":1303,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8a7bb9534d7381df886b1a476664b902","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","gmt_create":"2026-08-05T14:15:15.1383313+08:00","gmt_modified":"2026-08-05T14:15:15.1383313+08:00"},{"id":1304,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1305,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1306,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"45f8c9e51de204a6ce44b7b414bf967f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1307,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1308,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-05T14:15:15.1393263+08:00","gmt_modified":"2026-08-05T14:15:15.1393263+08:00"},{"id":1309,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-05T14:15:15.1403245+08:00","gmt_modified":"2026-08-05T14:15:15.1403245+08:00"},{"id":1310,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-05T14:15:15.1403245+08:00","gmt_modified":"2026-08-05T14:15:15.1403245+08:00"},{"id":1311,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-05T14:15:15.1403245+08:00","gmt_modified":"2026-08-05T14:15:15.1403245+08:00"},{"id":1312,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-05T14:15:15.1403245+08:00","gmt_modified":"2026-08-05T14:15:15.1403245+08:00"},{"id":1313,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-05T14:15:15.1747407+08:00","gmt_modified":"2026-08-05T14:15:15.1747407+08:00"},{"id":1314,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-05T14:15:15.1760282+08:00","gmt_modified":"2026-08-05T14:15:15.1760282+08:00"},{"id":1315,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-05T14:15:15.1850937+08:00","gmt_modified":"2026-08-05T14:15:15.1850937+08:00"},{"id":1316,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-05T14:15:15.1850937+08:00","gmt_modified":"2026-08-05T14:15:15.1850937+08:00"},{"id":1317,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-05T14:15:15.1856072+08:00","gmt_modified":"2026-08-05T14:15:15.1856072+08:00"},{"id":1318,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-05T14:15:15.1856072+08:00","gmt_modified":"2026-08-05T14:15:15.1856072+08:00"},{"id":1319,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-05T14:15:15.1954559+08:00","gmt_modified":"2026-08-05T14:15:15.1954559+08:00"},{"id":1320,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-05T14:15:15.1959604+08:00","gmt_modified":"2026-08-05T14:15:15.1959604+08:00"},{"id":1321,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-05T14:15:15.199218+08:00","gmt_modified":"2026-08-05T14:15:15.199218+08:00"},{"id":1322,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-05T14:15:15.199218+08:00","gmt_modified":"2026-08-05T14:15:15.199218+08:00"},{"id":1323,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-05T14:15:15.199218+08:00","gmt_modified":"2026-08-05T14:15:15.199218+08:00"},{"id":1324,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-05T14:15:15.199729+08:00","gmt_modified":"2026-08-05T14:15:15.199729+08:00"},{"id":1325,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-05T14:15:15.199729+08:00","gmt_modified":"2026-08-05T14:15:15.199729+08:00"},{"id":1326,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-05T14:15:15.199729+08:00","gmt_modified":"2026-08-05T14:15:15.199729+08:00"},{"id":1327,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-05T14:15:15.199729+08:00","gmt_modified":"2026-08-05T14:15:15.199729+08:00"},{"id":1328,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-05T14:15:15.2002391+08:00","gmt_modified":"2026-08-05T14:15:15.2002391+08:00"},{"id":1329,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-05T14:15:15.2002391+08:00","gmt_modified":"2026-08-05T14:15:15.2002391+08:00"},{"id":1330,"source_id":"34ea7d69-8030-495d-8782-3aa087c80de9","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-05T14:15:15.2241292+08:00","gmt_modified":"2026-08-05T14:15:15.2241292+08:00"},{"id":1364,"source_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","target_id":"1562e48f-2c79-4024-ab33-4c40084240e7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b -\u003e 1562e48f-2c79-4024-ab33-4c40084240e7","gmt_create":"2026-08-05T14:16:10.3718237+08:00","gmt_modified":"2026-08-05T14:16:10.3718237+08:00"},{"id":1365,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":1366,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-06T08:43:51.2880745+08:00","gmt_modified":"2026-08-06T08:43:51.2880745+08:00"},{"id":1367,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-06T08:43:51.2880745+08:00","gmt_modified":"2026-08-06T08:43:51.2880745+08:00"},{"id":1368,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T08:43:51.2890729+08:00","gmt_modified":"2026-08-06T08:43:51.2890729+08:00"},{"id":1369,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T08:43:51.2890729+08:00","gmt_modified":"2026-08-06T08:43:51.2890729+08:00"},{"id":1370,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-06T08:43:51.2890729+08:00","gmt_modified":"2026-08-06T08:43:51.2890729+08:00"},{"id":1371,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T08:43:51.2890729+08:00","gmt_modified":"2026-08-06T08:43:51.2890729+08:00"},{"id":1372,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T08:43:51.2900698+08:00","gmt_modified":"2026-08-06T08:43:51.2900698+08:00"},{"id":1373,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T08:43:51.2900698+08:00","gmt_modified":"2026-08-06T08:43:51.2900698+08:00"},{"id":1374,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T08:43:51.2900698+08:00","gmt_modified":"2026-08-06T08:43:51.2900698+08:00"},{"id":1375,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:43:51.3150099+08:00","gmt_modified":"2026-08-06T08:43:51.3150099+08:00"},{"id":1376,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:43:51.3150099+08:00","gmt_modified":"2026-08-06T08:43:51.3150099+08:00"},{"id":1377,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T08:43:51.3160003+08:00","gmt_modified":"2026-08-06T08:43:51.3160003+08:00"},{"id":1378,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-06T08:43:51.3160003+08:00","gmt_modified":"2026-08-06T08:43:51.3160003+08:00"},{"id":1379,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T08:43:51.3169971+08:00","gmt_modified":"2026-08-06T08:43:51.3169971+08:00"},{"id":1380,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T08:43:51.3169971+08:00","gmt_modified":"2026-08-06T08:43:51.3169971+08:00"},{"id":1381,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T08:43:51.3169971+08:00","gmt_modified":"2026-08-06T08:43:51.3169971+08:00"},{"id":1382,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T08:43:51.3169971+08:00","gmt_modified":"2026-08-06T08:43:51.3169971+08:00"},{"id":1383,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T08:43:51.3179943+08:00","gmt_modified":"2026-08-06T08:43:51.3179943+08:00"},{"id":1384,"source_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T08:43:51.3179943+08:00","gmt_modified":"2026-08-06T08:43:51.3179943+08:00"},{"id":1385,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-06T08:43:59.3576045+08:00","gmt_modified":"2026-08-06T08:43:59.3576045+08:00"},{"id":1386,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T08:43:59.3581154+08:00","gmt_modified":"2026-08-06T08:43:59.3581154+08:00"},{"id":1387,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"3204c0be957891dd9b878beed284f4a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","gmt_create":"2026-08-06T08:43:59.3581154+08:00","gmt_modified":"2026-08-06T08:43:59.3581154+08:00"},{"id":1388,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-06T08:43:59.3586628+08:00","gmt_modified":"2026-08-06T08:43:59.3586628+08:00"},{"id":1389,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-06T08:43:59.3591814+08:00","gmt_modified":"2026-08-06T08:43:59.3591814+08:00"},{"id":1390,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T08:43:59.3597458+08:00","gmt_modified":"2026-08-06T08:43:59.3597458+08:00"},{"id":1391,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T08:43:59.3602856+08:00","gmt_modified":"2026-08-06T08:43:59.3602856+08:00"},{"id":1392,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T08:43:59.3602856+08:00","gmt_modified":"2026-08-06T08:43:59.3602856+08:00"},{"id":1393,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:43:59.3608018+08:00","gmt_modified":"2026-08-06T08:43:59.3608018+08:00"},{"id":1394,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"cbd7e122df81b379d68096c9ad0d1bc5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","gmt_create":"2026-08-06T08:43:59.3613142+08:00","gmt_modified":"2026-08-06T08:43:59.3613142+08:00"},{"id":1395,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-06T08:43:59.3613142+08:00","gmt_modified":"2026-08-06T08:43:59.3613142+08:00"},{"id":1396,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T08:43:59.3618236+08:00","gmt_modified":"2026-08-06T08:43:59.3618236+08:00"},{"id":1397,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T08:43:59.3618236+08:00","gmt_modified":"2026-08-06T08:43:59.3618236+08:00"},{"id":1398,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-06T08:43:59.3618236+08:00","gmt_modified":"2026-08-06T08:43:59.3618236+08:00"},{"id":1399,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"8e7d2facecaa43d7d0a62897ce6852b8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailRenderer.java","gmt_create":"2026-08-06T08:43:59.3623381+08:00","gmt_modified":"2026-08-06T08:43:59.3623381+08:00"},{"id":1400,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"8725216d36747b23e1900d0a80a2e566","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","gmt_create":"2026-08-06T08:43:59.3623381+08:00","gmt_modified":"2026-08-06T08:43:59.3623381+08:00"},{"id":1401,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:43:59.3628529+08:00","gmt_modified":"2026-08-06T08:43:59.3628529+08:00"},{"id":1402,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T08:43:59.3628529+08:00","gmt_modified":"2026-08-06T08:43:59.3628529+08:00"},{"id":1403,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T08:43:59.3633698+08:00","gmt_modified":"2026-08-06T08:43:59.3633698+08:00"},{"id":1404,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T08:43:59.3633698+08:00","gmt_modified":"2026-08-06T08:43:59.3633698+08:00"},{"id":1405,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T08:43:59.3638831+08:00","gmt_modified":"2026-08-06T08:43:59.3638831+08:00"},{"id":1406,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T08:43:59.3638831+08:00","gmt_modified":"2026-08-06T08:43:59.3638831+08:00"},{"id":1407,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T08:43:59.3644008+08:00","gmt_modified":"2026-08-06T08:43:59.3644008+08:00"},{"id":1408,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T08:43:59.3644008+08:00","gmt_modified":"2026-08-06T08:43:59.3644008+08:00"},{"id":1409,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-06T08:43:59.3649269+08:00","gmt_modified":"2026-08-06T08:43:59.3649269+08:00"},{"id":1410,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-06T08:43:59.3649269+08:00","gmt_modified":"2026-08-06T08:43:59.3649269+08:00"},{"id":1411,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-06T08:43:59.3654504+08:00","gmt_modified":"2026-08-06T08:43:59.3654504+08:00"},{"id":1412,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-06T08:43:59.3654504+08:00","gmt_modified":"2026-08-06T08:43:59.3654504+08:00"},{"id":1413,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-06T08:43:59.3659663+08:00","gmt_modified":"2026-08-06T08:43:59.3659663+08:00"},{"id":1414,"source_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-06T08:43:59.3659663+08:00","gmt_modified":"2026-08-06T08:43:59.3659663+08:00"},{"id":1440,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-06T08:45:06.6602802+08:00","gmt_modified":"2026-08-06T08:45:06.6602802+08:00"},{"id":1441,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T08:45:06.6624928+08:00","gmt_modified":"2026-08-06T08:45:06.6624928+08:00"},{"id":1442,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-06T08:45:06.6630292+08:00","gmt_modified":"2026-08-06T08:45:06.6630292+08:00"},{"id":1443,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-06T08:45:06.6630292+08:00","gmt_modified":"2026-08-06T08:45:06.6630292+08:00"},{"id":1444,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T08:45:06.6635564+08:00","gmt_modified":"2026-08-06T08:45:06.6635564+08:00"},{"id":1445,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T08:45:06.6640667+08:00","gmt_modified":"2026-08-06T08:45:06.6640667+08:00"},{"id":1446,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-06T08:45:06.6640667+08:00","gmt_modified":"2026-08-06T08:45:06.6640667+08:00"},{"id":1447,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T08:45:06.6640667+08:00","gmt_modified":"2026-08-06T08:45:06.6640667+08:00"},{"id":1448,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T08:45:06.6645764+08:00","gmt_modified":"2026-08-06T08:45:06.6645764+08:00"},{"id":1449,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T08:45:06.6645764+08:00","gmt_modified":"2026-08-06T08:45:06.6645764+08:00"},{"id":1450,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T08:45:06.6645764+08:00","gmt_modified":"2026-08-06T08:45:06.6645764+08:00"},{"id":1451,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:45:06.6650937+08:00","gmt_modified":"2026-08-06T08:45:06.6650937+08:00"},{"id":1452,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"cbd7e122df81b379d68096c9ad0d1bc5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","gmt_create":"2026-08-06T08:45:06.6650937+08:00","gmt_modified":"2026-08-06T08:45:06.6650937+08:00"},{"id":1453,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"8e7d2facecaa43d7d0a62897ce6852b8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailRenderer.java","gmt_create":"2026-08-06T08:45:06.6650937+08:00","gmt_modified":"2026-08-06T08:45:06.6650937+08:00"},{"id":1454,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"8725216d36747b23e1900d0a80a2e566","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","gmt_create":"2026-08-06T08:45:06.6656018+08:00","gmt_modified":"2026-08-06T08:45:06.6656018+08:00"},{"id":1455,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"c54126cf8c967b28247c04987c23f7dd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java","gmt_create":"2026-08-06T08:45:06.6656062+08:00","gmt_modified":"2026-08-06T08:45:06.6656062+08:00"},{"id":1456,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"585450a9f743134860e41875c7125ee3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java","gmt_create":"2026-08-06T08:45:06.6656062+08:00","gmt_modified":"2026-08-06T08:45:06.6656062+08:00"},{"id":1457,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"ab9df9e51b9c174974fc980a7b75a934","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ThumbnailImageUtils.java","gmt_create":"2026-08-06T08:45:06.6656062+08:00","gmt_modified":"2026-08-06T08:45:06.6656062+08:00"},{"id":1458,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:45:06.6661169+08:00","gmt_modified":"2026-08-06T08:45:06.6661169+08:00"},{"id":1459,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T08:45:06.6661169+08:00","gmt_modified":"2026-08-06T08:45:06.6661169+08:00"},{"id":1460,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T08:45:06.6666274+08:00","gmt_modified":"2026-08-06T08:45:06.6666274+08:00"},{"id":1461,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-06T08:45:06.6666274+08:00","gmt_modified":"2026-08-06T08:45:06.6666274+08:00"},{"id":1462,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T08:45:06.6666274+08:00","gmt_modified":"2026-08-06T08:45:06.6666274+08:00"},{"id":1463,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T08:45:06.6671373+08:00","gmt_modified":"2026-08-06T08:45:06.6671373+08:00"},{"id":1464,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T08:45:06.6671373+08:00","gmt_modified":"2026-08-06T08:45:06.6671373+08:00"},{"id":1465,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T08:45:06.6671373+08:00","gmt_modified":"2026-08-06T08:45:06.6671373+08:00"},{"id":1466,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T08:45:06.6676447+08:00","gmt_modified":"2026-08-06T08:45:06.6676447+08:00"},{"id":1467,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-06T08:45:06.6676447+08:00","gmt_modified":"2026-08-06T08:45:06.6676447+08:00"},{"id":1468,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-06T08:45:06.6676447+08:00","gmt_modified":"2026-08-06T08:45:06.6676447+08:00"},{"id":1469,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-06T08:45:06.668162+08:00","gmt_modified":"2026-08-06T08:45:06.668162+08:00"},{"id":1470,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-06T08:45:06.668162+08:00","gmt_modified":"2026-08-06T08:45:06.668162+08:00"},{"id":1471,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-06T08:45:06.668162+08:00","gmt_modified":"2026-08-06T08:45:06.668162+08:00"},{"id":1472,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"db63226d-3f30-498a-9bd7-2de0049e1d73","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 30a25b67-b398-4ae7-bd7f-f3d91055c76d -\u003e db63226d-3f30-498a-9bd7-2de0049e1d73","gmt_create":"2026-08-06T08:45:07.5277142+08:00","gmt_modified":"2026-08-06T08:45:07.5277142+08:00"},{"id":1473,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"36b15a35-52f9-4e29-ad05-6dac66f00c14","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 30a25b67-b398-4ae7-bd7f-f3d91055c76d -\u003e 36b15a35-52f9-4e29-ad05-6dac66f00c14","gmt_create":"2026-08-06T08:45:07.5277142+08:00","gmt_modified":"2026-08-06T08:45:07.5277142+08:00"},{"id":1474,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"c20b2e4f-5904-4ba8-ba7e-7e73b1874278","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 30a25b67-b398-4ae7-bd7f-f3d91055c76d -\u003e c20b2e4f-5904-4ba8-ba7e-7e73b1874278","gmt_create":"2026-08-06T08:45:07.5277142+08:00","gmt_modified":"2026-08-06T08:45:07.5277142+08:00"},{"id":1475,"source_id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","target_id":"9c64cc91-56af-4905-b362-8808cd7fdad9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 30a25b67-b398-4ae7-bd7f-f3d91055c76d -\u003e 9c64cc91-56af-4905-b362-8808cd7fdad9","gmt_create":"2026-08-06T08:45:07.5287117+08:00","gmt_modified":"2026-08-06T08:45:07.5287117+08:00"},{"id":1478,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"b1a16c73af31999d323930a2c4167a74","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: pom.xml","gmt_create":"2026-08-06T19:44:26.7161705+08:00","gmt_modified":"2026-08-06T19:44:26.7161705+08:00"},{"id":1479,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"d323c1b254a4bb5e5cafd99a1b05a181","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/pom.xml","gmt_create":"2026-08-06T19:44:26.7171676+08:00","gmt_modified":"2026-08-06T19:44:26.7171676+08:00"},{"id":1480,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"fdbf8ef6fe6c3e0273244b9efa4f4563","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/pom.xml","gmt_create":"2026-08-06T19:44:26.7171676+08:00","gmt_modified":"2026-08-06T19:44:26.7171676+08:00"},{"id":1481,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"44756b6ca3948002965adbdf75e287e4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/pom.xml","gmt_create":"2026-08-06T19:44:26.7171676+08:00","gmt_modified":"2026-08-06T19:44:26.7171676+08:00"},{"id":1482,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"4645e05fc44e0cd3f1efadca1d825a88","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/pom.xml","gmt_create":"2026-08-06T19:44:26.7171676+08:00","gmt_modified":"2026-08-06T19:44:26.7171676+08:00"},{"id":1483,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"d318bb4ad97a34f01840e5503502e6b4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: Dockerfile","gmt_create":"2026-08-06T19:44:26.7181645+08:00","gmt_modified":"2026-08-06T19:44:26.7181645+08:00"},{"id":1484,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"47475a382ffa5fe204e1150226d92971","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: docker-compose.yml","gmt_create":"2026-08-06T19:44:26.7181645+08:00","gmt_modified":"2026-08-06T19:44:26.7181645+08:00"},{"id":1485,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"3885b6ce09ed80ae3b64b97472b974e7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: .dockerignore","gmt_create":"2026-08-06T19:44:26.7181645+08:00","gmt_modified":"2026-08-06T19:44:26.7181645+08:00"},{"id":1486,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"b96e62e8abf266ff71854b7cc4d89a84","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: settings.xml","gmt_create":"2026-08-06T19:44:26.7191616+08:00","gmt_modified":"2026-08-06T19:44:26.7191616+08:00"},{"id":1487,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-06T19:44:26.7191616+08:00","gmt_modified":"2026-08-06T19:44:26.7191616+08:00"},{"id":1488,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T19:44:26.7211584+08:00","gmt_modified":"2026-08-06T19:44:26.7211584+08:00"},{"id":1489,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"8f9d287ac54c058022a9803c7f84937e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application-verify.yml","gmt_create":"2026-08-06T19:44:26.734878+08:00","gmt_modified":"2026-08-06T19:44:26.734878+08:00"},{"id":1490,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-06T19:44:26.734878+08:00","gmt_modified":"2026-08-06T19:44:26.734878+08:00"},{"id":1491,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-06T19:44:26.734878+08:00","gmt_modified":"2026-08-06T19:44:26.734878+08:00"},{"id":1492,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-06T19:44:26.7360453+08:00","gmt_modified":"2026-08-06T19:44:26.7360453+08:00"},{"id":1493,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-06T19:44:26.7579238+08:00","gmt_modified":"2026-08-06T19:44:26.7579238+08:00"},{"id":1494,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-06T19:44:26.7579238+08:00","gmt_modified":"2026-08-06T19:44:26.7579238+08:00"},{"id":1495,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-06T19:44:26.7584441+08:00","gmt_modified":"2026-08-06T19:44:26.7584441+08:00"},{"id":1496,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-06T19:44:26.7584441+08:00","gmt_modified":"2026-08-06T19:44:26.7584441+08:00"},{"id":1497,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-06T19:44:26.7589559+08:00","gmt_modified":"2026-08-06T19:44:26.7589559+08:00"},{"id":1498,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-06T19:44:26.7589559+08:00","gmt_modified":"2026-08-06T19:44:26.7589559+08:00"},{"id":1499,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"949d7f85b20c96ff625551608a0a3453","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-06T19:44:26.7594644+08:00","gmt_modified":"2026-08-06T19:44:26.7594644+08:00"},{"id":1500,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"1e30fd946317cf4ca3d53f1ca7e05c0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","gmt_create":"2026-08-06T19:44:26.7594644+08:00","gmt_modified":"2026-08-06T19:44:26.7594644+08:00"},{"id":1501,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T19:44:26.7594644+08:00","gmt_modified":"2026-08-06T19:44:26.7594644+08:00"},{"id":1502,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T19:44:26.7594644+08:00","gmt_modified":"2026-08-06T19:44:26.7594644+08:00"},{"id":1503,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T19:44:26.7600217+08:00","gmt_modified":"2026-08-06T19:44:26.7600217+08:00"},{"id":1504,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"acde6b0660ef768e0502de035ce41fa5","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: pom.xml#1-200","gmt_create":"2026-08-06T19:44:26.7605371+08:00","gmt_modified":"2026-08-06T19:44:26.7605371+08:00"},{"id":1505,"source_id":"b1a16c73af31999d323930a2c4167a74","target_id":"acde6b0660ef768e0502de035ce41fa5","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-06T19:44:26.7605371+08:00","gmt_modified":"2026-08-06T19:44:26.7605371+08:00"},{"id":1506,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"1f0cd5816b306157f2ec4e7fc6f7956b","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-app/src/main/java/com/crm/app/CrmAppApplication.java#1-50","gmt_create":"2026-08-06T19:44:26.761052+08:00","gmt_modified":"2026-08-06T19:44:26.761052+08:00"},{"id":1507,"source_id":"9f120716e7b0381e045c66412550d1a9","target_id":"1f0cd5816b306157f2ec4e7fc6f7956b","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-50","gmt_create":"2026-08-06T19:44:26.7615751+08:00","gmt_modified":"2026-08-06T19:44:26.7615751+08:00"},{"id":1508,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"9e3c45cbfa5122a947fcc31865325a27","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/AuthApplication.java#1-50","gmt_create":"2026-08-06T19:44:26.762124+08:00","gmt_modified":"2026-08-06T19:44:26.762124+08:00"},{"id":1509,"source_id":"ec731c3e8b12fffc7e23eb4ecd950b53","target_id":"9e3c45cbfa5122a947fcc31865325a27","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-50","gmt_create":"2026-08-06T19:44:26.762124+08:00","gmt_modified":"2026-08-06T19:44:26.762124+08:00"},{"id":1510,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"e5de4497aad8dff5c8710964bdc05e67","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-file/src/main/java/com/crm/file/config/MinioConfig.java#1-80","gmt_create":"2026-08-06T19:44:26.7626416+08:00","gmt_modified":"2026-08-06T19:44:26.7626416+08:00"},{"id":1511,"source_id":"dd4e6c7873de5b24deefcc3d24077825","target_id":"e5de4497aad8dff5c8710964bdc05e67","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-06T19:44:26.7631666+08:00","gmt_modified":"2026-08-06T19:44:26.7631666+08:00"},{"id":1512,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"ded9bf7c7288a3b6d42d4e0f145b7f1e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-app/pom.xml#1-100","gmt_create":"2026-08-06T19:44:26.7636861+08:00","gmt_modified":"2026-08-06T19:44:26.7636861+08:00"},{"id":1513,"source_id":"d323c1b254a4bb5e5cafd99a1b05a181","target_id":"ded9bf7c7288a3b6d42d4e0f145b7f1e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-100","gmt_create":"2026-08-06T19:44:26.7642037+08:00","gmt_modified":"2026-08-06T19:44:26.7642037+08:00"},{"id":1514,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"01dd875560950997be99675d263dd937","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/pom.xml#1-100","gmt_create":"2026-08-06T19:44:26.7642037+08:00","gmt_modified":"2026-08-06T19:44:26.7642037+08:00"},{"id":1515,"source_id":"fdbf8ef6fe6c3e0273244b9efa4f4563","target_id":"01dd875560950997be99675d263dd937","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-100","gmt_create":"2026-08-06T19:44:26.7647253+08:00","gmt_modified":"2026-08-06T19:44:26.7647253+08:00"},{"id":1516,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"978ca9ce418fedbb4c5fccbf17118852","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/pom.xml#1-100","gmt_create":"2026-08-06T19:44:26.7647253+08:00","gmt_modified":"2026-08-06T19:44:26.7647253+08:00"},{"id":1517,"source_id":"44756b6ca3948002965adbdf75e287e4","target_id":"978ca9ce418fedbb4c5fccbf17118852","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-100","gmt_create":"2026-08-06T19:44:26.7652456+08:00","gmt_modified":"2026-08-06T19:44:26.7652456+08:00"},{"id":1518,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"0df7a497aac884fa372c3320b092c3ad","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-file/pom.xml#1-100","gmt_create":"2026-08-06T19:44:26.7657702+08:00","gmt_modified":"2026-08-06T19:44:26.7657702+08:00"},{"id":1519,"source_id":"4645e05fc44e0cd3f1efadca1d825a88","target_id":"0df7a497aac884fa372c3320b092c3ad","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-100","gmt_create":"2026-08-06T19:44:26.7657702+08:00","gmt_modified":"2026-08-06T19:44:26.7657702+08:00"},{"id":1520,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"65ca5558323ab3eede2a518500899b98","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/config/RedisConfig.java#1-80","gmt_create":"2026-08-06T19:44:26.7662913+08:00","gmt_modified":"2026-08-06T19:44:26.7662913+08:00"},{"id":1521,"source_id":"8f361aaf831f559241b15bd521ea5cd1","target_id":"65ca5558323ab3eede2a518500899b98","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-06T19:44:26.7662913+08:00","gmt_modified":"2026-08-06T19:44:26.7662913+08:00"},{"id":1522,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"8f370b958bb0f2df56168c5769a3b1de","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java#1-80","gmt_create":"2026-08-06T19:44:26.7668169+08:00","gmt_modified":"2026-08-06T19:44:26.7668169+08:00"},{"id":1523,"source_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","target_id":"8f370b958bb0f2df56168c5769a3b1de","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-06T19:44:26.7673309+08:00","gmt_modified":"2026-08-06T19:44:26.7673309+08:00"},{"id":1524,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"b25562bf7ce1900f14da508cf6c97d2a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java#1-120","gmt_create":"2026-08-06T19:44:26.7678338+08:00","gmt_modified":"2026-08-06T19:44:26.7678338+08:00"},{"id":1525,"source_id":"6d19e7c47ad418f3577ff8cfcd56590f","target_id":"b25562bf7ce1900f14da508cf6c97d2a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-120","gmt_create":"2026-08-06T19:44:26.7678427+08:00","gmt_modified":"2026-08-06T19:44:26.7678427+08:00"},{"id":1526,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"f4160f8f1aee0f5dd3e68eb22348241c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java#1-120","gmt_create":"2026-08-06T19:44:26.7678427+08:00","gmt_modified":"2026-08-06T19:44:26.7678427+08:00"},{"id":1527,"source_id":"10a536bc357c7840a6eec61b40741915","target_id":"f4160f8f1aee0f5dd3e68eb22348241c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-120","gmt_create":"2026-08-06T19:44:26.7683739+08:00","gmt_modified":"2026-08-06T19:44:26.7683739+08:00"},{"id":1528,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"52142ea24d4b69473142be97474714d4","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/security/TokenService.java#1-120","gmt_create":"2026-08-06T19:44:26.7694156+08:00","gmt_modified":"2026-08-06T19:44:26.7694156+08:00"},{"id":1529,"source_id":"720e90c29ddd88a8633c9d31ce443b5e","target_id":"52142ea24d4b69473142be97474714d4","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-120","gmt_create":"2026-08-06T19:44:26.7699206+08:00","gmt_modified":"2026-08-06T19:44:26.7699206+08:00"},{"id":1530,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"8e13b7c6ca1698b5d9bb66edc40456f1","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java#1-120","gmt_create":"2026-08-06T19:44:26.7699364+08:00","gmt_modified":"2026-08-06T19:44:26.7699364+08:00"},{"id":1531,"source_id":"4194d46035c0037d3488ab82e57001ba","target_id":"8e13b7c6ca1698b5d9bb66edc40456f1","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-120","gmt_create":"2026-08-06T19:44:26.7699364+08:00","gmt_modified":"2026-08-06T19:44:26.7699364+08:00"},{"id":1532,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"1c3d8c0613c93140a2b573acbea8ad31","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-file/src/main/java/com/crm/file/config/FileProperties.java#1-80","gmt_create":"2026-08-06T19:44:26.7709703+08:00","gmt_modified":"2026-08-06T19:44:26.7709703+08:00"},{"id":1533,"source_id":"5368e7e708ac910d97280b3bcf8d2fea","target_id":"1c3d8c0613c93140a2b573acbea8ad31","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-06T19:44:26.7709703+08:00","gmt_modified":"2026-08-06T19:44:26.7709703+08:00"},{"id":1534,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"45469cf41a93bd33f3017adefff0283d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java#1-80","gmt_create":"2026-08-06T19:44:26.7714838+08:00","gmt_modified":"2026-08-06T19:44:26.7714838+08:00"},{"id":1535,"source_id":"c2b8eb329a711a41ccd21fc07edb2463","target_id":"45469cf41a93bd33f3017adefff0283d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-06T19:44:26.7720086+08:00","gmt_modified":"2026-08-06T19:44:26.7720086+08:00"},{"id":1536,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"a72a55f3bb6c01653f459cf9d8b7518c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java#1-80","gmt_create":"2026-08-06T19:44:26.773368+08:00","gmt_modified":"2026-08-06T19:44:26.773368+08:00"},{"id":1537,"source_id":"2b45935169fba417d684e0abc8328c9f","target_id":"a72a55f3bb6c01653f459cf9d8b7518c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-06T19:44:26.7741299+08:00","gmt_modified":"2026-08-06T19:44:26.7741299+08:00"},{"id":1538,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"78b06be463e96a353048bc4213d197dd","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/config/CorsConfig.java#1-80","gmt_create":"2026-08-06T19:44:26.7762164+08:00","gmt_modified":"2026-08-06T19:44:26.7762164+08:00"},{"id":1539,"source_id":"949d7f85b20c96ff625551608a0a3453","target_id":"78b06be463e96a353048bc4213d197dd","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-06T19:44:26.7762164+08:00","gmt_modified":"2026-08-06T19:44:26.7762164+08:00"},{"id":1540,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"248ca67cd079f60d3bfb099417017973","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java#1-80","gmt_create":"2026-08-06T19:44:26.7767332+08:00","gmt_modified":"2026-08-06T19:44:26.7767332+08:00"},{"id":1541,"source_id":"1e30fd946317cf4ca3d53f1ca7e05c0b","target_id":"248ca67cd079f60d3bfb099417017973","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-80","gmt_create":"2026-08-06T19:44:26.7767332+08:00","gmt_modified":"2026-08-06T19:44:26.7767332+08:00"},{"id":1542,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"dcb100026957c1a6c50a31e1fc3619ac","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-app/src/main/resources/application.yml#1-76","gmt_create":"2026-08-06T19:44:26.7782732+08:00","gmt_modified":"2026-08-06T19:44:26.7782732+08:00"},{"id":1543,"source_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","target_id":"dcb100026957c1a6c50a31e1fc3619ac","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-76","gmt_create":"2026-08-06T19:44:26.7787828+08:00","gmt_modified":"2026-08-06T19:44:26.7787828+08:00"},{"id":1544,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"25d083d5320a49957375d1baf9de6f8e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-app/src/main/resources/application-verify.yml#1-13","gmt_create":"2026-08-06T19:44:26.7787828+08:00","gmt_modified":"2026-08-06T19:44:26.7787828+08:00"},{"id":1545,"source_id":"8f9d287ac54c058022a9803c7f84937e","target_id":"25d083d5320a49957375d1baf9de6f8e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-13","gmt_create":"2026-08-06T19:44:26.7793158+08:00","gmt_modified":"2026-08-06T19:44:26.7793158+08:00"},{"id":1546,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"47e656964c440dfdf655325aa58f8ecb","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-auth/src/main/resources/application.yml#1-200","gmt_create":"2026-08-06T19:44:26.7793158+08:00","gmt_modified":"2026-08-06T19:44:26.7793158+08:00"},{"id":1547,"source_id":"070b69737b357c71e8b46fd27e1c4d4b","target_id":"47e656964c440dfdf655325aa58f8ecb","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-200","gmt_create":"2026-08-06T19:44:26.7798275+08:00","gmt_modified":"2026-08-06T19:44:26.7798275+08:00"},{"id":1548,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"ad3d4431a7de13debc56b29e615f3080","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docker-compose.yml#1-100","gmt_create":"2026-08-06T19:44:26.7808449+08:00","gmt_modified":"2026-08-06T19:44:26.7808449+08:00"},{"id":1549,"source_id":"47475a382ffa5fe204e1150226d92971","target_id":"ad3d4431a7de13debc56b29e615f3080","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-100","gmt_create":"2026-08-06T19:44:26.7808449+08:00","gmt_modified":"2026-08-06T19:44:26.7808449+08:00"},{"id":1550,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"7f6e2fbcfcc4491f978b98b23eb7c228","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: Dockerfile#1-27","gmt_create":"2026-08-06T19:44:26.7808449+08:00","gmt_modified":"2026-08-06T19:44:26.7808449+08:00"},{"id":1551,"source_id":"d318bb4ad97a34f01840e5503502e6b4","target_id":"7f6e2fbcfcc4491f978b98b23eb7c228","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-27","gmt_create":"2026-08-06T19:44:26.7813579+08:00","gmt_modified":"2026-08-06T19:44:26.7813579+08:00"},{"id":1552,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"f323e0e130d5430bfe10b855cec3c58f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: .dockerignore#1-14","gmt_create":"2026-08-06T19:44:26.7818742+08:00","gmt_modified":"2026-08-06T19:44:26.7818742+08:00"},{"id":1553,"source_id":"3885b6ce09ed80ae3b64b97472b974e7","target_id":"f323e0e130d5430bfe10b855cec3c58f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-08-06T19:44:26.7823962+08:00","gmt_modified":"2026-08-06T19:44:26.7823962+08:00"},{"id":1554,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"d6564f083660a1c722075791cca2110e","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: settings.xml#1-14","gmt_create":"2026-08-06T19:44:26.7829141+08:00","gmt_modified":"2026-08-06T19:44:26.7829141+08:00"},{"id":1555,"source_id":"b96e62e8abf266ff71854b7cc4d89a84","target_id":"d6564f083660a1c722075791cca2110e","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-14","gmt_create":"2026-08-06T19:44:26.783427+08:00","gmt_modified":"2026-08-06T19:44:26.783427+08:00"},{"id":1556,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"4ce88988ec3d606d1c2378b87b2bf5e8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: docs/deploy-verify.md","gmt_create":"2026-08-06T19:44:26.783427+08:00","gmt_modified":"2026-08-06T19:44:26.783427+08:00"},{"id":1557,"source_id":"679892b9-0f46-4aff-a899-ecc5bae086f6","target_id":"2fc84fcaf9df20eb79e9a967d98984fa","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: docs/deploy-verify.md#1-168","gmt_create":"2026-08-06T19:44:26.7839368+08:00","gmt_modified":"2026-08-06T19:44:26.7839368+08:00"},{"id":1558,"source_id":"4ce88988ec3d606d1c2378b87b2bf5e8","target_id":"2fc84fcaf9df20eb79e9a967d98984fa","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 1-168","gmt_create":"2026-08-06T19:44:26.7839368+08:00","gmt_modified":"2026-08-06T19:44:26.7839368+08:00"},{"id":1559,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-06T19:44:39.2373674+08:00","gmt_modified":"2026-08-06T19:44:39.2373674+08:00"},{"id":1560,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T19:44:39.2378758+08:00","gmt_modified":"2026-08-06T19:44:39.2378758+08:00"},{"id":1561,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-06T19:44:39.2378758+08:00","gmt_modified":"2026-08-06T19:44:39.2378758+08:00"},{"id":1562,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-06T19:44:39.2378758+08:00","gmt_modified":"2026-08-06T19:44:39.2378758+08:00"},{"id":1563,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-06T19:44:39.2383846+08:00","gmt_modified":"2026-08-06T19:44:39.2383846+08:00"},{"id":1564,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-06T19:44:39.2383846+08:00","gmt_modified":"2026-08-06T19:44:39.2383846+08:00"},{"id":1565,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-06T19:44:39.2383846+08:00","gmt_modified":"2026-08-06T19:44:39.2383846+08:00"},{"id":1566,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-06T19:44:39.2388904+08:00","gmt_modified":"2026-08-06T19:44:39.2388904+08:00"},{"id":1567,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-06T19:44:39.2388904+08:00","gmt_modified":"2026-08-06T19:44:39.2388904+08:00"},{"id":1568,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-06T19:44:39.2394089+08:00","gmt_modified":"2026-08-06T19:44:39.2394089+08:00"},{"id":1569,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-06T19:44:39.2761515+08:00","gmt_modified":"2026-08-06T19:44:39.2761515+08:00"},{"id":1570,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-06T19:44:39.2777243+08:00","gmt_modified":"2026-08-06T19:44:39.2777243+08:00"},{"id":1571,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-06T19:44:39.2782358+08:00","gmt_modified":"2026-08-06T19:44:39.2782358+08:00"},{"id":1572,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-06T19:44:39.2782358+08:00","gmt_modified":"2026-08-06T19:44:39.2782358+08:00"},{"id":1573,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-06T19:44:39.2782358+08:00","gmt_modified":"2026-08-06T19:44:39.2782358+08:00"},{"id":1574,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-06T19:44:39.2782358+08:00","gmt_modified":"2026-08-06T19:44:39.2782358+08:00"},{"id":1575,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-06T19:44:39.2787507+08:00","gmt_modified":"2026-08-06T19:44:39.2787507+08:00"},{"id":1576,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-06T19:44:39.2787507+08:00","gmt_modified":"2026-08-06T19:44:39.2787507+08:00"},{"id":1577,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-06T19:44:39.2792686+08:00","gmt_modified":"2026-08-06T19:44:39.2792686+08:00"},{"id":1578,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"8dcd729e9a78010df52450fe62cc67b2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/constant/CommonConstants.java","gmt_create":"2026-08-06T19:44:39.2792686+08:00","gmt_modified":"2026-08-06T19:44:39.2792686+08:00"},{"id":1579,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-06T19:44:39.2792686+08:00","gmt_modified":"2026-08-06T19:44:39.2792686+08:00"},{"id":1580,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-06T19:44:39.2792686+08:00","gmt_modified":"2026-08-06T19:44:39.2792686+08:00"},{"id":1581,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-06T19:44:39.2797807+08:00","gmt_modified":"2026-08-06T19:44:39.2797807+08:00"},{"id":1582,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T19:44:39.2797807+08:00","gmt_modified":"2026-08-06T19:44:39.2797807+08:00"},{"id":1583,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T19:44:39.2797807+08:00","gmt_modified":"2026-08-06T19:44:39.2797807+08:00"},{"id":1584,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T19:44:39.2802894+08:00","gmt_modified":"2026-08-06T19:44:39.2802894+08:00"},{"id":1585,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T19:44:39.2802894+08:00","gmt_modified":"2026-08-06T19:44:39.2802894+08:00"},{"id":1586,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T19:44:39.2802894+08:00","gmt_modified":"2026-08-06T19:44:39.2802894+08:00"},{"id":1587,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T19:44:39.2802894+08:00","gmt_modified":"2026-08-06T19:44:39.2802894+08:00"},{"id":1588,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T19:44:39.2807973+08:00","gmt_modified":"2026-08-06T19:44:39.2807973+08:00"},{"id":1589,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T19:44:39.2807973+08:00","gmt_modified":"2026-08-06T19:44:39.2807973+08:00"},{"id":1590,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T19:44:39.2807973+08:00","gmt_modified":"2026-08-06T19:44:39.2807973+08:00"},{"id":1591,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T19:44:39.2813155+08:00","gmt_modified":"2026-08-06T19:44:39.2813155+08:00"},{"id":1592,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T19:44:39.2813155+08:00","gmt_modified":"2026-08-06T19:44:39.2813155+08:00"},{"id":1593,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T19:44:39.2818347+08:00","gmt_modified":"2026-08-06T19:44:39.2818347+08:00"},{"id":1594,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-06T19:45:07.7603941+08:00","gmt_modified":"2026-08-06T19:45:07.7603941+08:00"},{"id":1595,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-06T19:45:07.7603941+08:00","gmt_modified":"2026-08-06T19:45:07.7603941+08:00"},{"id":1596,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-06T19:45:07.7609259+08:00","gmt_modified":"2026-08-06T19:45:07.7609259+08:00"},{"id":1597,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-06T19:45:07.7609259+08:00","gmt_modified":"2026-08-06T19:45:07.7609259+08:00"},{"id":1598,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-06T19:45:07.7614396+08:00","gmt_modified":"2026-08-06T19:45:07.7614396+08:00"},{"id":1599,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-06T19:45:07.7614396+08:00","gmt_modified":"2026-08-06T19:45:07.7614396+08:00"},{"id":1600,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-06T19:45:07.7619555+08:00","gmt_modified":"2026-08-06T19:45:07.7619555+08:00"},{"id":1601,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-06T19:45:07.7619555+08:00","gmt_modified":"2026-08-06T19:45:07.7619555+08:00"},{"id":1602,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T19:45:07.7619555+08:00","gmt_modified":"2026-08-06T19:45:07.7619555+08:00"},{"id":1603,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T19:45:07.7624694+08:00","gmt_modified":"2026-08-06T19:45:07.7624694+08:00"},{"id":1604,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T19:45:07.7624694+08:00","gmt_modified":"2026-08-06T19:45:07.7624694+08:00"},{"id":1605,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"cbd7e122df81b379d68096c9ad0d1bc5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","gmt_create":"2026-08-06T19:45:07.7624694+08:00","gmt_modified":"2026-08-06T19:45:07.7624694+08:00"},{"id":1606,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T19:45:07.7624694+08:00","gmt_modified":"2026-08-06T19:45:07.7624694+08:00"},{"id":1607,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T19:45:07.7630056+08:00","gmt_modified":"2026-08-06T19:45:07.7630056+08:00"},{"id":1608,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-06T19:45:07.7630056+08:00","gmt_modified":"2026-08-06T19:45:07.7630056+08:00"},{"id":1609,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-06T19:45:07.763546+08:00","gmt_modified":"2026-08-06T19:45:07.763546+08:00"},{"id":1610,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-06T19:45:07.763546+08:00","gmt_modified":"2026-08-06T19:45:07.763546+08:00"},{"id":1611,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-06T19:45:07.7640676+08:00","gmt_modified":"2026-08-06T19:45:07.7640676+08:00"},{"id":1612,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-06T19:45:07.7645978+08:00","gmt_modified":"2026-08-06T19:45:07.7645978+08:00"},{"id":1613,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-06T19:45:07.7645978+08:00","gmt_modified":"2026-08-06T19:45:07.7645978+08:00"},{"id":1614,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-06T19:45:07.7651116+08:00","gmt_modified":"2026-08-06T19:45:07.7651116+08:00"},{"id":1615,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-06T19:45:07.7651116+08:00","gmt_modified":"2026-08-06T19:45:07.7651116+08:00"},{"id":1616,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"45f8c9e51de204a6ce44b7b414bf967f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-06T19:45:07.7656295+08:00","gmt_modified":"2026-08-06T19:45:07.7656295+08:00"},{"id":1617,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-06T19:45:07.7656295+08:00","gmt_modified":"2026-08-06T19:45:07.7656295+08:00"},{"id":1618,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-06T19:45:07.7656295+08:00","gmt_modified":"2026-08-06T19:45:07.7656295+08:00"},{"id":1619,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-06T19:45:07.7656295+08:00","gmt_modified":"2026-08-06T19:45:07.7656295+08:00"},{"id":1620,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"ebcc9c2bbb50f1c9b34c399e554d5c61","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java","gmt_create":"2026-08-06T19:45:07.7661553+08:00","gmt_modified":"2026-08-06T19:45:07.7661553+08:00"},{"id":1621,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-06T19:45:07.7661553+08:00","gmt_modified":"2026-08-06T19:45:07.7661553+08:00"},{"id":1622,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"443c00696b8cf69bb4c73995c949f40d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","gmt_create":"2026-08-06T19:45:07.7661553+08:00","gmt_modified":"2026-08-06T19:45:07.7661553+08:00"},{"id":1623,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-06T19:45:07.7666709+08:00","gmt_modified":"2026-08-06T19:45:07.7666709+08:00"},{"id":1624,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T19:45:07.7666709+08:00","gmt_modified":"2026-08-06T19:45:07.7666709+08:00"},{"id":1625,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-06T19:45:07.7671857+08:00","gmt_modified":"2026-08-06T19:45:07.7671857+08:00"},{"id":1626,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T19:46:05.1167793+08:00","gmt_modified":"2026-08-06T19:46:05.1167793+08:00"},{"id":1627,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"8f9d287ac54c058022a9803c7f84937e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application-verify.yml","gmt_create":"2026-08-06T19:46:05.1167793+08:00","gmt_modified":"2026-08-06T19:46:05.1167793+08:00"},{"id":1628,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-06T19:46:05.1173041+08:00","gmt_modified":"2026-08-06T19:46:05.1173041+08:00"},{"id":1629,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-06T19:46:05.1173041+08:00","gmt_modified":"2026-08-06T19:46:05.1173041+08:00"},{"id":1630,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-06T19:46:05.1178226+08:00","gmt_modified":"2026-08-06T19:46:05.1178226+08:00"},{"id":1631,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T19:46:05.1178226+08:00","gmt_modified":"2026-08-06T19:46:05.1178226+08:00"},{"id":1632,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T19:46:05.1178226+08:00","gmt_modified":"2026-08-06T19:46:05.1178226+08:00"},{"id":1633,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"3204c0be957891dd9b878beed284f4a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","gmt_create":"2026-08-06T19:46:05.1178226+08:00","gmt_modified":"2026-08-06T19:46:05.1178226+08:00"},{"id":1634,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-06T19:46:05.1183434+08:00","gmt_modified":"2026-08-06T19:46:05.1183434+08:00"},{"id":1635,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"3c0d2201fb5a98ad1624e8361edfcfe5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/JacksonConfig.java","gmt_create":"2026-08-06T19:46:05.1183434+08:00","gmt_modified":"2026-08-06T19:46:05.1183434+08:00"},{"id":1636,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-06T19:46:05.1183434+08:00","gmt_modified":"2026-08-06T19:46:05.1183434+08:00"},{"id":1637,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"949d7f85b20c96ff625551608a0a3453","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-06T19:46:05.1352702+08:00","gmt_modified":"2026-08-06T19:46:05.1352702+08:00"},{"id":1638,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"1e30fd946317cf4ca3d53f1ca7e05c0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","gmt_create":"2026-08-06T19:46:05.1352702+08:00","gmt_modified":"2026-08-06T19:46:05.1352702+08:00"},{"id":1639,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-06T19:46:05.1442509+08:00","gmt_modified":"2026-08-06T19:46:05.1442509+08:00"},{"id":1640,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-06T19:46:05.1644886+08:00","gmt_modified":"2026-08-06T19:46:05.1644886+08:00"},{"id":1641,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"ebcc9c2bbb50f1c9b34c399e554d5c61","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java","gmt_create":"2026-08-06T19:46:05.1650293+08:00","gmt_modified":"2026-08-06T19:46:05.1650293+08:00"},{"id":1642,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-06T19:46:05.1650293+08:00","gmt_modified":"2026-08-06T19:46:05.1650293+08:00"},{"id":1643,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-06T19:46:05.1655737+08:00","gmt_modified":"2026-08-06T19:46:05.1655737+08:00"},{"id":1644,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-06T19:46:05.1660807+08:00","gmt_modified":"2026-08-06T19:46:05.1660807+08:00"},{"id":1645,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-06T19:46:05.1670985+08:00","gmt_modified":"2026-08-06T19:46:05.1670985+08:00"},{"id":1646,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-06T19:46:05.1670985+08:00","gmt_modified":"2026-08-06T19:46:05.1670985+08:00"},{"id":1647,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T19:46:05.1670985+08:00","gmt_modified":"2026-08-06T19:46:05.1670985+08:00"},{"id":1648,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T19:46:05.1676159+08:00","gmt_modified":"2026-08-06T19:46:05.1676159+08:00"},{"id":1649,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"cbd7e122df81b379d68096c9ad0d1bc5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","gmt_create":"2026-08-06T19:46:05.1676159+08:00","gmt_modified":"2026-08-06T19:46:05.1676159+08:00"},{"id":1650,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"8725216d36747b23e1900d0a80a2e566","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","gmt_create":"2026-08-06T19:46:05.1676159+08:00","gmt_modified":"2026-08-06T19:46:05.1676159+08:00"},{"id":1651,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"585450a9f743134860e41875c7125ee3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java","gmt_create":"2026-08-06T19:46:05.1681309+08:00","gmt_modified":"2026-08-06T19:46:05.1681309+08:00"},{"id":1652,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"c54126cf8c967b28247c04987c23f7dd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java","gmt_create":"2026-08-06T19:46:05.1681309+08:00","gmt_modified":"2026-08-06T19:46:05.1681309+08:00"},{"id":1653,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T19:46:05.1686351+08:00","gmt_modified":"2026-08-06T19:46:05.1686351+08:00"},{"id":1654,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-06T19:46:09.9637169+08:00","gmt_modified":"2026-08-06T19:46:09.9637169+08:00"},{"id":1655,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-06T19:46:09.9637573+08:00","gmt_modified":"2026-08-06T19:46:09.9637573+08:00"},{"id":1656,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-06T19:46:09.9642606+08:00","gmt_modified":"2026-08-06T19:46:09.9642606+08:00"},{"id":1657,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-06T19:46:09.9642787+08:00","gmt_modified":"2026-08-06T19:46:09.9642787+08:00"},{"id":1658,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-06T19:46:09.964822+08:00","gmt_modified":"2026-08-06T19:46:09.964822+08:00"},{"id":1659,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-06T19:46:09.964822+08:00","gmt_modified":"2026-08-06T19:46:09.964822+08:00"},{"id":1660,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-06T19:46:09.9653539+08:00","gmt_modified":"2026-08-06T19:46:09.9653539+08:00"},{"id":1661,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-06T19:46:09.9653539+08:00","gmt_modified":"2026-08-06T19:46:09.9653539+08:00"},{"id":1662,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-06T19:46:09.9653539+08:00","gmt_modified":"2026-08-06T19:46:09.9653539+08:00"},{"id":1663,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-06T19:46:09.9658652+08:00","gmt_modified":"2026-08-06T19:46:09.9658652+08:00"},{"id":1664,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-06T19:46:09.9658652+08:00","gmt_modified":"2026-08-06T19:46:09.9658652+08:00"},{"id":1665,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-06T19:46:09.9658652+08:00","gmt_modified":"2026-08-06T19:46:09.9658652+08:00"},{"id":1666,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-06T19:46:09.9663776+08:00","gmt_modified":"2026-08-06T19:46:09.9663776+08:00"},{"id":1667,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-06T19:46:09.9663776+08:00","gmt_modified":"2026-08-06T19:46:09.9663776+08:00"},{"id":1668,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"dba429cae1157a0f17c39a61bf895a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","gmt_create":"2026-08-06T19:46:09.9663776+08:00","gmt_modified":"2026-08-06T19:46:09.9663776+08:00"},{"id":1669,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-06T19:46:09.96689+08:00","gmt_modified":"2026-08-06T19:46:09.96689+08:00"},{"id":1670,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"df88d216bc772cff7dedfeb1ee77b392","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","gmt_create":"2026-08-06T19:46:09.96689+08:00","gmt_modified":"2026-08-06T19:46:09.96689+08:00"},{"id":1671,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"cbd7e122df81b379d68096c9ad0d1bc5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","gmt_create":"2026-08-06T19:46:09.96689+08:00","gmt_modified":"2026-08-06T19:46:09.96689+08:00"},{"id":1672,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"8e7d2facecaa43d7d0a62897ce6852b8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailRenderer.java","gmt_create":"2026-08-06T19:46:09.96689+08:00","gmt_modified":"2026-08-06T19:46:09.96689+08:00"},{"id":1673,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"8725216d36747b23e1900d0a80a2e566","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","gmt_create":"2026-08-06T19:46:09.9673989+08:00","gmt_modified":"2026-08-06T19:46:09.9673989+08:00"},{"id":1674,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"c54126cf8c967b28247c04987c23f7dd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java","gmt_create":"2026-08-06T19:46:09.9673989+08:00","gmt_modified":"2026-08-06T19:46:09.9673989+08:00"},{"id":1675,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"585450a9f743134860e41875c7125ee3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java","gmt_create":"2026-08-06T19:46:09.9673989+08:00","gmt_modified":"2026-08-06T19:46:09.9673989+08:00"},{"id":1676,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"ab9df9e51b9c174974fc980a7b75a934","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/ThumbnailImageUtils.java","gmt_create":"2026-08-06T19:46:09.9679095+08:00","gmt_modified":"2026-08-06T19:46:09.9679095+08:00"},{"id":1677,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"6c7e732b9b7d9557326bf4129d3cc1a8","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T19:46:09.9679095+08:00","gmt_modified":"2026-08-06T19:46:09.9679095+08:00"},{"id":1678,"source_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-06T19:46:09.9679095+08:00","gmt_modified":"2026-08-06T19:46:09.9679095+08:00"},{"id":1679,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-06T19:46:47.1080185+08:00","gmt_modified":"2026-08-06T19:46:47.1080185+08:00"},{"id":1680,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-06T19:46:47.1080185+08:00","gmt_modified":"2026-08-06T19:46:47.1080185+08:00"},{"id":1681,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"8f9d287ac54c058022a9803c7f84937e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application-verify.yml","gmt_create":"2026-08-06T19:46:47.1085272+08:00","gmt_modified":"2026-08-06T19:46:47.1085272+08:00"},{"id":1682,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-06T19:46:47.1085272+08:00","gmt_modified":"2026-08-06T19:46:47.1085272+08:00"},{"id":1683,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-06T19:46:47.1090393+08:00","gmt_modified":"2026-08-06T19:46:47.1090393+08:00"},{"id":1684,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-06T19:46:47.1090393+08:00","gmt_modified":"2026-08-06T19:46:47.1090393+08:00"},{"id":1685,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-06T19:46:47.1095481+08:00","gmt_modified":"2026-08-06T19:46:47.1095481+08:00"},{"id":1686,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-06T19:46:47.1100635+08:00","gmt_modified":"2026-08-06T19:46:47.1100635+08:00"},{"id":1687,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-06T19:46:47.1100635+08:00","gmt_modified":"2026-08-06T19:46:47.1100635+08:00"},{"id":1688,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-06T19:46:47.1106023+08:00","gmt_modified":"2026-08-06T19:46:47.1106023+08:00"},{"id":1689,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"2425ec25703c7bb507c60f1a925ed240","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java","gmt_create":"2026-08-06T19:46:47.1106023+08:00","gmt_modified":"2026-08-06T19:46:47.1106023+08:00"},{"id":1690,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-06T19:46:47.1106023+08:00","gmt_modified":"2026-08-06T19:46:47.1106023+08:00"},{"id":1691,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-06T19:46:47.1111136+08:00","gmt_modified":"2026-08-06T19:46:47.1111136+08:00"},{"id":1692,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-06T19:46:47.1116403+08:00","gmt_modified":"2026-08-06T19:46:47.1116403+08:00"},{"id":1693,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-06T19:46:47.1121546+08:00","gmt_modified":"2026-08-06T19:46:47.1121546+08:00"},{"id":1694,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-06T19:46:47.1126782+08:00","gmt_modified":"2026-08-06T19:46:47.1126782+08:00"},{"id":1695,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-06T19:46:47.1131912+08:00","gmt_modified":"2026-08-06T19:46:47.1131912+08:00"},{"id":1696,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-06T19:46:47.1137039+08:00","gmt_modified":"2026-08-06T19:46:47.1137039+08:00"},{"id":1697,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-06T19:46:47.1142157+08:00","gmt_modified":"2026-08-06T19:46:47.1142157+08:00"},{"id":1698,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-06T19:46:47.1142157+08:00","gmt_modified":"2026-08-06T19:46:47.1142157+08:00"},{"id":1699,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-06T19:46:47.1148419+08:00","gmt_modified":"2026-08-06T19:46:47.1148419+08:00"},{"id":1700,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-06T19:46:47.1153726+08:00","gmt_modified":"2026-08-06T19:46:47.1153726+08:00"},{"id":1701,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-06T19:46:47.1158886+08:00","gmt_modified":"2026-08-06T19:46:47.1158886+08:00"},{"id":1702,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-06T19:46:47.1158886+08:00","gmt_modified":"2026-08-06T19:46:47.1158886+08:00"},{"id":1703,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-06T19:46:47.1158886+08:00","gmt_modified":"2026-08-06T19:46:47.1158886+08:00"},{"id":1704,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-06T19:46:47.116404+08:00","gmt_modified":"2026-08-06T19:46:47.116404+08:00"},{"id":1705,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-06T19:46:47.116404+08:00","gmt_modified":"2026-08-06T19:46:47.116404+08:00"},{"id":1706,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-06T19:46:47.116968+08:00","gmt_modified":"2026-08-06T19:46:47.116968+08:00"},{"id":1707,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"9b38bcfac9c3a14d74c16429d22380fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-06T19:46:47.1449009+08:00","gmt_modified":"2026-08-06T19:46:47.1449009+08:00"},{"id":1708,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-06T19:46:47.1454052+08:00","gmt_modified":"2026-08-06T19:46:47.1454052+08:00"},{"id":1709,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-06T19:46:47.1460487+08:00","gmt_modified":"2026-08-06T19:46:47.1460487+08:00"},{"id":1710,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-06T19:46:47.1471418+08:00","gmt_modified":"2026-08-06T19:46:47.1471418+08:00"},{"id":1711,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-06T19:46:47.1476674+08:00","gmt_modified":"2026-08-06T19:46:47.1476674+08:00"},{"id":1712,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-06T19:46:47.1482176+08:00","gmt_modified":"2026-08-06T19:46:47.1482176+08:00"},{"id":1713,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-06T19:46:47.1487313+08:00","gmt_modified":"2026-08-06T19:46:47.1487313+08:00"},{"id":1714,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-06T19:46:47.1497821+08:00","gmt_modified":"2026-08-06T19:46:47.1497821+08:00"},{"id":1715,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"8a7bb9534d7381df886b1a476664b902","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","gmt_create":"2026-08-06T19:46:47.1497821+08:00","gmt_modified":"2026-08-06T19:46:47.1497821+08:00"},{"id":1716,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-06T19:46:47.1502914+08:00","gmt_modified":"2026-08-06T19:46:47.1502914+08:00"},{"id":1717,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"3259a2ba7196998a24118782cceeecee","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","gmt_create":"2026-08-06T19:46:47.1508248+08:00","gmt_modified":"2026-08-06T19:46:47.1508248+08:00"},{"id":1718,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-06T19:46:47.1508248+08:00","gmt_modified":"2026-08-06T19:46:47.1508248+08:00"},{"id":1719,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"0951805a35c8cf0d998263dfed532ebe","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java","gmt_create":"2026-08-06T19:46:47.1513362+08:00","gmt_modified":"2026-08-06T19:46:47.1513362+08:00"},{"id":1720,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-06T19:46:47.1518446+08:00","gmt_modified":"2026-08-06T19:46:47.1518446+08:00"},{"id":1721,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"5b91363610bf599cc013882938cf595a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-06T19:46:47.1518446+08:00","gmt_modified":"2026-08-06T19:46:47.1518446+08:00"},{"id":1722,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-06T19:46:47.1523533+08:00","gmt_modified":"2026-08-06T19:46:47.1523533+08:00"},{"id":1723,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-06T19:46:47.1523533+08:00","gmt_modified":"2026-08-06T19:46:47.1523533+08:00"},{"id":1724,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"21067ee0ba0180f2b8514173343f7b0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java","gmt_create":"2026-08-06T19:46:47.1528622+08:00","gmt_modified":"2026-08-06T19:46:47.1528622+08:00"},{"id":1725,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-06T19:46:47.1528622+08:00","gmt_modified":"2026-08-06T19:46:47.1528622+08:00"},{"id":1726,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-06T19:46:47.1533733+08:00","gmt_modified":"2026-08-06T19:46:47.1533733+08:00"},{"id":1727,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-06T19:46:47.1533733+08:00","gmt_modified":"2026-08-06T19:46:47.1533733+08:00"},{"id":1728,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-06T19:46:47.1538829+08:00","gmt_modified":"2026-08-06T19:46:47.1538829+08:00"},{"id":1729,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-06T19:46:47.1538829+08:00","gmt_modified":"2026-08-06T19:46:47.1538829+08:00"},{"id":1730,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-06T19:46:47.1543979+08:00","gmt_modified":"2026-08-06T19:46:47.1543979+08:00"},{"id":1731,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-06T19:46:47.1543979+08:00","gmt_modified":"2026-08-06T19:46:47.1543979+08:00"},{"id":1732,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-06T19:46:47.1549071+08:00","gmt_modified":"2026-08-06T19:46:47.1549071+08:00"},{"id":1733,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-06T19:46:47.1554188+08:00","gmt_modified":"2026-08-06T19:46:47.1554188+08:00"},{"id":1734,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-06T19:46:47.1560467+08:00","gmt_modified":"2026-08-06T19:46:47.1560467+08:00"},{"id":1735,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-06T19:46:47.1560467+08:00","gmt_modified":"2026-08-06T19:46:47.1560467+08:00"},{"id":1736,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-06T19:46:47.1560467+08:00","gmt_modified":"2026-08-06T19:46:47.1560467+08:00"},{"id":1737,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-06T19:46:47.156559+08:00","gmt_modified":"2026-08-06T19:46:47.156559+08:00"},{"id":1738,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-06T19:46:47.156559+08:00","gmt_modified":"2026-08-06T19:46:47.156559+08:00"},{"id":1739,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-06T19:46:47.1570678+08:00","gmt_modified":"2026-08-06T19:46:47.1570678+08:00"},{"id":1740,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-06T19:46:47.1570678+08:00","gmt_modified":"2026-08-06T19:46:47.1570678+08:00"},{"id":1741,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-06T19:46:47.1570678+08:00","gmt_modified":"2026-08-06T19:46:47.1570678+08:00"},{"id":1742,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-06T19:46:47.1575753+08:00","gmt_modified":"2026-08-06T19:46:47.1575753+08:00"},{"id":1743,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"3a8892389711d1a68ff854bc23bc39c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java","gmt_create":"2026-08-06T19:46:47.1575753+08:00","gmt_modified":"2026-08-06T19:46:47.1575753+08:00"},{"id":1744,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-06T19:46:47.1575753+08:00","gmt_modified":"2026-08-06T19:46:47.1575753+08:00"},{"id":1745,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-06T19:46:47.1580842+08:00","gmt_modified":"2026-08-06T19:46:47.1580842+08:00"},{"id":1746,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"3c0d2201fb5a98ad1624e8361edfcfe5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/JacksonConfig.java","gmt_create":"2026-08-06T19:46:47.1580842+08:00","gmt_modified":"2026-08-06T19:46:47.1580842+08:00"},{"id":1747,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-06T19:46:47.1580842+08:00","gmt_modified":"2026-08-06T19:46:47.1580842+08:00"},{"id":1748,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-06T19:46:47.1580842+08:00","gmt_modified":"2026-08-06T19:46:47.1580842+08:00"},{"id":1749,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-06T19:46:47.1585934+08:00","gmt_modified":"2026-08-06T19:46:47.1585934+08:00"},{"id":1750,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-06T19:46:47.1585934+08:00","gmt_modified":"2026-08-06T19:46:47.1585934+08:00"},{"id":1751,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"ebcc9c2bbb50f1c9b34c399e554d5c61","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java","gmt_create":"2026-08-06T19:46:47.1585934+08:00","gmt_modified":"2026-08-06T19:46:47.1585934+08:00"},{"id":1752,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-06T19:46:47.1591033+08:00","gmt_modified":"2026-08-06T19:46:47.1591033+08:00"},{"id":1753,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"949d7f85b20c96ff625551608a0a3453","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-06T19:46:47.1591033+08:00","gmt_modified":"2026-08-06T19:46:47.1591033+08:00"},{"id":1754,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"1e30fd946317cf4ca3d53f1ca7e05c0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","gmt_create":"2026-08-06T19:46:47.1596515+08:00","gmt_modified":"2026-08-06T19:46:47.1596515+08:00"},{"id":1755,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"3204c0be957891dd9b878beed284f4a4","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","gmt_create":"2026-08-06T19:46:47.160291+08:00","gmt_modified":"2026-08-06T19:46:47.160291+08:00"},{"id":1756,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"8dcd729e9a78010df52450fe62cc67b2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/constant/CommonConstants.java","gmt_create":"2026-08-06T19:46:47.160291+08:00","gmt_modified":"2026-08-06T19:46:47.160291+08:00"},{"id":1757,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"83821a36e4f3e52f5bffc50e24952e99","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-06T19:46:47.1608463+08:00","gmt_modified":"2026-08-06T19:46:47.1608463+08:00"},{"id":1758,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"0515f235f6ec8e32043a3b870d857764","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java","gmt_create":"2026-08-06T19:46:47.1608858+08:00","gmt_modified":"2026-08-06T19:46:47.1608858+08:00"},{"id":1759,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"95896bcd7ccff7717a67f499bc3bbc03","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/EnumUtils.java","gmt_create":"2026-08-06T19:46:47.1619258+08:00","gmt_modified":"2026-08-06T19:46:47.1619258+08:00"},{"id":1760,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"7421afce22638e3b1ee9594dcf7236bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java","gmt_create":"2026-08-06T19:46:47.1619258+08:00","gmt_modified":"2026-08-06T19:46:47.1619258+08:00"},{"id":1761,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"7f4bc54539c21a1d994bbbabe2868f2e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-06T19:46:47.162983+08:00","gmt_modified":"2026-08-06T19:46:47.162983+08:00"},{"id":1762,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"7c89e571969f40758206506fdf19649f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/ServletUtils.java","gmt_create":"2026-08-06T19:46:47.163501+08:00","gmt_modified":"2026-08-06T19:46:47.163501+08:00"},{"id":1763,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"53e5a23ce2cd9f508b08b6e1eb290542","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","gmt_create":"2026-08-06T19:46:47.1640163+08:00","gmt_modified":"2026-08-06T19:46:47.1640163+08:00"},{"id":1764,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 88f667ab-0f58-4a85-82cc-d33915ce4c7a","gmt_create":"2026-08-06T19:46:48.7592035+08:00","gmt_modified":"2026-08-06T19:46:48.7592035+08:00"},{"id":1765,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"1058e349-f116-4c95-af6a-eebc7a32cc25","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 1058e349-f116-4c95-af6a-eebc7a32cc25","gmt_create":"2026-08-06T19:46:48.7592035+08:00","gmt_modified":"2026-08-06T19:46:48.7592035+08:00"},{"id":1766,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"34ea7d69-8030-495d-8782-3aa087c80de9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 34ea7d69-8030-495d-8782-3aa087c80de9","gmt_create":"2026-08-06T19:46:48.760201+08:00","gmt_modified":"2026-08-06T19:46:48.760201+08:00"},{"id":1767,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e b5320c7c-d3ea-4e78-844a-d0b334deb03b","gmt_create":"2026-08-06T19:46:48.760201+08:00","gmt_modified":"2026-08-06T19:46:48.760201+08:00"},{"id":1768,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"a92b51f6-5cdb-4a85-b3e3-12a18d707ab5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e a92b51f6-5cdb-4a85-b3e3-12a18d707ab5","gmt_create":"2026-08-06T19:46:48.760201+08:00","gmt_modified":"2026-08-06T19:46:48.760201+08:00"},{"id":1769,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"85fd498e-ba52-470f-b25d-ae190d07e1ac","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 85fd498e-ba52-470f-b25d-ae190d07e1ac","gmt_create":"2026-08-06T19:46:48.760201+08:00","gmt_modified":"2026-08-06T19:46:48.760201+08:00"},{"id":1770,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e ea83a6dc-68e3-478e-8f71-72edf5ee8975","gmt_create":"2026-08-06T19:46:48.761198+08:00","gmt_modified":"2026-08-06T19:46:48.761198+08:00"},{"id":1771,"source_id":"dac07694-6782-4f77-bf00-00708c5e78c7","target_id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: dac07694-6782-4f77-bf00-00708c5e78c7 -\u003e 158e8a6f-5d98-42cf-8e12-c89d7b319118","gmt_create":"2026-08-06T19:46:48.761198+08:00","gmt_modified":"2026-08-06T19:46:48.761198+08:00"},{"id":1772,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"176adc32-f844-4e47-91a5-ec14bd5dca47","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c16d495e-28fe-40ad-acd3-302f8922fc8d -\u003e 176adc32-f844-4e47-91a5-ec14bd5dca47","gmt_create":"2026-08-06T19:46:48.761198+08:00","gmt_modified":"2026-08-06T19:46:48.761198+08:00"},{"id":1773,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"36e9f3c1-b81c-4a57-bb99-3b15b6569af7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c16d495e-28fe-40ad-acd3-302f8922fc8d -\u003e 36e9f3c1-b81c-4a57-bb99-3b15b6569af7","gmt_create":"2026-08-06T19:46:48.761198+08:00","gmt_modified":"2026-08-06T19:46:48.761198+08:00"},{"id":1774,"source_id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","target_id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: c16d495e-28fe-40ad-acd3-302f8922fc8d -\u003e b445dcd0-583c-4864-b2e8-18cc9660ced3","gmt_create":"2026-08-06T19:46:48.761198+08:00","gmt_modified":"2026-08-06T19:46:48.761198+08:00"},{"id":1775,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"da156be4-8933-4ba5-99cb-63907914b9ad","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0071dc3e-4020-43d2-b126-1d18e74ed40d -\u003e da156be4-8933-4ba5-99cb-63907914b9ad","gmt_create":"2026-08-06T19:46:48.7621959+08:00","gmt_modified":"2026-08-06T19:46:48.7621959+08:00"},{"id":1776,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"883d8163-419b-460d-a558-eb118e4a06c9","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0071dc3e-4020-43d2-b126-1d18e74ed40d -\u003e 883d8163-419b-460d-a558-eb118e4a06c9","gmt_create":"2026-08-06T19:46:48.7631939+08:00","gmt_modified":"2026-08-06T19:46:48.7631939+08:00"},{"id":1777,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"f41f75b2-5d32-41eb-9c7e-db2d987ddfd0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0071dc3e-4020-43d2-b126-1d18e74ed40d -\u003e f41f75b2-5d32-41eb-9c7e-db2d987ddfd0","gmt_create":"2026-08-06T19:46:48.7638252+08:00","gmt_modified":"2026-08-06T19:46:48.7638252+08:00"},{"id":1778,"source_id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","target_id":"bd0bea22-698c-4a21-9e56-4e8d3a475ba7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0071dc3e-4020-43d2-b126-1d18e74ed40d -\u003e bd0bea22-698c-4a21-9e56-4e8d3a475ba7","gmt_create":"2026-08-06T19:46:48.7638252+08:00","gmt_modified":"2026-08-06T19:46:48.7638252+08:00"},{"id":1779,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e 2d8b5954-a700-4519-9fef-d0f5c3c842e6","gmt_create":"2026-08-06T19:46:48.7648536+08:00","gmt_modified":"2026-08-06T19:46:48.7648536+08:00"},{"id":1780,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"57308b29-b058-46d1-ae1a-cab06e6e3e51","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e 57308b29-b058-46d1-ae1a-cab06e6e3e51","gmt_create":"2026-08-06T19:46:48.7648688+08:00","gmt_modified":"2026-08-06T19:46:48.7648688+08:00"},{"id":1781,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e ad6bec26-b938-4424-9ee2-741deba5fcb5","gmt_create":"2026-08-06T19:46:48.7653834+08:00","gmt_modified":"2026-08-06T19:46:48.7653834+08:00"},{"id":1782,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"6082a318-56e5-478f-bfac-17723c2bd127","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e 6082a318-56e5-478f-bfac-17723c2bd127","gmt_create":"2026-08-06T19:46:48.7658873+08:00","gmt_modified":"2026-08-06T19:46:48.7658873+08:00"},{"id":1783,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"d4105695-2094-4939-be9d-cf30437aada0","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e d4105695-2094-4939-be9d-cf30437aada0","gmt_create":"2026-08-06T19:46:48.76591+08:00","gmt_modified":"2026-08-06T19:46:48.76591+08:00"},{"id":1784,"source_id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","target_id":"d408e95a-13b7-4ad0-9fbf-2191ed2bfa16","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: abc60a22-9f40-4270-9660-d1ff6a380f2f -\u003e d408e95a-13b7-4ad0-9fbf-2191ed2bfa16","gmt_create":"2026-08-06T19:46:48.7664378+08:00","gmt_modified":"2026-08-06T19:46:48.7664378+08:00"},{"id":1786,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-07T15:23:51.7895387+08:00","gmt_modified":"2026-08-07T15:23:51.7895387+08:00"},{"id":1787,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-07T15:23:51.791186+08:00","gmt_modified":"2026-08-07T15:23:51.791186+08:00"},{"id":1788,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-07T15:23:51.7917112+08:00","gmt_modified":"2026-08-07T15:23:51.7917112+08:00"},{"id":1789,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-07T15:23:51.7926991+08:00","gmt_modified":"2026-08-07T15:23:51.7926991+08:00"},{"id":1790,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-07T15:23:51.7943693+08:00","gmt_modified":"2026-08-07T15:23:51.7943693+08:00"},{"id":1791,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-07T15:23:51.795882+08:00","gmt_modified":"2026-08-07T15:23:51.795882+08:00"},{"id":1792,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-07T15:23:51.7964068+08:00","gmt_modified":"2026-08-07T15:23:51.7964068+08:00"},{"id":1793,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-07T15:23:51.7969211+08:00","gmt_modified":"2026-08-07T15:23:51.7969211+08:00"},{"id":1794,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-07T15:23:51.7969211+08:00","gmt_modified":"2026-08-07T15:23:51.7969211+08:00"},{"id":1795,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-07T15:23:51.7983054+08:00","gmt_modified":"2026-08-07T15:23:51.7983054+08:00"},{"id":1796,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-07T15:23:51.7992985+08:00","gmt_modified":"2026-08-07T15:23:51.7992985+08:00"},{"id":1797,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-07T15:23:51.8002958+08:00","gmt_modified":"2026-08-07T15:23:51.8002958+08:00"},{"id":1798,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-07T15:23:51.8002958+08:00","gmt_modified":"2026-08-07T15:23:51.8002958+08:00"},{"id":1799,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-07T15:23:51.8002958+08:00","gmt_modified":"2026-08-07T15:23:51.8002958+08:00"},{"id":1800,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-07T15:23:51.8012936+08:00","gmt_modified":"2026-08-07T15:23:51.8012936+08:00"},{"id":1801,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-07T15:23:51.8042856+08:00","gmt_modified":"2026-08-07T15:23:51.8042856+08:00"},{"id":1802,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-07T15:23:51.8091187+08:00","gmt_modified":"2026-08-07T15:23:51.8091187+08:00"},{"id":1803,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-07T15:23:51.8115739+08:00","gmt_modified":"2026-08-07T15:23:51.8115739+08:00"},{"id":1804,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"4d9ba6516d682ae0d75676ebe8b3d118","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java","gmt_create":"2026-08-07T15:23:51.8115739+08:00","gmt_modified":"2026-08-07T15:23:51.8115739+08:00"},{"id":1805,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"b5ced4a5ec4685afbabb7ac340a1010a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java","gmt_create":"2026-08-07T15:23:51.8125671+08:00","gmt_modified":"2026-08-07T15:23:51.8125671+08:00"},{"id":1973,"source_id":"b1a16c73af31999d323930a2c4167a74","target_id":"53957daee7170ce40608b570cba5980d","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 21-28","gmt_create":"2026-08-07T15:24:43.6938452+08:00","gmt_modified":"2026-08-07T15:24:43.6938452+08:00"},{"id":1975,"source_id":"262ad7f27823a16099125e62373c7fc2","target_id":"12e5caea42ee07d20505db3df48a1937","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-51","gmt_create":"2026-08-07T15:24:43.6972614+08:00","gmt_modified":"2026-08-07T15:24:43.6972614+08:00"},{"id":1977,"source_id":"8fc93fc883e250086f6f35de5f1fd26b","target_id":"63e090c854f40c12274907bcac0e79ba","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 17-61","gmt_create":"2026-08-07T15:24:43.6977651+08:00","gmt_modified":"2026-08-07T15:24:43.6977651+08:00"},{"id":1979,"source_id":"ef4985e16b40320d472cb841e82c7240","target_id":"ee126b38b064f1c83040b5cae0ba8338","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 70-94","gmt_create":"2026-08-07T15:24:43.7435982+08:00","gmt_modified":"2026-08-07T15:24:43.7435982+08:00"},{"id":1981,"source_id":"ef4985e16b40320d472cb841e82c7240","target_id":"76ab19591a8db22f1531ad386460dc3a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 141-236","gmt_create":"2026-08-07T15:24:43.7446331+08:00","gmt_modified":"2026-08-07T15:24:43.7446331+08:00"},{"id":1983,"source_id":"8ba71b105efa081c1e350d57fee00d4f","target_id":"f580bcbe728b783e517f3e6684e4659f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 7-31","gmt_create":"2026-08-07T15:24:43.7451459+08:00","gmt_modified":"2026-08-07T15:24:43.7451459+08:00"},{"id":1985,"source_id":"e38582646a741d83e9dc13bd171df11a","target_id":"0eb35a657b57b57d8e696b36787b6981","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 24-30","gmt_create":"2026-08-07T15:24:43.7462866+08:00","gmt_modified":"2026-08-07T15:24:43.7462866+08:00"},{"id":1987,"source_id":"b1a16c73af31999d323930a2c4167a74","target_id":"30305cf4a3c1be546d1e22b441b28a9a","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 48-74","gmt_create":"2026-08-07T15:24:43.7478609+08:00","gmt_modified":"2026-08-07T15:24:43.7478609+08:00"},{"id":1989,"source_id":"ef4985e16b40320d472cb841e82c7240","target_id":"38600e00a7fa287399d8baeba3f4ed0c","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 96-137","gmt_create":"2026-08-07T15:24:43.7488958+08:00","gmt_modified":"2026-08-07T15:24:43.7488958+08:00"},{"id":1991,"source_id":"b5ced4a5ec4685afbabb7ac340a1010a","target_id":"e889888359d3a6c10f530f5f6ad600bc","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 218-238","gmt_create":"2026-08-07T15:24:43.7494189+08:00","gmt_modified":"2026-08-07T15:24:43.7494189+08:00"},{"id":1993,"source_id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","target_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0 -\u003e 0c060e95-d7b3-4f91-90c0-3540a440cb1c","gmt_create":"2026-08-07T15:24:44.7023137+08:00","gmt_modified":"2026-08-07T15:24:44.7023137+08:00"},{"id":1994,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"e5687cb7-c956-4dde-b6fc-3972ea916e5e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0c060e95-d7b3-4f91-90c0-3540a440cb1c -\u003e e5687cb7-c956-4dde-b6fc-3972ea916e5e","gmt_create":"2026-08-07T15:24:44.9252284+08:00","gmt_modified":"2026-08-07T15:24:44.9252284+08:00"},{"id":1995,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"8b17b02c-4868-4324-af4f-dcc98fbfed64","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0c060e95-d7b3-4f91-90c0-3540a440cb1c -\u003e 8b17b02c-4868-4324-af4f-dcc98fbfed64","gmt_create":"2026-08-07T15:24:44.9252284+08:00","gmt_modified":"2026-08-07T15:24:44.9252284+08:00"},{"id":1996,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"dff99746-62fb-4c4b-ae86-768430ff2aed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0c060e95-d7b3-4f91-90c0-3540a440cb1c -\u003e dff99746-62fb-4c4b-ae86-768430ff2aed","gmt_create":"2026-08-07T15:24:44.9262632+08:00","gmt_modified":"2026-08-07T15:24:44.9262632+08:00"},{"id":1997,"source_id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","target_id":"c474b493-b90b-4589-b8f6-abb213778b21","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0c060e95-d7b3-4f91-90c0-3540a440cb1c -\u003e c474b493-b90b-4589-b8f6-abb213778b21","gmt_create":"2026-08-07T15:24:44.9267835+08:00","gmt_modified":"2026-08-07T15:24:44.9267835+08:00"},{"id":2010,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-07T17:24:18.4614868+08:00","gmt_modified":"2026-08-07T17:24:18.4614868+08:00"},{"id":2011,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-07T17:24:18.4619991+08:00","gmt_modified":"2026-08-07T17:24:18.4619991+08:00"},{"id":2012,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-07T17:24:18.4619991+08:00","gmt_modified":"2026-08-07T17:24:18.4619991+08:00"},{"id":2013,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-07T17:24:18.4619991+08:00","gmt_modified":"2026-08-07T17:24:18.4619991+08:00"},{"id":2014,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-07T17:24:18.4625091+08:00","gmt_modified":"2026-08-07T17:24:18.4625091+08:00"},{"id":2015,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-07T17:24:18.4630202+08:00","gmt_modified":"2026-08-07T17:24:18.4630202+08:00"},{"id":2016,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"34e7e1e31cc014e8ab3104acc807cc73","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java","gmt_create":"2026-08-07T17:24:18.4635301+08:00","gmt_modified":"2026-08-07T17:24:18.4635301+08:00"},{"id":2017,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"f77483962ff198e16f41554c6e1ceb39","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java","gmt_create":"2026-08-07T17:24:18.4635301+08:00","gmt_modified":"2026-08-07T17:24:18.4635301+08:00"},{"id":2018,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-07T17:24:18.4640402+08:00","gmt_modified":"2026-08-07T17:24:18.4640402+08:00"},{"id":2019,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-07T17:24:18.4640402+08:00","gmt_modified":"2026-08-07T17:24:18.4640402+08:00"},{"id":2020,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-07T17:24:18.4645658+08:00","gmt_modified":"2026-08-07T17:24:18.4645658+08:00"},{"id":2021,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-07T17:24:18.4650698+08:00","gmt_modified":"2026-08-07T17:24:18.4650698+08:00"},{"id":2022,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-07T17:24:18.4650794+08:00","gmt_modified":"2026-08-07T17:24:18.4650794+08:00"},{"id":2023,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-07T17:24:18.4655898+08:00","gmt_modified":"2026-08-07T17:24:18.4655898+08:00"},{"id":2024,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-07T17:24:18.4655898+08:00","gmt_modified":"2026-08-07T17:24:18.4655898+08:00"},{"id":2025,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-07T17:24:18.4661008+08:00","gmt_modified":"2026-08-07T17:24:18.4661008+08:00"},{"id":2026,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-07T17:24:18.4666111+08:00","gmt_modified":"2026-08-07T17:24:18.4666111+08:00"},{"id":2027,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-07T17:24:18.4666111+08:00","gmt_modified":"2026-08-07T17:24:18.4666111+08:00"},{"id":2028,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-07T17:24:18.4671219+08:00","gmt_modified":"2026-08-07T17:24:18.4671219+08:00"},{"id":2029,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-07T17:24:18.4676708+08:00","gmt_modified":"2026-08-07T17:24:18.4676708+08:00"},{"id":2030,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-07T17:24:18.4681865+08:00","gmt_modified":"2026-08-07T17:24:18.4681865+08:00"},{"id":2031,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-07T17:24:18.4681865+08:00","gmt_modified":"2026-08-07T17:24:18.4681865+08:00"},{"id":2032,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-07T17:24:18.4686978+08:00","gmt_modified":"2026-08-07T17:24:18.4686978+08:00"},{"id":2033,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"3a8892389711d1a68ff854bc23bc39c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java","gmt_create":"2026-08-07T17:24:18.4692116+08:00","gmt_modified":"2026-08-07T17:24:18.4692116+08:00"},{"id":2034,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-07T17:24:18.4692116+08:00","gmt_modified":"2026-08-07T17:24:18.4692116+08:00"},{"id":2035,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-07T17:24:18.469737+08:00","gmt_modified":"2026-08-07T17:24:18.469737+08:00"},{"id":2036,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-07T17:24:18.469737+08:00","gmt_modified":"2026-08-07T17:24:18.469737+08:00"},{"id":2037,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-07T17:24:18.470249+08:00","gmt_modified":"2026-08-07T17:24:18.470249+08:00"},{"id":2038,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-07T17:24:18.4707598+08:00","gmt_modified":"2026-08-07T17:24:18.4707598+08:00"},{"id":2039,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-07T17:24:18.4707598+08:00","gmt_modified":"2026-08-07T17:24:18.4707598+08:00"},{"id":2040,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-07T17:24:18.4707598+08:00","gmt_modified":"2026-08-07T17:24:18.4707598+08:00"},{"id":2041,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-07T17:24:18.4712713+08:00","gmt_modified":"2026-08-07T17:24:18.4712713+08:00"},{"id":2042,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-07T17:24:18.4712713+08:00","gmt_modified":"2026-08-07T17:24:18.4712713+08:00"},{"id":2043,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-07T17:24:18.4717841+08:00","gmt_modified":"2026-08-07T17:24:18.4717841+08:00"},{"id":2044,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-07T17:24:18.4722959+08:00","gmt_modified":"2026-08-07T17:24:18.4722959+08:00"},{"id":2045,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-07T17:24:18.4722959+08:00","gmt_modified":"2026-08-07T17:24:18.4722959+08:00"},{"id":2046,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-07T17:24:18.4722959+08:00","gmt_modified":"2026-08-07T17:24:18.4722959+08:00"},{"id":2047,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-07T17:24:18.4728062+08:00","gmt_modified":"2026-08-07T17:24:18.4728062+08:00"},{"id":2048,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-07T17:24:18.4728062+08:00","gmt_modified":"2026-08-07T17:24:18.4728062+08:00"},{"id":2049,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-07T17:24:18.4728062+08:00","gmt_modified":"2026-08-07T17:24:18.4728062+08:00"},{"id":2050,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-07T17:24:18.4728062+08:00","gmt_modified":"2026-08-07T17:24:18.4728062+08:00"},{"id":2051,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-07T17:24:18.4733211+08:00","gmt_modified":"2026-08-07T17:24:18.4733211+08:00"},{"id":2052,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"20f7693b186c4e003d04031dafd605b5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","gmt_create":"2026-08-07T17:24:18.4733211+08:00","gmt_modified":"2026-08-07T17:24:18.4733211+08:00"},{"id":2053,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"8fa19465d23be26b999639add960b23d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-07T17:24:18.4738409+08:00","gmt_modified":"2026-08-07T17:24:18.4738409+08:00"},{"id":2054,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"aea6b84411302cc9a5fbcaf774ac6a29","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-07T17:24:18.4738409+08:00","gmt_modified":"2026-08-07T17:24:18.4738409+08:00"},{"id":2055,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"5be8fe765c8b4c953e524cdf749f440b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-07T17:24:18.4738409+08:00","gmt_modified":"2026-08-07T17:24:18.4738409+08:00"},{"id":2056,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"0e509081560573445a0dd02e946dbf30","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-07T17:24:18.4743439+08:00","gmt_modified":"2026-08-07T17:24:18.4743439+08:00"},{"id":2057,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"cd95faea5a74ee3ae09964119cdb6716","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-07T17:24:18.4748956+08:00","gmt_modified":"2026-08-07T17:24:18.4748956+08:00"},{"id":2058,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-07T17:24:18.4748956+08:00","gmt_modified":"2026-08-07T17:24:18.4748956+08:00"},{"id":2059,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-07T17:24:18.4754151+08:00","gmt_modified":"2026-08-07T17:24:18.4754151+08:00"},{"id":2060,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-07T17:24:18.4754151+08:00","gmt_modified":"2026-08-07T17:24:18.4754151+08:00"},{"id":2061,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-07T17:24:18.4759301+08:00","gmt_modified":"2026-08-07T17:24:18.4759301+08:00"},{"id":2062,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-07T17:24:18.4759301+08:00","gmt_modified":"2026-08-07T17:24:18.4759301+08:00"},{"id":2063,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-07T17:24:18.4764483+08:00","gmt_modified":"2026-08-07T17:24:18.4764483+08:00"},{"id":2064,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-07T17:24:18.4764483+08:00","gmt_modified":"2026-08-07T17:24:18.4764483+08:00"},{"id":2065,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-07T17:24:18.4764483+08:00","gmt_modified":"2026-08-07T17:24:18.4764483+08:00"},{"id":2066,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"90b5c4729568126e07baa5836e6d7df9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java","gmt_create":"2026-08-07T17:24:18.4769614+08:00","gmt_modified":"2026-08-07T17:24:18.4769614+08:00"},{"id":2067,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"3c078aac85d9263365ff2b9e1ca7c801","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java","gmt_create":"2026-08-07T17:24:18.4769614+08:00","gmt_modified":"2026-08-07T17:24:18.4769614+08:00"},{"id":2068,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"262ad7f27823a16099125e62373c7fc2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java","gmt_create":"2026-08-07T17:24:18.4769614+08:00","gmt_modified":"2026-08-07T17:24:18.4769614+08:00"},{"id":2069,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"8fc93fc883e250086f6f35de5f1fd26b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java","gmt_create":"2026-08-07T17:24:18.4769614+08:00","gmt_modified":"2026-08-07T17:24:18.4769614+08:00"},{"id":2070,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"4d9ba6516d682ae0d75676ebe8b3d118","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java","gmt_create":"2026-08-07T17:24:18.4774773+08:00","gmt_modified":"2026-08-07T17:24:18.4774773+08:00"},{"id":2071,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"b5ced4a5ec4685afbabb7ac340a1010a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java","gmt_create":"2026-08-07T17:24:18.4774773+08:00","gmt_modified":"2026-08-07T17:24:18.4774773+08:00"},{"id":2072,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"7d20c7c0818f8352b50774e1cac53e35","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","gmt_create":"2026-08-07T17:24:18.4774773+08:00","gmt_modified":"2026-08-07T17:24:18.4774773+08:00"},{"id":2073,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"34070e2c4487d700b9aae2fc036dcced","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","gmt_create":"2026-08-07T17:24:18.4779956+08:00","gmt_modified":"2026-08-07T17:24:18.4779956+08:00"},{"id":2074,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"08e1158e0e21c1d7974fd49513e51f18","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","gmt_create":"2026-08-07T17:24:18.4779956+08:00","gmt_modified":"2026-08-07T17:24:18.4779956+08:00"},{"id":2075,"source_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","target_id":"b1a16c73af31999d323930a2c4167a74","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: pom.xml","gmt_create":"2026-08-07T17:24:18.4779956+08:00","gmt_modified":"2026-08-07T17:24:18.4779956+08:00"},{"id":2076,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-07T17:24:48.4493722+08:00","gmt_modified":"2026-08-07T17:24:48.4493722+08:00"},{"id":2077,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-07T17:24:48.4493722+08:00","gmt_modified":"2026-08-07T17:24:48.4493722+08:00"},{"id":2078,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"34e7e1e31cc014e8ab3104acc807cc73","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java","gmt_create":"2026-08-07T17:24:48.4498827+08:00","gmt_modified":"2026-08-07T17:24:48.4498827+08:00"},{"id":2079,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"f77483962ff198e16f41554c6e1ceb39","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java","gmt_create":"2026-08-07T17:24:48.4498827+08:00","gmt_modified":"2026-08-07T17:24:48.4498827+08:00"},{"id":2080,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-07T17:24:48.4503946+08:00","gmt_modified":"2026-08-07T17:24:48.4503946+08:00"},{"id":2081,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-07T17:24:48.4503946+08:00","gmt_modified":"2026-08-07T17:24:48.4503946+08:00"},{"id":2082,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-07T17:24:48.4503946+08:00","gmt_modified":"2026-08-07T17:24:48.4503946+08:00"},{"id":2083,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"b085262ba4ef8a02893410a0018a27ff","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-07T17:24:48.4503946+08:00","gmt_modified":"2026-08-07T17:24:48.4503946+08:00"},{"id":2084,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"45f8c9e51de204a6ce44b7b414bf967f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-07T17:24:48.4509026+08:00","gmt_modified":"2026-08-07T17:24:48.4509026+08:00"},{"id":2085,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"8dcd729e9a78010df52450fe62cc67b2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/constant/CommonConstants.java","gmt_create":"2026-08-07T17:24:48.4509026+08:00","gmt_modified":"2026-08-07T17:24:48.4509026+08:00"},{"id":2086,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-07T17:24:48.4509026+08:00","gmt_modified":"2026-08-07T17:24:48.4509026+08:00"},{"id":2087,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-07T17:24:48.4514145+08:00","gmt_modified":"2026-08-07T17:24:48.4514145+08:00"},{"id":2088,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-07T17:24:48.4514145+08:00","gmt_modified":"2026-08-07T17:24:48.4514145+08:00"},{"id":2089,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-07T17:24:48.4683677+08:00","gmt_modified":"2026-08-07T17:24:48.4683677+08:00"},{"id":2090,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-07T17:24:48.4693897+08:00","gmt_modified":"2026-08-07T17:24:48.4693897+08:00"},{"id":2091,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-07T17:24:48.4699014+08:00","gmt_modified":"2026-08-07T17:24:48.4699014+08:00"},{"id":2092,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-07T17:24:48.4699014+08:00","gmt_modified":"2026-08-07T17:24:48.4699014+08:00"},{"id":2093,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-07T17:24:48.4699014+08:00","gmt_modified":"2026-08-07T17:24:48.4699014+08:00"},{"id":2094,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-07T17:24:48.4704147+08:00","gmt_modified":"2026-08-07T17:24:48.4704147+08:00"},{"id":2095,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"3c0d2201fb5a98ad1624e8361edfcfe5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/JacksonConfig.java","gmt_create":"2026-08-07T17:24:48.4704147+08:00","gmt_modified":"2026-08-07T17:24:48.4704147+08:00"},{"id":2096,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"1e30fd946317cf4ca3d53f1ca7e05c0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","gmt_create":"2026-08-07T17:24:48.4709247+08:00","gmt_modified":"2026-08-07T17:24:48.4709247+08:00"},{"id":2097,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"949d7f85b20c96ff625551608a0a3453","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-07T17:24:48.4709247+08:00","gmt_modified":"2026-08-07T17:24:48.4709247+08:00"},{"id":2098,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"ebcc9c2bbb50f1c9b34c399e554d5c61","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java","gmt_create":"2026-08-07T17:24:48.4709247+08:00","gmt_modified":"2026-08-07T17:24:48.4709247+08:00"},{"id":2099,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"3a8892389711d1a68ff854bc23bc39c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java","gmt_create":"2026-08-07T17:24:48.4709247+08:00","gmt_modified":"2026-08-07T17:24:48.4709247+08:00"},{"id":2100,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"c4daef7910e2cd6aaaae07759d897d03","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java","gmt_create":"2026-08-07T17:24:48.4714361+08:00","gmt_modified":"2026-08-07T17:24:48.4714361+08:00"},{"id":2101,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"206da08c92480415f9750a64c534d171","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/service/IBaseService.java","gmt_create":"2026-08-07T17:24:48.4714361+08:00","gmt_modified":"2026-08-07T17:24:48.4714361+08:00"},{"id":2102,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"4bbbc2f3c27f80699526357490785390","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","gmt_create":"2026-08-07T17:24:48.4714361+08:00","gmt_modified":"2026-08-07T17:24:48.4714361+08:00"},{"id":2103,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"83821a36e4f3e52f5bffc50e24952e99","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-07T17:24:48.4719945+08:00","gmt_modified":"2026-08-07T17:24:48.4719945+08:00"},{"id":2104,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"0515f235f6ec8e32043a3b870d857764","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java","gmt_create":"2026-08-07T17:24:48.4719945+08:00","gmt_modified":"2026-08-07T17:24:48.4719945+08:00"},{"id":2105,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"95896bcd7ccff7717a67f499bc3bbc03","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/EnumUtils.java","gmt_create":"2026-08-07T17:24:48.4719945+08:00","gmt_modified":"2026-08-07T17:24:48.4719945+08:00"},{"id":2106,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"7421afce22638e3b1ee9594dcf7236bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java","gmt_create":"2026-08-07T17:24:48.4725014+08:00","gmt_modified":"2026-08-07T17:24:48.4725014+08:00"},{"id":2107,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"7f4bc54539c21a1d994bbbabe2868f2e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-07T17:24:48.4725082+08:00","gmt_modified":"2026-08-07T17:24:48.4725082+08:00"},{"id":2108,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"7c89e571969f40758206506fdf19649f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/ServletUtils.java","gmt_create":"2026-08-07T17:24:48.4725082+08:00","gmt_modified":"2026-08-07T17:24:48.4725082+08:00"},{"id":2109,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"53e5a23ce2cd9f508b08b6e1eb290542","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","gmt_create":"2026-08-07T17:24:48.4730375+08:00","gmt_modified":"2026-08-07T17:24:48.4730375+08:00"},{"id":2110,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-07T17:24:48.4735606+08:00","gmt_modified":"2026-08-07T17:24:48.4735606+08:00"},{"id":2111,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-07T17:24:48.4740881+08:00","gmt_modified":"2026-08-07T17:24:48.4740881+08:00"},{"id":2112,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-07T17:24:48.4740881+08:00","gmt_modified":"2026-08-07T17:24:48.4740881+08:00"},{"id":2113,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-07T17:24:48.4746166+08:00","gmt_modified":"2026-08-07T17:24:48.4746166+08:00"},{"id":2114,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-07T17:24:48.4746166+08:00","gmt_modified":"2026-08-07T17:24:48.4746166+08:00"},{"id":2115,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-07T17:24:48.4751397+08:00","gmt_modified":"2026-08-07T17:24:48.4751397+08:00"},{"id":2116,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-07T17:24:48.4751397+08:00","gmt_modified":"2026-08-07T17:24:48.4751397+08:00"},{"id":2117,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-07T17:24:48.4756826+08:00","gmt_modified":"2026-08-07T17:24:48.4756826+08:00"},{"id":2118,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-07T17:24:48.4762051+08:00","gmt_modified":"2026-08-07T17:24:48.4762051+08:00"},{"id":2119,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-07T17:24:48.4767358+08:00","gmt_modified":"2026-08-07T17:24:48.4767358+08:00"},{"id":2120,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"262ad7f27823a16099125e62373c7fc2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java","gmt_create":"2026-08-07T17:24:48.4767358+08:00","gmt_modified":"2026-08-07T17:24:48.4767358+08:00"},{"id":2121,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"8fc93fc883e250086f6f35de5f1fd26b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java","gmt_create":"2026-08-07T17:24:48.4772591+08:00","gmt_modified":"2026-08-07T17:24:48.4772591+08:00"},{"id":2122,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"d09d393c97b1a9f442ffcd96d76bf89d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroupDefault.java","gmt_create":"2026-08-07T17:24:48.4772591+08:00","gmt_modified":"2026-08-07T17:24:48.4772591+08:00"},{"id":2123,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"f77a6f6465d4891367dc467bafb0a0ab","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/entity/DictRefCount.java","gmt_create":"2026-08-07T17:24:48.477782+08:00","gmt_modified":"2026-08-07T17:24:48.477782+08:00"},{"id":2124,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"90b5c4729568126e07baa5836e6d7df9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java","gmt_create":"2026-08-07T17:24:48.4783067+08:00","gmt_modified":"2026-08-07T17:24:48.4783067+08:00"},{"id":2125,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"3c078aac85d9263365ff2b9e1ca7c801","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java","gmt_create":"2026-08-07T17:24:48.4783067+08:00","gmt_modified":"2026-08-07T17:24:48.4783067+08:00"},{"id":2126,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"caa60b8886f14281b8a88b8143ab2d9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java","gmt_create":"2026-08-07T17:24:48.4788699+08:00","gmt_modified":"2026-08-07T17:24:48.4788699+08:00"},{"id":2127,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"8effb699cbe0e46042e92c9150da411f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java","gmt_create":"2026-08-07T17:24:48.4793965+08:00","gmt_modified":"2026-08-07T17:24:48.4793965+08:00"},{"id":2128,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"85b9fe2ececb9deea46debaff90a8cfb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java","gmt_create":"2026-08-07T17:24:48.4799164+08:00","gmt_modified":"2026-08-07T17:24:48.4799164+08:00"},{"id":2129,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"43c96e6280e2cdae70079cfd103dcc54","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java","gmt_create":"2026-08-07T17:24:48.4804288+08:00","gmt_modified":"2026-08-07T17:24:48.4804288+08:00"},{"id":2130,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"4d9ba6516d682ae0d75676ebe8b3d118","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java","gmt_create":"2026-08-07T17:24:48.4804375+08:00","gmt_modified":"2026-08-07T17:24:48.4804375+08:00"},{"id":2131,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"b5ced4a5ec4685afbabb7ac340a1010a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java","gmt_create":"2026-08-07T17:24:48.4809521+08:00","gmt_modified":"2026-08-07T17:24:48.4809521+08:00"},{"id":2132,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"ef4985e16b40320d472cb841e82c7240","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java","gmt_create":"2026-08-07T17:24:48.4809521+08:00","gmt_modified":"2026-08-07T17:24:48.4809521+08:00"},{"id":2133,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"f12e5c31866079b530411bd27b26239d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java","gmt_create":"2026-08-07T17:24:48.4809521+08:00","gmt_modified":"2026-08-07T17:24:48.4809521+08:00"},{"id":2134,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"e38582646a741d83e9dc13bd171df11a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java","gmt_create":"2026-08-07T17:24:48.48147+08:00","gmt_modified":"2026-08-07T17:24:48.48147+08:00"},{"id":2135,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"b1a16c73af31999d323930a2c4167a74","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: pom.xml","gmt_create":"2026-08-07T17:25:08.9401681+08:00","gmt_modified":"2026-08-07T17:25:08.9401681+08:00"},{"id":2136,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"9f120716e7b0381e045c66412550d1a9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-07T17:25:08.9401681+08:00","gmt_modified":"2026-08-07T17:25:08.9401681+08:00"},{"id":2137,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"ed816b898bf9d2e8548f1dfd5cdeadbb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-app/src/main/resources/application.yml","gmt_create":"2026-08-07T17:25:08.9406841+08:00","gmt_modified":"2026-08-07T17:25:08.9406841+08:00"},{"id":2138,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"ec731c3e8b12fffc7e23eb4ecd950b53","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/AuthApplication.java","gmt_create":"2026-08-07T17:25:08.9406841+08:00","gmt_modified":"2026-08-07T17:25:08.9406841+08:00"},{"id":2139,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"070b69737b357c71e8b46fd27e1c4d4b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/resources/application.yml","gmt_create":"2026-08-07T17:25:08.9406841+08:00","gmt_modified":"2026-08-07T17:25:08.9406841+08:00"},{"id":2140,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"6d19e7c47ad418f3577ff8cfcd56590f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-07T17:25:08.9411876+08:00","gmt_modified":"2026-08-07T17:25:08.9411876+08:00"},{"id":2141,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"979b533c66100f0a3f79f7542e2b01e0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-07T17:25:08.9419351+08:00","gmt_modified":"2026-08-07T17:25:08.9419351+08:00"},{"id":2142,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"4194d46035c0037d3488ab82e57001ba","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-07T17:25:08.9424434+08:00","gmt_modified":"2026-08-07T17:25:08.9424434+08:00"},{"id":2143,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"443f0876cabdd9ad127e648149869761","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-07T17:25:08.9424862+08:00","gmt_modified":"2026-08-07T17:25:08.9424862+08:00"},{"id":2144,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"246da6901c21f063ab47e58aaebcdd3c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-07T17:25:08.9424862+08:00","gmt_modified":"2026-08-07T17:25:08.9424862+08:00"},{"id":2145,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"db5d3491fb45251456163d012a823f5d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-07T17:25:08.9430599+08:00","gmt_modified":"2026-08-07T17:25:08.9430599+08:00"},{"id":2146,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"cff6e76ddd2bdf3e405ed171c279d307","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","gmt_create":"2026-08-07T17:25:08.9435891+08:00","gmt_modified":"2026-08-07T17:25:08.9435891+08:00"},{"id":2147,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"5725c122fbf467925192bf42403e7787","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9435891+08:00","gmt_modified":"2026-08-07T17:25:08.9435891+08:00"},{"id":2148,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"47982a158ab256486f73c409c57d16fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","gmt_create":"2026-08-07T17:25:08.9441186+08:00","gmt_modified":"2026-08-07T17:25:08.9441186+08:00"},{"id":2149,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"b95e6a3c690ffd8ed16d2d4163a5c648","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9441186+08:00","gmt_modified":"2026-08-07T17:25:08.9441186+08:00"},{"id":2150,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8a7bb9534d7381df886b1a476664b902","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","gmt_create":"2026-08-07T17:25:08.9446353+08:00","gmt_modified":"2026-08-07T17:25:08.9446353+08:00"},{"id":2151,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"435000e19b9da20904d5764f4f2352c5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9446353+08:00","gmt_modified":"2026-08-07T17:25:08.9446353+08:00"},{"id":2152,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"3259a2ba7196998a24118782cceeecee","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","gmt_create":"2026-08-07T17:25:08.9451577+08:00","gmt_modified":"2026-08-07T17:25:08.9451577+08:00"},{"id":2153,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"ad239f5e0129b57722497e4051492302","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9451577+08:00","gmt_modified":"2026-08-07T17:25:08.9451577+08:00"},{"id":2154,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"0951805a35c8cf0d998263dfed532ebe","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java","gmt_create":"2026-08-07T17:25:08.9456673+08:00","gmt_modified":"2026-08-07T17:25:08.9456673+08:00"},{"id":2155,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"887492aa11700fd0984b91d5fa1cf130","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9456673+08:00","gmt_modified":"2026-08-07T17:25:08.9456673+08:00"},{"id":2156,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"720e90c29ddd88a8633c9d31ce443b5e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-07T17:25:08.9456673+08:00","gmt_modified":"2026-08-07T17:25:08.9456673+08:00"},{"id":2157,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"10a536bc357c7840a6eec61b40741915","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-07T17:25:08.94618+08:00","gmt_modified":"2026-08-07T17:25:08.94618+08:00"},{"id":2158,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"ef98104ba47dd7d33624e1916c0694cd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","gmt_create":"2026-08-07T17:25:08.94618+08:00","gmt_modified":"2026-08-07T17:25:08.94618+08:00"},{"id":2159,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-07T17:25:08.9466909+08:00","gmt_modified":"2026-08-07T17:25:08.9466909+08:00"},{"id":2160,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"03278a0623db482aec43e508d1268208","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","gmt_create":"2026-08-07T17:25:08.9466909+08:00","gmt_modified":"2026-08-07T17:25:08.9466909+08:00"},{"id":2161,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"86622c8fa2eab6b1847927d47d77b7fd","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-07T17:25:08.9466909+08:00","gmt_modified":"2026-08-07T17:25:08.9466909+08:00"},{"id":2162,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"21067ee0ba0180f2b8514173343f7b0d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java","gmt_create":"2026-08-07T17:25:08.9466909+08:00","gmt_modified":"2026-08-07T17:25:08.9466909+08:00"},{"id":2163,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"c612f590645fb36de9e13767f1c81a0c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","gmt_create":"2026-08-07T17:25:08.9466909+08:00","gmt_modified":"2026-08-07T17:25:08.9466909+08:00"},{"id":2164,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"b60764213680af3c984d82f4146db2df","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-07T17:25:08.9466909+08:00","gmt_modified":"2026-08-07T17:25:08.9466909+08:00"},{"id":2165,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8e967137fd04208873ef2894951b2b3d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-07T17:25:08.9466909+08:00","gmt_modified":"2026-08-07T17:25:08.9466909+08:00"},{"id":2166,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"91569422a8bc25dfd346718b1de8212c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-07T17:25:08.9476823+08:00","gmt_modified":"2026-08-07T17:25:08.9476823+08:00"},{"id":2167,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"5da86b8d801192fd63ea6aa57b666057","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","gmt_create":"2026-08-07T17:25:08.9476823+08:00","gmt_modified":"2026-08-07T17:25:08.9476823+08:00"},{"id":2168,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"26cb8256b5c728bdc24b532313d3a166","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","gmt_create":"2026-08-07T17:25:08.9476823+08:00","gmt_modified":"2026-08-07T17:25:08.9476823+08:00"},{"id":2169,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"e1f225cc9efe7384e97ee284b89eabc0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","gmt_create":"2026-08-07T17:25:08.9476823+08:00","gmt_modified":"2026-08-07T17:25:08.9476823+08:00"},{"id":2170,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"0b3ed971f0f095d6e203ddde717574e9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-07T17:25:08.9476823+08:00","gmt_modified":"2026-08-07T17:25:08.9476823+08:00"},{"id":2171,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"58507cf1cc358b2da45575d16c857d87","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","gmt_create":"2026-08-07T17:25:08.9476823+08:00","gmt_modified":"2026-08-07T17:25:08.9476823+08:00"},{"id":2172,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8cac10327042dbf538d05120f601aa48","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-07T17:25:08.9486797+08:00","gmt_modified":"2026-08-07T17:25:08.9486797+08:00"},{"id":2173,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"086d66e96aa620aca8a7c9d337100360","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","gmt_create":"2026-08-07T17:25:08.9486797+08:00","gmt_modified":"2026-08-07T17:25:08.9486797+08:00"},{"id":2174,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"4bbbc2f3c27f80699526357490785390","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9486797+08:00","gmt_modified":"2026-08-07T17:25:08.9486797+08:00"},{"id":2175,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"206da08c92480415f9750a64c534d171","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/service/IBaseService.java","gmt_create":"2026-08-07T17:25:08.9486797+08:00","gmt_modified":"2026-08-07T17:25:08.9486797+08:00"},{"id":2176,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"219bfc88fc6b98fdc50a57b641262250","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-07T17:25:08.9486797+08:00","gmt_modified":"2026-08-07T17:25:08.9486797+08:00"},{"id":2177,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-07T17:25:08.949677+08:00","gmt_modified":"2026-08-07T17:25:08.949677+08:00"},{"id":2178,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8f361aaf831f559241b15bd521ea5cd1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-07T17:25:08.949677+08:00","gmt_modified":"2026-08-07T17:25:08.949677+08:00"},{"id":2179,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"3c0d2201fb5a98ad1624e8361edfcfe5","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/JacksonConfig.java","gmt_create":"2026-08-07T17:25:08.949677+08:00","gmt_modified":"2026-08-07T17:25:08.949677+08:00"},{"id":2180,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"1e30fd946317cf4ca3d53f1ca7e05c0b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","gmt_create":"2026-08-07T17:25:08.949677+08:00","gmt_modified":"2026-08-07T17:25:08.949677+08:00"},{"id":2181,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"ae79ce740680fd6655ac6de67b002373","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-07T17:25:08.949677+08:00","gmt_modified":"2026-08-07T17:25:08.949677+08:00"},{"id":2182,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"5fcea73039602b38183b915b5b7efc58","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-07T17:25:08.949677+08:00","gmt_modified":"2026-08-07T17:25:08.949677+08:00"},{"id":2183,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8fd30f11d13534f235ad5b9fc9490d81","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","gmt_create":"2026-08-07T17:25:08.9506742+08:00","gmt_modified":"2026-08-07T17:25:08.9506742+08:00"},{"id":2184,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"2b45935169fba417d684e0abc8328c9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-07T17:25:08.9506742+08:00","gmt_modified":"2026-08-07T17:25:08.9506742+08:00"},{"id":2185,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"ebcc9c2bbb50f1c9b34c399e554d5c61","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java","gmt_create":"2026-08-07T17:25:08.9506742+08:00","gmt_modified":"2026-08-07T17:25:08.9506742+08:00"},{"id":2186,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"624d3c748c2d1b470b26409fbb19c4d3","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-07T17:25:08.9506742+08:00","gmt_modified":"2026-08-07T17:25:08.9506742+08:00"},{"id":2187,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8dcd729e9a78010df52450fe62cc67b2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/constant/CommonConstants.java","gmt_create":"2026-08-07T17:25:08.9506742+08:00","gmt_modified":"2026-08-07T17:25:08.9506742+08:00"},{"id":2188,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"7a809dc905a15b19452162b602354d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","gmt_create":"2026-08-07T17:25:08.9506742+08:00","gmt_modified":"2026-08-07T17:25:08.9506742+08:00"},{"id":2189,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"4df2448146189cb35695461c4efeeef7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-07T17:25:08.9506742+08:00","gmt_modified":"2026-08-07T17:25:08.9506742+08:00"},{"id":2190,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"34e7e1e31cc014e8ab3104acc807cc73","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java","gmt_create":"2026-08-07T17:25:08.9516716+08:00","gmt_modified":"2026-08-07T17:25:08.9516716+08:00"},{"id":2191,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"f77483962ff198e16f41554c6e1ceb39","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java","gmt_create":"2026-08-07T17:25:08.9516716+08:00","gmt_modified":"2026-08-07T17:25:08.9516716+08:00"},{"id":2192,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"839aaee42fad8c788d762040f926c7cf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-07T17:25:08.9516716+08:00","gmt_modified":"2026-08-07T17:25:08.9516716+08:00"},{"id":2193,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"fbcc9319095d04d42cae2a4126d632cc","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/Result.java","gmt_create":"2026-08-07T17:25:08.9516716+08:00","gmt_modified":"2026-08-07T17:25:08.9516716+08:00"},{"id":2194,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"71737ec08030f7f53dcba1d13a65df12","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-07T17:25:08.9516716+08:00","gmt_modified":"2026-08-07T17:25:08.9516716+08:00"},{"id":2195,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"78f9a7cfb354a1eb9744378aeb898070","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","gmt_create":"2026-08-07T17:25:08.9516716+08:00","gmt_modified":"2026-08-07T17:25:08.9516716+08:00"},{"id":2196,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"552d2164b5a76f113724b37692c9a8ad","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","gmt_create":"2026-08-07T17:25:08.952669+08:00","gmt_modified":"2026-08-07T17:25:08.952669+08:00"},{"id":2197,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"3d2db44a848dd979c85d02227c0860f1","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","gmt_create":"2026-08-07T17:25:08.952669+08:00","gmt_modified":"2026-08-07T17:25:08.952669+08:00"},{"id":2198,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"a769abcb464b3fed3c877eaaa18bb7ea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-07T17:25:08.952669+08:00","gmt_modified":"2026-08-07T17:25:08.952669+08:00"},{"id":2199,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"3a8892389711d1a68ff854bc23bc39c2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java","gmt_create":"2026-08-07T17:25:08.952669+08:00","gmt_modified":"2026-08-07T17:25:08.952669+08:00"},{"id":2200,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"485d0b6edfad127744af104bc2fccdec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-07T17:25:08.952669+08:00","gmt_modified":"2026-08-07T17:25:08.952669+08:00"},{"id":2201,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"9618beabcede2e839e6dedf9121f30d7","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataOwnership.java","gmt_create":"2026-08-07T17:25:08.952669+08:00","gmt_modified":"2026-08-07T17:25:08.952669+08:00"},{"id":2202,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"33650500053c4035f9b41cc603ec7177","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-07T17:25:08.952669+08:00","gmt_modified":"2026-08-07T17:25:08.952669+08:00"},{"id":2203,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"3c80766c0fa9dab148e4f57f2843c3fb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-07T17:25:08.9536672+08:00","gmt_modified":"2026-08-07T17:25:08.9536672+08:00"},{"id":2204,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"7f1c91eeb163925e7598ee1fa3808178","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-07T17:25:08.9536672+08:00","gmt_modified":"2026-08-07T17:25:08.9536672+08:00"},{"id":2205,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"dc053fd228077fc0cfbe0b6f895efff0","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/LoginUser.java","gmt_create":"2026-08-07T17:25:08.9536672+08:00","gmt_modified":"2026-08-07T17:25:08.9536672+08:00"},{"id":2206,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"594e46f4067bf5c53e0e58dd1cb1142f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-07T17:25:08.9536672+08:00","gmt_modified":"2026-08-07T17:25:08.9536672+08:00"},{"id":2207,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"83821a36e4f3e52f5bffc50e24952e99","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-07T17:25:08.9536672+08:00","gmt_modified":"2026-08-07T17:25:08.9536672+08:00"},{"id":2208,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"0515f235f6ec8e32043a3b870d857764","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java","gmt_create":"2026-08-07T17:25:08.9536672+08:00","gmt_modified":"2026-08-07T17:25:08.9536672+08:00"},{"id":2209,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"95896bcd7ccff7717a67f499bc3bbc03","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/EnumUtils.java","gmt_create":"2026-08-07T17:25:08.9546636+08:00","gmt_modified":"2026-08-07T17:25:08.9546636+08:00"},{"id":2210,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"7421afce22638e3b1ee9594dcf7236bb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java","gmt_create":"2026-08-07T17:25:08.9546636+08:00","gmt_modified":"2026-08-07T17:25:08.9546636+08:00"},{"id":2211,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"7f4bc54539c21a1d994bbbabe2868f2e","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-07T17:25:08.9546636+08:00","gmt_modified":"2026-08-07T17:25:08.9546636+08:00"},{"id":2212,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"7c89e571969f40758206506fdf19649f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/ServletUtils.java","gmt_create":"2026-08-07T17:25:08.9546636+08:00","gmt_modified":"2026-08-07T17:25:08.9546636+08:00"},{"id":2213,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"53e5a23ce2cd9f508b08b6e1eb290542","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","gmt_create":"2026-08-07T17:25:08.9546636+08:00","gmt_modified":"2026-08-07T17:25:08.9546636+08:00"},{"id":2214,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"01c3b61921ce0cdb4028d7335ad82908","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/api/FileApi.java","gmt_create":"2026-08-07T17:25:08.9782819+08:00","gmt_modified":"2026-08-07T17:25:08.9782819+08:00"},{"id":2215,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"30323def9cb0fe6b260ea6a5e9fa283b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-07T17:25:08.9803922+08:00","gmt_modified":"2026-08-07T17:25:08.9803922+08:00"},{"id":2216,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"306688bd02d5e00424c36a8e3f7bf006","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","gmt_create":"2026-08-07T17:25:08.9803922+08:00","gmt_modified":"2026-08-07T17:25:08.9803922+08:00"},{"id":2217,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"471daee1ba8d0a0c9d37ea42b9515adb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9809082+08:00","gmt_modified":"2026-08-07T17:25:08.9809082+08:00"},{"id":2218,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"2d0aeb7dc1271c1eb9f22f52a9210b28","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","gmt_create":"2026-08-07T17:25:08.9809082+08:00","gmt_modified":"2026-08-07T17:25:08.9809082+08:00"},{"id":2219,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"08d8600fa4e7cbf52b43b28fefb529ec","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","gmt_create":"2026-08-07T17:25:08.9809082+08:00","gmt_modified":"2026-08-07T17:25:08.9809082+08:00"},{"id":2220,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"c2b8eb329a711a41ccd21fc07edb2463","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-07T17:25:08.9814236+08:00","gmt_modified":"2026-08-07T17:25:08.9814236+08:00"},{"id":2221,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"dd4e6c7873de5b24deefcc3d24077825","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-07T17:25:08.9814236+08:00","gmt_modified":"2026-08-07T17:25:08.9814236+08:00"},{"id":2222,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"032a64276c297276c1a743877fd3086f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-07T17:25:08.9819333+08:00","gmt_modified":"2026-08-07T17:25:08.9819333+08:00"},{"id":2223,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"5368e7e708ac910d97280b3bcf8d2fea","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-07T17:25:08.9819333+08:00","gmt_modified":"2026-08-07T17:25:08.9819333+08:00"},{"id":2224,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"39eb78d63159d9752bb2b5c51cb36866","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","gmt_create":"2026-08-07T17:25:08.9819333+08:00","gmt_modified":"2026-08-07T17:25:08.9819333+08:00"},{"id":2225,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"fa2f5e7042497a395c2626391ec0d7bf","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-07T17:25:08.982444+08:00","gmt_modified":"2026-08-07T17:25:08.982444+08:00"},{"id":2226,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"963b51c629dc6ac069aa76e8963c1a6d","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","gmt_create":"2026-08-07T17:25:08.982444+08:00","gmt_modified":"2026-08-07T17:25:08.982444+08:00"},{"id":2227,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"3e34beaab2157554f2a1794a32270ffa","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","gmt_create":"2026-08-07T17:25:08.982444+08:00","gmt_modified":"2026-08-07T17:25:08.982444+08:00"},{"id":2228,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"f1fb4816e6ea250dab4117110b6cb9a2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-07T17:25:08.9829464+08:00","gmt_modified":"2026-08-07T17:25:08.9829464+08:00"},{"id":2229,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"b166619a987530bfae4a50d01196ad16","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","gmt_create":"2026-08-07T17:25:08.9829663+08:00","gmt_modified":"2026-08-07T17:25:08.9829663+08:00"},{"id":2230,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"a4a6b77c65782566cccb77704b57621a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-07T17:25:08.9829663+08:00","gmt_modified":"2026-08-07T17:25:08.9829663+08:00"},{"id":2231,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"126ced157e151b5685ddcdb461416d99","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/DictApplication.java","gmt_create":"2026-08-07T17:25:08.9834819+08:00","gmt_modified":"2026-08-07T17:25:08.9834819+08:00"},{"id":2232,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8243e1e6c5bc1f9308e926431849764c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/pom.xml","gmt_create":"2026-08-07T17:25:08.9834819+08:00","gmt_modified":"2026-08-07T17:25:08.9834819+08:00"},{"id":2233,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"682f909c69822ef576d6ffc5956c6a2c","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/CONTEXT.md","gmt_create":"2026-08-07T17:25:08.9839908+08:00","gmt_modified":"2026-08-07T17:25:08.9839908+08:00"},{"id":2234,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"262ad7f27823a16099125e62373c7fc2","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java","gmt_create":"2026-08-07T17:25:08.9839908+08:00","gmt_modified":"2026-08-07T17:25:08.9839908+08:00"},{"id":2235,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8fc93fc883e250086f6f35de5f1fd26b","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java","gmt_create":"2026-08-07T17:25:08.9839908+08:00","gmt_modified":"2026-08-07T17:25:08.9839908+08:00"},{"id":2236,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"90b5c4729568126e07baa5836e6d7df9","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java","gmt_create":"2026-08-07T17:25:08.9844989+08:00","gmt_modified":"2026-08-07T17:25:08.9844989+08:00"},{"id":2237,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"3c078aac85d9263365ff2b9e1ca7c801","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java","gmt_create":"2026-08-07T17:25:08.9844989+08:00","gmt_modified":"2026-08-07T17:25:08.9844989+08:00"},{"id":2238,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"85b9fe2ececb9deea46debaff90a8cfb","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java","gmt_create":"2026-08-07T17:25:08.9850166+08:00","gmt_modified":"2026-08-07T17:25:08.9850166+08:00"},{"id":2239,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"43c96e6280e2cdae70079cfd103dcc54","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java","gmt_create":"2026-08-07T17:25:08.9850217+08:00","gmt_modified":"2026-08-07T17:25:08.9850217+08:00"},{"id":2240,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8ba71b105efa081c1e350d57fee00d4f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java","gmt_create":"2026-08-07T17:25:08.9855555+08:00","gmt_modified":"2026-08-07T17:25:08.9855555+08:00"},{"id":2241,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"caa60b8886f14281b8a88b8143ab2d9f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java","gmt_create":"2026-08-07T17:25:08.9855555+08:00","gmt_modified":"2026-08-07T17:25:08.9855555+08:00"},{"id":2242,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8effb699cbe0e46042e92c9150da411f","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java","gmt_create":"2026-08-07T17:25:08.9855555+08:00","gmt_modified":"2026-08-07T17:25:08.9855555+08:00"},{"id":2243,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"ef4985e16b40320d472cb841e82c7240","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java","gmt_create":"2026-08-07T17:25:08.9860636+08:00","gmt_modified":"2026-08-07T17:25:08.9860636+08:00"},{"id":2244,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"e38582646a741d83e9dc13bd171df11a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java","gmt_create":"2026-08-07T17:25:08.9860636+08:00","gmt_modified":"2026-08-07T17:25:08.9860636+08:00"},{"id":2245,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"4d9ba6516d682ae0d75676ebe8b3d118","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9860636+08:00","gmt_modified":"2026-08-07T17:25:08.9860636+08:00"},{"id":2246,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"b5ced4a5ec4685afbabb7ac340a1010a","source_type":"WIKI_ITEM","target_type":"SOURCE_FILE","relationship_type":"REFERENCED_BY","extra":"Wiki references source file: crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java","gmt_create":"2026-08-07T17:25:08.9860636+08:00","gmt_modified":"2026-08-07T17:25:08.9860636+08:00"},{"id":2247,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"53957daee7170ce40608b570cba5980d","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: pom.xml#21-28","gmt_create":"2026-08-07T17:25:08.9865716+08:00","gmt_modified":"2026-08-07T17:25:08.9865716+08:00"},{"id":2248,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"12e5caea42ee07d20505db3df48a1937","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java#17-51","gmt_create":"2026-08-07T17:25:08.9870798+08:00","gmt_modified":"2026-08-07T17:25:08.9870798+08:00"},{"id":2249,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"63e090c854f40c12274907bcac0e79ba","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java#17-61","gmt_create":"2026-08-07T17:25:08.9870798+08:00","gmt_modified":"2026-08-07T17:25:08.9870798+08:00"},{"id":2250,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"76fd244decf9368e32c288727c7a655f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java#14-34","gmt_create":"2026-08-07T17:25:08.9875874+08:00","gmt_modified":"2026-08-07T17:25:08.9875874+08:00"},{"id":2251,"source_id":"90b5c4729568126e07baa5836e6d7df9","target_id":"76fd244decf9368e32c288727c7a655f","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 14-34","gmt_create":"2026-08-07T17:25:08.9875874+08:00","gmt_modified":"2026-08-07T17:25:08.9875874+08:00"},{"id":2252,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"c7303162131eb349fb6e1da5782dbff6","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java#16-49","gmt_create":"2026-08-07T17:25:08.9882541+08:00","gmt_modified":"2026-08-07T17:25:08.9882541+08:00"},{"id":2253,"source_id":"3c078aac85d9263365ff2b9e1ca7c801","target_id":"c7303162131eb349fb6e1da5782dbff6","source_type":"SOURCE_FILE","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Source file contains code snippet: 16-49","gmt_create":"2026-08-07T17:25:08.9882541+08:00","gmt_modified":"2026-08-07T17:25:08.9882541+08:00"},{"id":2254,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"ee126b38b064f1c83040b5cae0ba8338","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java#70-94","gmt_create":"2026-08-07T17:25:08.9903495+08:00","gmt_modified":"2026-08-07T17:25:08.9903495+08:00"},{"id":2255,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"76ab19591a8db22f1531ad386460dc3a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java#141-236","gmt_create":"2026-08-07T17:25:08.9908815+08:00","gmt_modified":"2026-08-07T17:25:08.9908815+08:00"},{"id":2256,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"f580bcbe728b783e517f3e6684e4659f","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java#7-31","gmt_create":"2026-08-07T17:25:08.9913997+08:00","gmt_modified":"2026-08-07T17:25:08.9913997+08:00"},{"id":2257,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"0eb35a657b57b57d8e696b36787b6981","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java#24-30","gmt_create":"2026-08-07T17:25:08.9919386+08:00","gmt_modified":"2026-08-07T17:25:08.9919386+08:00"},{"id":2258,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"30305cf4a3c1be546d1e22b441b28a9a","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: pom.xml#48-74","gmt_create":"2026-08-07T17:25:08.9924576+08:00","gmt_modified":"2026-08-07T17:25:08.9924576+08:00"},{"id":2259,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"38600e00a7fa287399d8baeba3f4ed0c","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java#96-137","gmt_create":"2026-08-07T17:25:08.9930105+08:00","gmt_modified":"2026-08-07T17:25:08.9930105+08:00"},{"id":2260,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"e889888359d3a6c10f530f5f6ad600bc","source_type":"WIKI_ITEM","target_type":"CODE_SNIPPET","relationship_type":"CONTAINS","extra":"Wiki contains code snippet: crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java#218-238","gmt_create":"2026-08-07T17:25:08.9930105+08:00","gmt_modified":"2026-08-07T17:25:08.9930105+08:00"},{"id":2261,"source_id":"6d8082c2-bade-49fb-b470-995db7466303","target_id":"0870c57d-c63c-477f-b69e-7799461cae3a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 6d8082c2-bade-49fb-b470-995db7466303 -\u003e 0870c57d-c63c-477f-b69e-7799461cae3a","gmt_create":"2026-08-07T17:25:09.7490648+08:00","gmt_modified":"2026-08-07T17:25:09.7490648+08:00"},{"id":2262,"source_id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","target_id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 294a8990-8858-40c4-b8c7-ff37d91d6d31 -\u003e 1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","gmt_create":"2026-08-07T17:25:09.7719786+08:00","gmt_modified":"2026-08-07T17:25:09.7719786+08:00"},{"id":2263,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0870c57d-c63c-477f-b69e-7799461cae3a -\u003e 8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","gmt_create":"2026-08-07T17:25:09.7757455+08:00","gmt_modified":"2026-08-07T17:25:09.7757455+08:00"},{"id":2264,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"301311ec-fa49-441d-8f69-bec64740fdd8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0870c57d-c63c-477f-b69e-7799461cae3a -\u003e 301311ec-fa49-441d-8f69-bec64740fdd8","gmt_create":"2026-08-07T17:25:09.7762652+08:00","gmt_modified":"2026-08-07T17:25:09.7762652+08:00"},{"id":2265,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0870c57d-c63c-477f-b69e-7799461cae3a -\u003e 9ae0059a-05ad-4318-857f-ce3b539fd9d5","gmt_create":"2026-08-07T17:25:09.7767781+08:00","gmt_modified":"2026-08-07T17:25:09.7767781+08:00"},{"id":2266,"source_id":"0870c57d-c63c-477f-b69e-7799461cae3a","target_id":"5185347d-edff-48f1-a87e-bd08f91b7939","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 0870c57d-c63c-477f-b69e-7799461cae3a -\u003e 5185347d-edff-48f1-a87e-bd08f91b7939","gmt_create":"2026-08-07T17:25:09.7767781+08:00","gmt_modified":"2026-08-07T17:25:09.7767781+08:00"},{"id":2267,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"60857927-930a-4ef5-9096-2a05359e1e5b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e 60857927-930a-4ef5-9096-2a05359e1e5b","gmt_create":"2026-08-07T17:25:09.7803844+08:00","gmt_modified":"2026-08-07T17:25:09.7803844+08:00"},{"id":2268,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"d7242e37-8722-4c9c-9e2c-cc9cd3adb20b","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e d7242e37-8722-4c9c-9e2c-cc9cd3adb20b","gmt_create":"2026-08-07T17:25:09.7808881+08:00","gmt_modified":"2026-08-07T17:25:09.7808881+08:00"},{"id":2269,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"27b42b0d-e7f8-4ab2-96f1-1bc0981b94c2","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e 27b42b0d-e7f8-4ab2-96f1-1bc0981b94c2","gmt_create":"2026-08-07T17:25:09.7809658+08:00","gmt_modified":"2026-08-07T17:25:09.7809658+08:00"},{"id":2270,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"ffb733ba-253c-4fc1-b940-e65c03f1a508","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e ffb733ba-253c-4fc1-b940-e65c03f1a508","gmt_create":"2026-08-07T17:25:09.7809658+08:00","gmt_modified":"2026-08-07T17:25:09.7809658+08:00"},{"id":2271,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"b2a66c5e-122e-4968-ae3a-6c1efadf5b66","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e b2a66c5e-122e-4968-ae3a-6c1efadf5b66","gmt_create":"2026-08-07T17:25:09.7814805+08:00","gmt_modified":"2026-08-07T17:25:09.7814805+08:00"},{"id":2272,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"3c3ebd00-b567-4021-8066-af064318d4fd","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e 3c3ebd00-b567-4021-8066-af064318d4fd","gmt_create":"2026-08-07T17:25:09.7814805+08:00","gmt_modified":"2026-08-07T17:25:09.7814805+08:00"},{"id":2273,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"1d6a4cd5-2dbe-41ba-9db3-cb9f7fcb2d79","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e 1d6a4cd5-2dbe-41ba-9db3-cb9f7fcb2d79","gmt_create":"2026-08-07T17:25:09.7814805+08:00","gmt_modified":"2026-08-07T17:25:09.7814805+08:00"},{"id":2274,"source_id":"301311ec-fa49-441d-8f69-bec64740fdd8","target_id":"d1bf1df6-89dc-40ea-9101-793b8c893ae8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 301311ec-fa49-441d-8f69-bec64740fdd8 -\u003e d1bf1df6-89dc-40ea-9101-793b8c893ae8","gmt_create":"2026-08-07T17:25:09.7820194+08:00","gmt_modified":"2026-08-07T17:25:09.7820194+08:00"}],"source_files":[{"id":"9f120716e7b0381e045c66412550d1a9","path":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java","filename":"CrmAppApplication.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"ed816b898bf9d2e8548f1dfd5cdeadbb","path":"crm-app/src/main/resources/application.yml","filename":"application.yml","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"246da6901c21f063ab47e58aaebcdd3c","path":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","filename":"AuthController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"db5d3491fb45251456163d012a823f5d","path":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","filename":"SystemController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"6d19e7c47ad418f3577ff8cfcd56590f","path":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","filename":"SecurityConfig.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"979b533c66100f0a3f79f7542e2b01e0","path":"crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","filename":"PermissionConfig.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"10a536bc357c7840a6eec61b40741915","path":"crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","filename":"JwtAuthenticationFilter.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"720e90c29ddd88a8633c9d31ce443b5e","path":"crm-auth/src/main/java/com/crm/auth/security/TokenService.java","filename":"TokenService.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"9b38bcfac9c3a14d74c16429d22380fd","path":"crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","filename":"AuthLoginUser.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"ef98104ba47dd7d33624e1916c0694cd","path":"crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java","filename":"DataScopeInterceptor.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"d862f2c63fd9e0f48ad1badc1a6d9e1e","path":"crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","filename":"DataScopeTables.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"5725c122fbf467925192bf42403e7787","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java","filename":"AuthServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"b95e6a3c690ffd8ed16d2d4163a5c648","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java","filename":"AuthUserServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"887492aa11700fd0984b91d5fa1cf130","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java","filename":"SysDeptServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"c612f590645fb36de9e13767f1c81a0c","path":"crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java","filename":"DingTalkAuthClient.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"86622c8fa2eab6b1847927d47d77b7fd","path":"crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java","filename":"ThirdPartyAuthClientFactory.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"70a8328bf44d129f9e9f84a552674c0d","path":"crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java","filename":"DataScopeIntegrationTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"450e832ef93367bf62c150db0a3c2257","path":"crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedData.java","filename":"TestOwnedData.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"e6cba19378ad4cca1120a969537c90a1","path":"crm-auth/src/test/java/com/crm/auth/security/scope/TestOwnedDataMapper.java","filename":"TestOwnedDataMapper.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"a0e0e501f0f901ac1f12b089a1bf5f9a","path":"crm-auth/src/test/java/com/crm/auth/service/client/DingTalkAuthClientTest.java","filename":"DingTalkAuthClientTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"ef7f823f436c1c0a09594b106637d202","path":"crm-auth/src/test/java/com/crm/auth/service/client/ThirdPartyAuthClientFactoryTest.java","filename":"ThirdPartyAuthClientFactoryTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"0a944d6947cd45922d3e267c069fee6c","path":"crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java","filename":"AuthServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"e115f2054f8d1d592750cc634e682da8","path":"crm-auth/src/test/java/com/crm/auth/service/impl/AuthUserServiceImplTest.java","filename":"AuthUserServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"93b5379effd73cbce347a8747296d18c","path":"crm-auth/src/test/java/com/crm/auth/service/impl/SysDeptServiceImplTest.java","filename":"SysDeptServiceImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"f204b35859a78f3352a067656ec89482","path":"crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java","filename":"UserListIntegrationTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"219bfc88fc6b98fdc50a57b641262250","path":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","filename":"GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"78f9a7cfb354a1eb9744378aeb898070","path":"crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java","filename":"BusinessErrorException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"552d2164b5a76f113724b37692c9a8ad","path":"crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java","filename":"MissingParameterException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"3d2db44a848dd979c85d02227c0860f1","path":"crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java","filename":"PermissionErrorException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"a769abcb464b3fed3c877eaaa18bb7ea","path":"crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","filename":"ResourceNotExistException.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"fbcc9319095d04d42cae2a4126d632cc","path":"crm-base/src/main/java/com/crm/base/domain/result/Result.java","filename":"Result.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"71737ec08030f7f53dcba1d13a65df12","path":"crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","filename":"ResultCodeEnum.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"839aaee42fad8c788d762040f926c7cf","path":"crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","filename":"PageResult.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"7a809dc905a15b19452162b602354d4f","path":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java","filename":"BaseEntity.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"4df2448146189cb35695461c4efeeef7","path":"crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","filename":"OwnedEntity.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"485d0b6edfad127744af104bc2fccdec","path":"crm-base/src/main/java/com/crm/base/annotation/DataScope.java","filename":"DataScope.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"33650500053c4035f9b41cc603ec7177","path":"crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","filename":"DataScopeHelper.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"7f1c91eeb163925e7598ee1fa3808178","path":"crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","filename":"DataVisibilityContext.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"dc053fd228077fc0cfbe0b6f895efff0","path":"crm-base/src/main/java/com/crm/base/security/LoginUser.java","filename":"LoginUser.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"594e46f4067bf5c53e0e58dd1cb1142f","path":"crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","filename":"SecurityUtils.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"eb157d8b43dd11418aef51259017012c","path":"crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","filename":"DataVisibilityTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"30323def9cb0fe6b260ea6a5e9fa283b","path":"crm-file/src/main/java/com/crm/file/controller/FileController.java","filename":"FileController.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"306688bd02d5e00424c36a8e3f7bf006","path":"crm-file/src/main/java/com/crm/file/service/impl/FileApiImpl.java","filename":"FileApiImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"471daee1ba8d0a0c9d37ea42b9515adb","path":"crm-file/src/main/java/com/crm/file/service/impl/FileInfoServiceImpl.java","filename":"FileInfoServiceImpl.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"08d8600fa4e7cbf52b43b28fefb529ec","path":"crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java","filename":"KkFileViewClient.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"c2b8eb329a711a41ccd21fc07edb2463","path":"crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","filename":"OrphanChunkCleanupTask.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"78a779bf8e042a4c180c7cf6b2f09c30","path":"crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java","filename":"FileApiImplTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"39e025b53656f4fb1e51330f3f63f82f","path":"crm-file/src/test/java/com/crm/file/service/KkFileViewClientTest.java","filename":"KkFileViewClientTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"4ad3caa167521e41d486c8eb3e1d1f09","path":"crm-file/src/test/java/com/crm/file/task/OrphanChunkCleanupTaskTest.java","filename":"OrphanChunkCleanupTaskTest.java","gmt_create":"2026-08-01T11:58:56+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"id":"ec731c3e8b12fffc7e23eb4ecd950b53","path":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java","filename":"AuthApplication.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"070b69737b357c71e8b46fd27e1c4d4b","path":"crm-auth/src/main/resources/application.yml","filename":"application.yml","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"4194d46035c0037d3488ab82e57001ba","path":"crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","filename":"DataInitializer.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"086d66e96aa620aca8a7c9d337100360","path":"crm-auth/src/main/java/com/crm/auth/constant/AuthConstants.java","filename":"AuthConstants.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8e967137fd04208873ef2894951b2b3d","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","filename":"AuthIdentity.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"91569422a8bc25dfd346718b1de8212c","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","filename":"AuthUser.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"e1f225cc9efe7384e97ee284b89eabc0","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java","filename":"SysDept.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"26cb8256b5c728bdc24b532313d3a166","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java","filename":"SysMenu.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"5da86b8d801192fd63ea6aa57b666057","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java","filename":"SysRole.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"20f7693b186c4e003d04031dafd605b5","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java","filename":"SysRoleMenu.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8fa19465d23be26b999639add960b23d","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","filename":"SysUserDept.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"aea6b84411302cc9a5fbcaf774ac6a29","path":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","filename":"SysUserRole.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"5be8fe765c8b4c953e524cdf749f440b","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","filename":"DataScopeEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"0e509081560573445a0dd02e946dbf30","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","filename":"IdentityTypeEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"cd95faea5a74ee3ae09964119cdb6716","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","filename":"MenuTypeEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"0b3ed971f0f095d6e203ddde717574e9","path":"crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","filename":"LoginParam.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"58507cf1cc358b2da45575d16c857d87","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java","filename":"LoginResultDTO.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8cac10327042dbf538d05120f601aa48","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","filename":"UserInfoDTO.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"d9ade6309a688b79e49a87c991d5af6c","path":"crm-auth/src/main/java/com/crm/auth/mapper/AuthIdentityMapper.java","filename":"AuthIdentityMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"283041ef298919fe536ac20fad579c0a","path":"crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","filename":"AuthUserMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"aab51a092e42f86e794b23b95107cba3","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysDeptMapper.java","filename":"SysDeptMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"d9d6f5b3e8856fa6995fdc7ed74c6382","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysMenuMapper.java","filename":"SysMenuMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"38d9b83ff8f46a8113aa787616b2f802","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMapper.java","filename":"SysRoleMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"eb41d1eb6dbcb66d966ca3b557af45d3","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysRoleMenuMapper.java","filename":"SysRoleMenuMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"28e5eef69286d763453cf31a32070685","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysUserDeptMapper.java","filename":"SysUserDeptMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"30ac7fd632012faca8156feaa071ff46","path":"crm-auth/src/main/java/com/crm/auth/mapper/SysUserRoleMapper.java","filename":"SysUserRoleMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"03278a0623db482aec43e508d1268208","path":"crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java","filename":"SecurityExceptionHandlers.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"21067ee0ba0180f2b8514173343f7b0d","path":"crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java","filename":"ThirdPartyAuthClient.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"b60764213680af3c984d82f4146db2df","path":"crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","filename":"ThirdPartyUserInfo.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"7179946069c5d0654ca49cca77eaaedb","path":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthIdentityServiceImpl.java","filename":"AuthIdentityServiceImpl.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"f9926a70a628c5e92f0d239030b13f71","path":"crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java","filename":"PermissionServiceImpl.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"ad239f5e0129b57722497e4051492302","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java","filename":"SysMenuServiceImpl.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"435000e19b9da20904d5764f4f2352c5","path":"crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java","filename":"SysRoleServiceImpl.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"5b91363610bf599cc013882938cf595a","path":"crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","filename":"DeptTreeCache.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"13f3009ef2305ed0a42d5528886e20bb","path":"crm-auth/src/main/java/com/crm/auth/service/IAuthIdentityService.java","filename":"IAuthIdentityService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"cff6e76ddd2bdf3e405ed171c279d307","path":"crm-auth/src/main/java/com/crm/auth/service/IAuthService.java","filename":"IAuthService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"47982a158ab256486f73c409c57d16fb","path":"crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java","filename":"IAuthUserService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"3259a2ba7196998a24118782cceeecee","path":"crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java","filename":"ISysMenuService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8a7bb9534d7381df886b1a476664b902","path":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java","filename":"ISysRoleService.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"949d7f85b20c96ff625551608a0a3453","path":"crm-base/src/main/java/com/crm/base/config/CorsConfig.java","filename":"CorsConfig.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"624d3c748c2d1b470b26409fbb19c4d3","path":"crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","filename":"CrmSqlInjector.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"5fcea73039602b38183b915b5b7efc58","path":"crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","filename":"CustomIdGenerator.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"ae79ce740680fd6655ac6de67b002373","path":"crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","filename":"MetaObjectFillHandler.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"4d7cd4ecb0ac6a08ab02c260a8558b2c","path":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","filename":"MybatisPlusConfig.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8f361aaf831f559241b15bd521ea5cd1","path":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java","filename":"RedisConfig.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"3204c0be957891dd9b878beed284f4a4","path":"crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","filename":"ScheduledTaskProperties.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"8fd30f11d13534f235ad5b9fc9490d81","path":"crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java","filename":"SnowflakeIdWorker.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"2b45935169fba417d684e0abc8328c9f","path":"crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","filename":"SnowflakeProperties.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"45f8c9e51de204a6ce44b7b414bf967f","path":"crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","filename":"HasValueEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"b085262ba4ef8a02893410a0018a27ff","path":"crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","filename":"StatusEnum.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"c4daef7910e2cd6aaaae07759d897d03","path":"crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java","filename":"CrmBaseMapper.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"9618beabcede2e839e6dedf9121f30d7","path":"crm-base/src/main/java/com/crm/base/security/DataOwnership.java","filename":"DataOwnership.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"3c80766c0fa9dab148e4f57f2843c3fb","path":"crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","filename":"DataScopeLevel.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"7421afce22638e3b1ee9594dcf7236bb","path":"crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java","filename":"ExcelUtil.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"53e5a23ce2cd9f508b08b6e1eb290542","path":"crm-base/src/main/java/com/crm/base/utils/TreeUtils.java","filename":"TreeUtils.java","gmt_create":"2026-08-01T11:59:11+08:00","gmt_modified":"2026-08-01T11:59:11+08:00"},{"id":"2d521e834dd3215c45e67ea660ea37d6","path":"crm-base/src/main/java/com/crm/config/CrmSqlInjector.java","filename":"CrmSqlInjector.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"88ddb7568e428a630b28d5be85d8b98b","path":"crm-base/src/main/java/com/crm/config/MybatisPlusConfig.java","filename":"MybatisPlusConfig.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"a03716c4989d9bdbacbbf1b52dcfad7c","path":"crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java","filename":"UserPageParam.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"7d20c7c0818f8352b50774e1cac53e35","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java","filename":"UserListDTO.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"08e1158e0e21c1d7974fd49513e51f18","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java","filename":"UserStatsVO.java","gmt_create":"2026-08-01T11:59:25+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"id":"443f0876cabdd9ad127e648149869761","path":"crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","filename":"AuthProperties.java","gmt_create":"2026-08-01T12:29:27+08:00","gmt_modified":"2026-08-01T12:29:27+08:00"},{"id":"0951805a35c8cf0d998263dfed532ebe","path":"crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java","filename":"ISysDeptService.java","gmt_create":"2026-08-01T12:29:27+08:00","gmt_modified":"2026-08-01T12:29:27+08:00"},{"id":"b1a16c73af31999d323930a2c4167a74","path":"pom.xml","filename":"pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"fdbf8ef6fe6c3e0273244b9efa4f4563","path":"crm-auth/pom.xml","filename":"pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"44756b6ca3948002965adbdf75e287e4","path":"crm-base/pom.xml","filename":"pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"4645e05fc44e0cd3f1efadca1d825a88","path":"crm-file/pom.xml","filename":"pom.xml","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"4e86e9e389b4b08fe8963d3cf346bef6","path":"crm-file/src/test/java/com/crm/file/task/Or orphanChunkCleanupTaskTest.java","filename":"Or orphanChunkCleanupTaskTest.java","gmt_create":"2026-08-01T12:30:44+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"id":"01c3b61921ce0cdb4028d7335ad82908","path":"crm-file/src/main/java/com/crm/file/api/FileApi.java","filename":"FileApi.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":"dd4e6c7873de5b24deefcc3d24077825","path":"crm-file/src/main/java/com/crm/file/config/MinioConfig.java","filename":"MinioConfig.java","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":"de4842c7b9763f7398ef2c3dec53465d","path":"docs/adr/0009-sso-reuses-scan-login-endpoint.md","filename":"0009-sso-reuses-scan-login-endpoint.md","gmt_create":"2026-08-03T19:27:26+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"id":"5368e7e708ac910d97280b3bcf8d2fea","path":"crm-file/src/main/java/com/crm/file/config/FileProperties.java","filename":"FileProperties.java","gmt_create":"2026-08-03T19:55:41+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"id":"f648b675f6acc57fd1e4fe32e9a205c4","path":"crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java","filename":"MenuType.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":"d63e53ca9d76d8f81dd89d981569d9f3","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java","filename":"ResourceNode.java","gmt_create":"2026-08-04T09:27:03+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"id":"197b55f1b7d7d1be28b124897acfa1eb","path":"crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java","filename":"ResourceController.java","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"145452b72cda2735ac97a690f2b5cbd9","path":"crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java","filename":"ResourceServiceImpl.java","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"e42a3afd007bd414adca430109ffa7f2","path":"crm-auth/src/main/java/com/crm/auth/service/IResourceService.java","filename":"IResourceService.java","gmt_create":"2026-08-04T09:56:41+08:00","gmt_modified":"2026-08-04T09:56:41+08:00"},{"id":"4b325dd0ffe965ccff6bc2e8acc431d6","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolver.java","filename":"PermissionResolver.java","gmt_create":"2026-08-04T17:13:27.2397445+08:00","gmt_modified":"2026-08-04T17:13:27.2397445+08:00"},{"id":"74123de2770c04a2d8a4787f177714fc","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionGrant.java","filename":"PermissionGrant.java","gmt_create":"2026-08-04T17:13:27.240741+08:00","gmt_modified":"2026-08-04T17:13:27.240741+08:00"},{"id":"46bb7615dec0d0825cbcc4b846b93bf6","path":"crm-auth/src/main/java/com/crm/auth/security/PermissionResolverImpl.java","filename":"PermissionResolverImpl.java","gmt_create":"2026-08-04T17:13:27.240741+08:00","gmt_modified":"2026-08-04T17:13:27.240741+08:00"},{"id":"2467957f6e01fd8cb020680dae20873c","path":"crm-base/src/main/java/com/crm/base/security/DataVisibility.java","filename":"DataVisibility.java","gmt_create":"2026-08-04T17:13:32.1231745+08:00","gmt_modified":"2026-08-04T17:13:32.1231745+08:00"},{"id":"43e90eb333a5285a72ef91c378ede1da","path":"crm-base/src/main/java/com/crm/base/security/VisibilityScope.java","filename":"VisibilityScope.java","gmt_create":"2026-08-04T17:15:13.3081208+08:00","gmt_modified":"2026-08-04T17:15:13.3081208+08:00"},{"id":"4bbbc2f3c27f80699526357490785390","path":"crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","filename":"BaseServiceImpl.java","gmt_create":"2026-08-04T17:44:06.539696+08:00","gmt_modified":"2026-08-04T17:44:06.539696+08:00"},{"id":"206da08c92480415f9750a64c534d171","path":"crm-base/src/main/java/com/crm/base/service/IBaseService.java","filename":"IBaseService.java","gmt_create":"2026-08-04T17:44:06.539696+08:00","gmt_modified":"2026-08-04T17:44:06.539696+08:00"},{"id":"3d68f400d8919945b4f8a1aff4375e39","path":"crm-auth/src/main/java/com/crm/auth/config/WebMvcConfig.java","filename":"WebMvcConfig.java","gmt_create":"2026-08-04T17:44:30.7463213+08:00","gmt_modified":"2026-08-04T17:44:30.7463213+08:00"},{"id":"46667b5e631f28a6dd940cfc171debf2","path":"crm-auth/src/main/java/com/crm/auth/security/ApiPermissionInterceptor.java","filename":"ApiPermissionInterceptor.java","gmt_create":"2026-08-04T17:44:30.7463213+08:00","gmt_modified":"2026-08-04T17:44:30.7463213+08:00"},{"id":"91ab5af5f40c9f910746f8c5c7825100","path":"crm-auth/src/main/java/com/crm/auth/security/ApiPermissionCache.java","filename":"ApiPermissionCache.java","gmt_create":"2026-08-04T17:44:30.7468396+08:00","gmt_modified":"2026-08-04T17:44:30.7468396+08:00"},{"id":"1c8f46373fde157638a9331bc5ac12f1","path":"crm-auth/src/main/java/com/crm/auth/security/ApiPermissionRule.java","filename":"ApiPermissionRule.java","gmt_create":"2026-08-04T17:44:30.7468396+08:00","gmt_modified":"2026-08-04T17:44:30.7468396+08:00"},{"id":"34e7e1e31cc014e8ab3104acc807cc73","path":"crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java","filename":"BaseDTO.java","gmt_create":"2026-08-04T17:45:24.5938872+08:00","gmt_modified":"2026-08-04T17:45:24.5938872+08:00"},{"id":"f77483962ff198e16f41554c6e1ceb39","path":"crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java","filename":"BaseParam.java","gmt_create":"2026-08-04T17:45:24.5944029+08:00","gmt_modified":"2026-08-04T17:45:24.5944029+08:00"},{"id":"0515f235f6ec8e32043a3b870d857764","path":"crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java","filename":"BeanCopyUtils.java","gmt_create":"2026-08-04T17:45:24.5944029+08:00","gmt_modified":"2026-08-04T17:45:24.5944029+08:00"},{"id":"7f4bc54539c21a1d994bbbabe2868f2e","path":"crm-base/src/main/java/com/crm/base/utils/PageConverter.java","filename":"PageConverter.java","gmt_create":"2026-08-04T17:45:24.5944029+08:00","gmt_modified":"2026-08-04T17:45:24.5944029+08:00"},{"id":"83821a36e4f3e52f5bffc50e24952e99","path":"crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","filename":"AssertUtils.java","gmt_create":"2026-08-04T17:45:24.5944029+08:00","gmt_modified":"2026-08-04T17:45:24.5944029+08:00"},{"id":"443c00696b8cf69bb4c73995c949f40d","path":"crm-auth/src/main/java/com/crm/auth/controller/RoleController.java","filename":"RoleController.java","gmt_create":"2026-08-05T12:14:36.7036697+08:00","gmt_modified":"2026-08-05T12:14:36.7036697+08:00"},{"id":"34070e2c4487d700b9aae2fc036dcced","path":"crm-auth/src/main/java/com/crm/auth/domain/dto/RoleDetailVO.java","filename":"RoleDetailVO.java","gmt_create":"2026-08-05T12:14:36.7041863+08:00","gmt_modified":"2026-08-05T12:14:36.7041863+08:00"},{"id":"fa2f5e7042497a395c2626391ec0d7bf","path":"crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","filename":"FileInfo.java","gmt_create":"2026-08-05T12:14:36.7052626+08:00","gmt_modified":"2026-08-05T12:14:36.7052626+08:00"},{"id":"2d0aeb7dc1271c1eb9f22f52a9210b28","path":"crm-file/src/main/java/com/crm/file/service/IFileInfoService.java","filename":"IFileInfoService.java","gmt_create":"2026-08-05T12:14:36.7062075+08:00","gmt_modified":"2026-08-05T12:14:36.7062075+08:00"},{"id":"db36768510c04fba9ecddbaac9538997","path":"crm-auth/src/main/java/com/crm/auth/service/ISysDept.java","filename":"ISysDept.java","gmt_create":"2026-08-05T14:15:15.0833985+08:00","gmt_modified":"2026-08-05T14:15:15.0833985+08:00"},{"id":"ebcc9c2bbb50f1c9b34c399e554d5c61","path":"crm-base/src/main/java/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.java","filename":"InsertBatchOnDuplicateKeyUpdate.java","gmt_create":"2026-08-05T14:16:09.5993054+08:00","gmt_modified":"2026-08-05T14:16:09.5993054+08:00"},{"id":"032a64276c297276c1a743877fd3086f","path":"crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","filename":"SchedulingConfig.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"df88d216bc772cff7dedfeb1ee77b392","path":"crm-file/src/main/java/com/crm/file/task/ThumbnailGenerationTask.java","filename":"ThumbnailGenerationTask.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"6c7e732b9b7d9557326bf4129d3cc1a8","path":"crm-file/src/main/java/com/crm/file/service/ThumbnailPlaceholderService.java","filename":"ThumbnailPlaceholderService.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"39eb78d63159d9752bb2b5c51cb36866","path":"crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java","filename":"FileInfoMapper.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"f1fb4816e6ea250dab4117110b6cb9a2","path":"crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","filename":"MultipartInitDTO.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"b166619a987530bfae4a50d01196ad16","path":"crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java","filename":"UploadSession.java","gmt_create":"2026-08-06T08:43:51.2514267+08:00","gmt_modified":"2026-08-06T08:43:51.2514267+08:00"},{"id":"963b51c629dc6ac069aa76e8963c1a6d","path":"crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java","filename":"FileDownloadDTO.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":"3e34beaab2157554f2a1794a32270ffa","path":"crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java","filename":"FileInfoDTO.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":"dba429cae1157a0f17c39a61bf895a0c","path":"crm-file/src/main/java/com/crm/file/domain/dto/ThumbnailDTO.java","filename":"ThumbnailDTO.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":"a4a6b77c65782566cccb77704b57621a","path":"crm-file/src/main/java/com/crm/file/constant/FileConstants.java","filename":"FileConstants.java","gmt_create":"2026-08-06T08:43:51.2524251+08:00","gmt_modified":"2026-08-06T08:43:51.2524251+08:00"},{"id":"cbd7e122df81b379d68096c9ad0d1bc5","path":"crm-file/src/main/java/com/crm/file/task/ThumbnailRetryTask.java","filename":"ThumbnailRetryTask.java","gmt_create":"2026-08-06T08:43:59.3565686+08:00","gmt_modified":"2026-08-06T08:43:59.3565686+08:00"},{"id":"8e7d2facecaa43d7d0a62897ce6852b8","path":"crm-file/src/main/java/com/crm/file/service/ThumbnailRenderer.java","filename":"ThumbnailRenderer.java","gmt_create":"2026-08-06T08:43:59.3570943+08:00","gmt_modified":"2026-08-06T08:43:59.3570943+08:00"},{"id":"8725216d36747b23e1900d0a80a2e566","path":"crm-file/src/main/java/com/crm/file/service/impl/ImageThumbnailRenderer.java","filename":"ImageThumbnailRenderer.java","gmt_create":"2026-08-06T08:43:59.3570943+08:00","gmt_modified":"2026-08-06T08:43:59.3570943+08:00"},{"id":"c54126cf8c967b28247c04987c23f7dd","path":"crm-file/src/main/java/com/crm/file/service/impl/PdfThumbnailRenderer.java","filename":"PdfThumbnailRenderer.java","gmt_create":"2026-08-06T08:44:04.621214+08:00","gmt_modified":"2026-08-06T08:44:04.621214+08:00"},{"id":"585450a9f743134860e41875c7125ee3","path":"crm-file/src/main/java/com/crm/file/service/impl/OfficeThumbnailRenderer.java","filename":"OfficeThumbnailRenderer.java","gmt_create":"2026-08-06T08:44:04.621214+08:00","gmt_modified":"2026-08-06T08:44:04.621214+08:00"},{"id":"ab9df9e51b9c174974fc980a7b75a934","path":"crm-file/src/main/java/com/crm/file/service/impl/ThumbnailImageUtils.java","filename":"ThumbnailImageUtils.java","gmt_create":"2026-08-06T08:44:04.621214+08:00","gmt_modified":"2026-08-06T08:44:04.621214+08:00"},{"id":"d323c1b254a4bb5e5cafd99a1b05a181","path":"crm-app/pom.xml","filename":"pom.xml","gmt_create":"2026-08-06T19:44:26.7071955+08:00","gmt_modified":"2026-08-06T19:44:26.7071955+08:00"},{"id":"d318bb4ad97a34f01840e5503502e6b4","path":"Dockerfile","filename":"Dockerfile","gmt_create":"2026-08-06T19:44:26.7081922+08:00","gmt_modified":"2026-08-06T19:44:26.7081922+08:00"},{"id":"47475a382ffa5fe204e1150226d92971","path":"docker-compose.yml","filename":"docker-compose.yml","gmt_create":"2026-08-06T19:44:26.7081922+08:00","gmt_modified":"2026-08-06T19:44:26.7081922+08:00"},{"id":"3885b6ce09ed80ae3b64b97472b974e7","path":".dockerignore","filename":".dockerignore","gmt_create":"2026-08-06T19:44:26.7081922+08:00","gmt_modified":"2026-08-06T19:44:26.7081922+08:00"},{"id":"b96e62e8abf266ff71854b7cc4d89a84","path":"settings.xml","filename":"settings.xml","gmt_create":"2026-08-06T19:44:26.7081922+08:00","gmt_modified":"2026-08-06T19:44:26.7081922+08:00"},{"id":"8f9d287ac54c058022a9803c7f84937e","path":"crm-app/src/main/resources/application-verify.yml","filename":"application-verify.yml","gmt_create":"2026-08-06T19:44:26.7091877+08:00","gmt_modified":"2026-08-06T19:44:26.7091877+08:00"},{"id":"1e30fd946317cf4ca3d53f1ca7e05c0b","path":"crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","filename":"Knife4jConfig.java","gmt_create":"2026-08-06T19:44:26.7091877+08:00","gmt_modified":"2026-08-06T19:44:26.7091877+08:00"},{"id":"4ce88988ec3d606d1c2378b87b2bf5e8","path":"docs/deploy-verify.md","filename":"deploy-verify.md","gmt_create":"2026-08-06T19:44:26.7151712+08:00","gmt_modified":"2026-08-06T19:44:26.7151712+08:00"},{"id":"8dcd729e9a78010df52450fe62cc67b2","path":"crm-base/src/main/java/com/crm/base/constant/CommonConstants.java","filename":"CommonConstants.java","gmt_create":"2026-08-06T19:44:39.2368576+08:00","gmt_modified":"2026-08-06T19:44:39.2368576+08:00"},{"id":"3c0d2201fb5a98ad1624e8361edfcfe5","path":"crm-base/src/main/java/com/crm/base/config/JacksonConfig.java","filename":"JacksonConfig.java","gmt_create":"2026-08-06T19:46:05.1162562+08:00","gmt_modified":"2026-08-06T19:46:05.1162562+08:00"},{"id":"2425ec25703c7bb507c60f1a925ed240","path":"crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java","filename":"DebugTokenController.java","gmt_create":"2026-08-06T19:46:47.1049235+08:00","gmt_modified":"2026-08-06T19:46:47.1049235+08:00"},{"id":"3a8892389711d1a68ff854bc23bc39c2","path":"crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java","filename":"TraceIdFilter.java","gmt_create":"2026-08-06T19:46:47.1069968+08:00","gmt_modified":"2026-08-06T19:46:47.1069968+08:00"},{"id":"95896bcd7ccff7717a67f499bc3bbc03","path":"crm-base/src/main/java/com/crm/base/utils/EnumUtils.java","filename":"EnumUtils.java","gmt_create":"2026-08-06T19:46:47.107509+08:00","gmt_modified":"2026-08-06T19:46:47.107509+08:00"},{"id":"7c89e571969f40758206506fdf19649f","path":"crm-base/src/main/java/com/crm/base/utils/ServletUtils.java","filename":"ServletUtils.java","gmt_create":"2026-08-06T19:46:47.107509+08:00","gmt_modified":"2026-08-06T19:46:47.107509+08:00"},{"id":"4d9ba6516d682ae0d75676ebe8b3d118","path":"crm-dict/src/main/java/com/crm/dict/service/impl/DictGroupServiceImpl.java","filename":"DictGroupServiceImpl.java","gmt_create":"2026-08-07T15:23:51.7895387+08:00","gmt_modified":"2026-08-07T15:23:51.7895387+08:00"},{"id":"b5ced4a5ec4685afbabb7ac340a1010a","path":"crm-dict/src/main/java/com/crm/dict/service/impl/DictItemServiceImpl.java","filename":"DictItemServiceImpl.java","gmt_create":"2026-08-07T15:23:51.7895387+08:00","gmt_modified":"2026-08-07T15:23:51.7895387+08:00"},{"id":"262ad7f27823a16099125e62373c7fc2","path":"crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroup.java","filename":"DictGroup.java","gmt_create":"2026-08-07T15:24:27.9080699+08:00","gmt_modified":"2026-08-07T15:24:27.9080699+08:00"},{"id":"8fc93fc883e250086f6f35de5f1fd26b","path":"crm-dict/src/main/java/com/crm/dict/domain/entity/DictItem.java","filename":"DictItem.java","gmt_create":"2026-08-07T15:24:27.9085912+08:00","gmt_modified":"2026-08-07T15:24:27.9085912+08:00"},{"id":"d09d393c97b1a9f442ffcd96d76bf89d","path":"crm-dict/src/main/java/com/crm/dict/domain/entity/DictGroupDefault.java","filename":"DictGroupDefault.java","gmt_create":"2026-08-07T15:24:27.9085912+08:00","gmt_modified":"2026-08-07T15:24:27.9085912+08:00"},{"id":"f77a6f6465d4891367dc467bafb0a0ab","path":"crm-dict/src/main/java/com/crm/dict/domain/entity/DictRefCount.java","filename":"DictRefCount.java","gmt_create":"2026-08-07T15:24:27.9085912+08:00","gmt_modified":"2026-08-07T15:24:27.9085912+08:00"},{"id":"caa60b8886f14281b8a88b8143ab2d9f","path":"crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java","filename":"DictGroupController.java","gmt_create":"2026-08-07T15:24:27.9085912+08:00","gmt_modified":"2026-08-07T15:24:27.9085912+08:00"},{"id":"8effb699cbe0e46042e92c9150da411f","path":"crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java","filename":"DictItemController.java","gmt_create":"2026-08-07T15:24:27.9091116+08:00","gmt_modified":"2026-08-07T15:24:27.9091116+08:00"},{"id":"85b9fe2ececb9deea46debaff90a8cfb","path":"crm-dict/src/main/java/com/crm/dict/service/IDictGroupService.java","filename":"IDictGroupService.java","gmt_create":"2026-08-07T15:24:27.9091116+08:00","gmt_modified":"2026-08-07T15:24:27.9091116+08:00"},{"id":"43c96e6280e2cdae70079cfd103dcc54","path":"crm-dict/src/main/java/com/crm/dict/service/IDictItemService.java","filename":"IDictItemService.java","gmt_create":"2026-08-07T15:24:27.9091116+08:00","gmt_modified":"2026-08-07T15:24:27.9091116+08:00"},{"id":"ef4985e16b40320d472cb841e82c7240","path":"crm-dict/src/main/java/com/crm/dict/config/DictDataInitializer.java","filename":"DictDataInitializer.java","gmt_create":"2026-08-07T15:24:27.9091116+08:00","gmt_modified":"2026-08-07T15:24:27.9091116+08:00"},{"id":"f12e5c31866079b530411bd27b26239d","path":"crm-dict/src/main/java/com/crm/dict/config/DictPermissionInitializer.java","filename":"DictPermissionInitializer.java","gmt_create":"2026-08-07T15:24:27.9091116+08:00","gmt_modified":"2026-08-07T15:24:27.9091116+08:00"},{"id":"e38582646a741d83e9dc13bd171df11a","path":"crm-dict/src/main/java/com/crm/dict/constant/DictConstants.java","filename":"DictConstants.java","gmt_create":"2026-08-07T15:24:27.9096603+08:00","gmt_modified":"2026-08-07T15:24:27.9096603+08:00"},{"id":"8243e1e6c5bc1f9308e926431849764c","path":"crm-dict/pom.xml","filename":"pom.xml","gmt_create":"2026-08-07T15:24:43.4338781+08:00","gmt_modified":"2026-08-07T15:24:43.4338781+08:00"},{"id":"682f909c69822ef576d6ffc5956c6a2c","path":"crm-dict/CONTEXT.md","filename":"CONTEXT.md","gmt_create":"2026-08-07T15:24:43.4338781+08:00","gmt_modified":"2026-08-07T15:24:43.4338781+08:00"},{"id":"8ba71b105efa081c1e350d57fee00d4f","path":"crm-dict/src/main/java/com/crm/dict/service/DictQueryService.java","filename":"DictQueryService.java","gmt_create":"2026-08-07T15:24:43.4338781+08:00","gmt_modified":"2026-08-07T15:24:43.4338781+08:00"},{"id":"90b5c4729568126e07baa5836e6d7df9","path":"crm-dict/src/main/java/com/crm/dict/domain/dto/DictGroupVO.java","filename":"DictGroupVO.java","gmt_create":"2026-08-07T17:24:18.4609716+08:00","gmt_modified":"2026-08-07T17:24:18.4609716+08:00"},{"id":"3c078aac85d9263365ff2b9e1ca7c801","path":"crm-dict/src/main/java/com/crm/dict/domain/dto/DictItemVO.java","filename":"DictItemVO.java","gmt_create":"2026-08-07T17:24:18.4609716+08:00","gmt_modified":"2026-08-07T17:24:18.4609716+08:00"},{"id":"126ced157e151b5685ddcdb461416d99","path":"crm-dict/src/main/java/com/crm/dict/DictApplication.java","filename":"DictApplication.java","gmt_create":"2026-08-07T17:25:08.9370862+08:00","gmt_modified":"2026-08-07T17:25:08.9370862+08:00"}],"wiki_catalogs":[{"id":"673ed306-0e91-4381-a45f-07865c6c3582","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"项目概览","description":"project-overview","prompt":"为CRM后端项目创建全面的概览文档。详细介绍项目的整体架构、技术栈选择、模块划分和核心功能。解释微服务架构设计,包括认证服务(crm-auth)、基础框架(crm-base)、文件服务(crm-file)等模块的职责和相互关系。说明项目的启动方式、配置管理和部署架构。为初学者提供清晰的项目理解路径,同时为有经验的开发者提供深入的技术细节。使用与代码库一致的术语,包含实际的使用示例和架构图表。","progress_status":"completed","dependent_files":"pom.xml,crm-app/src/main/java/com/crm/app/CrmAppApplication.java,crm-app/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:25:32+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02eMuUR943AbMM5Fsw0cjdvnsogyxu+GQaWvGJsNYYuxs9uqt6bv6Rad5yNFnQxqc/zcIAP4Z0vNddCsfGTlXUyz4MfN8yC2qjjb2vWYfPJ83LP/X6bNolUatkvylP4TS35fJXDNkvWDIHqdQhK7dQvJSUrKHBER1noS0MMe6uXvQOmmJm86sdA3FA524PS3sSPb610ftofNfHuy/sCdmX4SP49Vv1IfvsiEvBMuWJiOr70mPYEsfSFLlAarlpsbd0N1xYumBEu1xpWT7/4eFeopti/y4M/GLZoxAni69Rl8dNyTEl96ona6fuMnCjgPHme8MpBkqiO42qtnWXVIcOjpWJ7c+Wl37wrj3M+SJMuvHSOgL4un0eZr7xfAGfo04uikN7pbCBqJNPpqehuAx3APEQ6SUECPKidl2hYMoiPhe01fQwrC18s68QaBxSgdl4DMhV7wNL9V5Hqtjf76jxUb9whCs+DZVS0UmaKaSQriLgqg+nbkQojCGZtCDY2gg9aC1qSkjjEYuPi/1PvGa2ayFq2UKlTUZ758WfGf3kH6AQG63vSpF/Wj6ZwJQMffKofUfp/Ipdt8FyEqbbYgZq7Kg4dBgXBN56RiLIDOW+fIj0Y+zhQ+d5TnmoPZ2ncTIMec+0uzKycSKlP6vhfexN4WBdSK4Ur2S6PRsxIr6S+r9OJqYSG3v0G01iVDV02o12zZx/rRcno1kg5OAANu/J0kWAvCfOoAP4uXTra9lh2tPy3p26QngElNJrUYg7zLVR6DD01P92EEfmOMbTL8iNGqM6q7m4bHPoVZcdfDxaRZ4kSAZcuNmhVLsdStF54hUYMI8DctKo6TlNzQT9IVe22Nhc0saP0tecL0YPVlOjF/1eKn2Wv+0c8EYnqXwNYw3YShm8nwLQtSwItR3+AtEugXAgCuCaSSj6zaJU7l2lbwV+H2V9wb+JSVx7+GbQEXnInPKJtVANrPBpp+AjBExPw6FfeSHsMwiYJyZqBCnChsP2jmEg4V3DIHhGJI6YDWuUgWuX/g0rcHhWAzzmOSbjxv2+v0XCS+zTr+MNQ8NUp+ZV1bd858SG7Mf0J23WWAoD0bUrLIlmObRGf7ffMiwCcTK357WyVJet69E9AiHsc51zLpMMFPgPGCnR/Mczo6EX5jqkNI9sq4KAlfS8Wz26yAutxbJuWU6eRDMLb8FJq0B2LTCURD254bxWg6z0Dasg9sGigcN0bSKnblYDbiJsPTnWqwYrI8YRyIBVzsTIYxlTvtapI/BcJI0Docu3dDGClVjYzIvxk8ASQgHUzuLOye"},{"id":"d882e07a-3f3b-4d7b-86f3-fa46c56cc817","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"架构设计","description":"architecture-design","prompt":"为CRM后端项目创建详细的架构设计文档。深入解释微服务架构的整体设计,包括认证服务(crm-auth)、基础框架(crm-base)、文件服务(crm-file)等核心模块的架构模式。详细说明各模块间的通信机制、数据流向和依赖关系。阐述分层架构设计,包括Controller层、Service层、Mapper层的职责划分。解释安全架构,包括JWT认证、权限控制、数据权限隔离等安全机制。说明缓存策略、数据库访问模式和事务管理。包含系统边界定义、组件交互图和部署拓扑图。为开发者提供清晰的架构理解路径和技术决策背景。","parent_id":"673ed306-0e91-4381-a45f-07865c6c3582","progress_status":"completed","dependent_files":"pom.xml,crm-app/src/main/java/com/crm/app/CrmAppApplication.java,crm-auth/src/main/java/com/crm/auth/AuthApplication.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:30:47+08:00","raw_data":"WikiEncrypted:EPw1VhZSv2AMLpYzHbCG5QXmatSKh1iukhkKRz99kcVPFHJKZVqOFStJHt5slSqzsunLJoqpKyeDoj/jTKKfGYkVeSD5qRDxr0g7O1UVdh+o5o+NYUhb7THIgGi7yxWUJXLy/nO13rYHpF8mYa2R5oKpql6wft24x3YHabhNJ20VIPpg1UqAGUTcVnw0LrPXwo0EBWslqFeLtF1ZuJfME3e7x+2EhR2Y1d7YwoPH3lfu0FhIjQHyH+y8s7zB9xI80tkx31028PZAt9eL2qURHMQ4UYJfj3oln+1aSJPbSDv5U3nHoKfdDZeLwwVWO8zzP7hVa/2pxfaSLDeEGNnJqnZg5xHfNpRFT6r8xg7wdbsr67Zths5+Vcd48iAivNOlDfjK9m+gN+DnBiyhSBacX8/UCMci9p4pqHqWFzyy28yESwyElOL5CRYhCCh7VDcO0zuQP4e0yGysRdWvAOuT8eDGCq3AJdkQIG6dXOEC8t7DXIgif3sFVv6xKrXQYm6y8JHPhDFxVKSY6e+1LsahYfZ8gf9EcZEPF0jqbovImvj0Er5Y522gjkuIiRuw4BrDHrnVm8LTPobnpfQK8zbNFhQU4F9GG2nymenxIK6+VliEc7VCUWc3QFIkmvebCTb6gnENEtWHlKoztJRd9acXhSGarTM6uK4G7rUzLemnBssmHy81jOswrgwnoAbfrwVVP63zCViBkERbYBlPAoywzLHPzB76z7O2oXC5Gm3DJcY5wK2G6Ke1ADGR6dkP9F8Pdqb72kDY0IzWaV7GYjkA8vS50JB9Keb11aI0HyjlAup9SLiwASIg675hxcNWmpSFOrp0zP52vwgfZxfraZmxFpGOP4owGqS5RdD/KSblDkYwgJlm9i/PiqszeR5YOLGnIAvFxtwO2UaIQCH+9kIWVyAFH6ag6pNazQW+52eu2+57+MzRj8Vfxw/w1MWaD4d5+Oi+1CnTW0sK0kvqu9vzOkDaXNPVmDC77bHcC+g/fR7eHQfHWjYiyNdRwlo8h0eRNgF17vzfZjlf3LRJhidGrxDwXMxuHIWdmK83ntUTyaO7slA0A6SUD7clisce/O1XCrzUgCPKY71jkN22zx7BuWo4jxF+HdFbBHyo3SucQEQoLvfPSRxN4ntGofwMaSdYO594STF65kcvnj3OMJhbC/kXatTnBsYUlJ4PwomzTlBXPcOzDjmtpJc4BMZpQ7u4SsSYYbDGPO93lGiKpAWwl7p3T2XorjaiNm7juik/rXFTGY34qXTcaVNhyzi+Z/dVsBXvFzKmIOxANZSHj0wWCEOXy0MeFQLbpG60G+NqPsDotsgl0A6WxvyIxwu0tK4ziN3G+gYOQmqJ6J/nkc5B17FMKNo8sal6pNP9B3K6etcL5LqGi/p0PVNydQf4H8eetAZ2nuPiFDVDY0PFAs6WecwtOFq6WWTMKM6NlHd545XDG4jO/+pvkZKLyzlgT/66zDVZv1bSHMo0pkAnQ9G0ZC3zy2PHle46N7sMJx0mmZH5lmQce6qcS8fxdWGqa3BMvdoOb2/L0/d+L6tAWX3h/tt7zR32LIOqw+LXPeJibEbRuMfuO3BFwiO/oG6aNKfC","layer_level":1},{"id":"c72fcb57-495e-4c32-b5c2-159484464f6b","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"整体架构模式","description":"overall-architecture","prompt":"创建CRM系统的整体架构模式文档。详细描述微服务架构设计、模块划分原则、服务间通信机制。解释Maven多模块项目的组织结构,包括crm-app(应用入口)、crm-auth(认证服务)、crm-base(基础框架)、crm-file(文件服务)等模块的职责和依赖关系。说明Spring Boot应用的启动流程、组件扫描机制和服务发现模式。包含架构图展示各模块间的调用关系和数据流向。为开发者提供系统级理解和技术选型依据。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","progress_status":"completed","dependent_files":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java,pom.xml,crm-auth/pom.xml,crm-base/pom.xml,crm-file/pom.xml","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:30:23+08:00","raw_data":"WikiEncrypted:KLd6hqS3YDnCCH772QA0H79opxzq6gDz6O6XbE8wXJCkKw6BpWqI3e9aCSSxRib9AaqPJ6L1OVYJF7K84J101oetRySG+xcKQLzp9l8Pv7j2ZRiuTuy6DI71pK91ZvD3wRlPxxBashmsPgKM2Z2FmGhnKZYuVoVvxpoXNbb2rVxATwZC4eYHLIgaJPZmAXkkfijxFRtw/TX4wuXlfEoNhUEukYgWeqg0e9GcsQGUwid2XILPfA6r7O4twKh73WJ7zXX7WyUpBUqz6dgZSn2L/bandVg/hrFCo0sMn3fxmcOQEUFUBBeVs2uB5V/ghMLGgUyFQ5vFIXw7H8rZTroM48rDTdPSCjpcXZhRbq4j4ku3pvLQ7LQgA4KWbZ+c7XTRMIYQgPO22h7lyyg99W2xUzEr4h0PXkl64FUv3WGcksuPqZuNbBX6feB31KQhLa6W6DrnHpOfFdl6WboK5RzONjOsq12iuBzWkgpUYVqBmwJWq+koP6NUKoB0gmeFjmgH/YfLCEAJe9IFKARkBzMTcEGpOegNBo/9UVhzJ5r/g3fY0fJzQmm2j+TJPfRtxWU2i749xCB7tqtnetYdqrYsITi0tpk4z5fV6nHNUV7z4GDk5M0ZptR9kSDYOkYEOitaHYPH3HGWKPexI3VX9V9lPMrY7AfN45d2YxTuCWSMem8ud5xHyv1fj+xQ7CliDZWhAVCdzczOH6MAAzQWmLbAyIuUQSjI5pLGUTkVNg0UlRWdzVoyf6x0rhX4V464v8rClpUEa03clBbH8jTT9tbwMONWwMDbT/l89JrDxr7vO7Y15PaGRHktuDBNBwT6j1WL2qzX9FcB83aakkTx6QcJb4IfZE1DUioaziSc7vk2TvEEH4ggGaUGYe3qJQ5PW7tRFPLtMK4xAcCTDNPofMNu0z9M/9F2MvhmWbByey5E8K2pFsIXBhwYzAa6b3NSSLNBvKPPUgqRvbxe7vzIsIFwC0yaWYIPo5Ppem55mxfX/m4Toeb6Y1FOnFk6yzlEjRxI/daNZtrW6xi88PwHmD3jFcKRyzqDxkPGsm8G09bI7Hm5v9LkSXNCp8mfPEEcIXXbV8vs0tQSBb5Q7WfoRfxLh5KBRwlLrG7hgnwFfdN8GD/a8Zbk4E4PKKx6lH6kqjjnvwBW8ekYmbuafg+/to304tzwjd+KZTpfQbz4ZoZp+9ZRAR7zNWn6OYrHZnzKUXitlyZ9i4m9b8u35xRu+qEAHw==","layer_level":1},{"id":"75cf3e71-a859-4739-ae6f-bdeacbcde63a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证核心机制","description":"auth-core","prompt":"为认证核心机制创建详细的技术文档。深入解释JWT令牌生成、验证和刷新机制,详细说明安全过滤器链的工作原理,包括请求拦截、用户身份解析、权限校验等流程。阐述AuthLoginUser的设计模式和会话管理机制。包含令牌安全策略、过期处理、并发控制等高级特性。提供完整的配置示例和故障排查指南。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java,crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/security/AuthLoginUser.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-04T17:44:06.5486092+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YYunK8FILEqgWMvZvllsJllDU5w+P/MfXf3Ry0jkfdPEqBzJkJ268FHBZEcI79+HbHcSUVpYM5anDtKrAaex9nw5IciCCg85ga0YEycP99ifyADkyldWSKpYMigKa3Ya2c1XLgVKNZ8TDSShSRaam5D+pdn+cLWxoMt0fDdJn92MWW+d9nPRFs1N7x5IixNuPzYCWAvAVFsEovZd811Ze96aPIfwfrE1kgxWKTSIvCFbpLhTw9ZYEf3lbRpMRwzlXL4Pni9KyO0Wv22dBIMo57dciy1E2P2aOTP0mYOKp450brhPMhbqFCrdss4Al9YQ+u06nFaUKvvf5k8WYZh/Qzxv8QXZbbIWgKjZ1yyG7m2L1fKlUTctWO+VwGksgsDos9gfZ52wlqZpBfwHYuBjtzaHNhAfUNvUr+z8PnCovR9xCp9P4S+tUsxXebQMsws1RD/TLOo3XHAGyXo4yWRNO7lmyEErLfgPUXfV66CtU9XMyNE1McpAKc/m2IhmEcTwbgUxfDcIN2jLd2LyYcxvCAcIeacFVnyVQGe0kUN6xBfCS1ZNNaU8wQKnvwGs5MyrX584GGXyYVmvQmDhbWOKYoiCjL46CYwRAVKGlbuJZdeh1PHcN+e9nFViTRZTkIHECnakDRojWCjpM9lJEXB2HtDvxKQkftpWgnmMiDuhG+wULjatgAY6lf2sxo3A2s/4goiXKR9cdC1iRpazmB5n5SuJNgXqBjBFKR/ebzvNDSO2icoh1OGQvUG8tcIzSxVVRh+gjKUnHWFVf7JkFhFw5A5t/Bm8RkTuWm2ZqCvoyEJbrsyYFOjXfgTYXAXEHt0Rnci2o6QKVrxvzHS/TStF0JTJM68l8r5G4Dds2RZzqNogNQRv7IVKVTeRUo21Cc6BM+cBkOdWoFEFI2ZuMoStelBQNl6NhmMsKI3CAxFC8IvhaCYikNkDCN44h5TZzw9zAh70jGbEpp2+VVZIPYrpM05x+4hTOb7fQuTbEvrNIi1b7wTokHfShS5l0nL3Hu6EUxSpnVtFmYRcL5Fnl5Pv/fdF6Y3cww86OIJOMu0nx64BRZ5dZaqlC9gP2r4YY+vZJQq1rjspfpx9K6kxxkVxEHa27LUmhv+Offk4++jxIv8S48RnJVDFl/WgMPm/NG1gO7bCu0OvnK0v6oly6jJVI6VmR6/2Ufuf1hSyQ+70Nn2nNuw4er1Y1YyNcjHLzpzkPID89m18fdmbc1wlCT52fYFTgh9GyNFbHSD5IPGTPp6bxipVo406BwuSxkBdlJgFvYc3btdKnRGBYB8QOUWn29cSV+lTFmfM7fbbUwQTe0mjPHgGpUVdi4E1Q7bgWLf5QMsN0Ar8TEv2CdRrsFF9d14=","layer_level":1},{"id":"63b8b110-d9ea-4a5d-9eb6-0cd4aeec7c8a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件上传下载","description":"file-upload-download","prompt":"为文件上传下载功能创建详细的技术文档。深入介绍单文件上传、分片上传、断点续传的实现机制,详细说明MultipartFile处理流程、会话管理、进度跟踪等核心功能。包含文件校验规则、大小限制、类型验证等安全机制。提供完整的API接口规范、请求响应示例和错误处理方案。解释分片上传的并发控制、重试机制和异常恢复策略。包含客户端集成代码示例和最佳实践建议。","parent_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/controller/FileController.java,crm-file/src/main/java/com/crm/file/service/IFileInfoService.java,crm-file/src/main/java/com/crm/file/domain/dto/UploadSession.java,crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-01T10:23:36+08:00","gmt_modified":"2026-08-01T10:31:18+08:00","raw_data":"WikiEncrypted:Z+2lIkAHY5bnkLie2uX+xtPriHrS2r7MBu6LwRjC6flIeNryxSwE6tTKKEd6DWjiYgis08Yo8dpA0xYj//9uDC+SSh3n4r4YMBIiD35NRlF+yngyn3VktDkxt8ONk1niK9mSXHKpXi+1C36opxeVXQVRp/psEZlohbKUBBTiMcqiD3Y7s9DxcXKTOJ4byP42Tsdu22HGgw2I7gitSuRewQ79i4VKLDNUdxYvyXqqEAM/RK+oiADVoDcOBCLz6+mz4xMfiAqQr95yyXMhGolWskRLHiPL9pBuQ3kTPBe4/gXOeBYzY9Jyy/FLPmdJkHrInCIRrmYX9AhFC+nzV0v1z8vcjIN6euM52s+JjcRiXBzm8UlJYx18VYl3h/65FtWJT/tJmTnCpjpKYkCUUSK6rFXrWVVne7QPUVtfcXYU5HdYPISADtY+bTBIIwfg2cuRRjYzFM0gHUKj2FnQ4IOPGqj8z944dLYO+k/GtM74OYsfJskC8QJPT4217XWnnF+9tWnSQD0yBgHBn9lZ7dodsHjjFJBanZw1e8ke8ZY0ZyRPpv+twPckBBWB6kGiZACer5OpeVXsHhjW2GcLCBB2ch3puqLvnYb3GfnzT28P0ZLJsgC+BOgZJGRUNSzlGZVjRDcZgH7Mg/xEaM46BLhXiTNGj84ypOItV7C6jVjXCPAYMcMNdrET4vOFpQqkh63zWy+dTCm81xBWQ/sQhyf0PIaeKWFbybuASlzJ3OI1Vq3P+Wztmk0a2p9lAzEkc4qCkf1Old3yACFni2J5enQD8TDNJLXFUbxcbmNuWkc9xuAD9ejJ8WwlD4FxGYYyMzI2m9x2R9Au9xSfG6ZzmFcZmBqAGJOSzksXjIaLcoDsdOaiACSR33YozCirpRQRGMv44IkRsPdPL3L4rS/4q9H8uIPGYYLpT+iw573anMJ0/rlvNebbyOGYI4gd5xnWRij0cEn+Gb1E/l+KGjuxPKnC+EMTqnlteESHXnmgK4RQEqxZ+qdyWMRTfRSPfSpNhLfpkComg4QM3TGAkYOUzXt5jTgVAB2pcEw7THAsv8f1h+4p9cRlTDoRR2pmhY4Ch/Zs55n7nEx8p/Ibg4k9NCJJSB6A05V/u5Eun6lgYTZ01ab5YXZSCBUsDQnIFiE4NfIKkddgmIiHWQ9qmWsQQRQn3Sxjx90z2odf5QlJ/ped9zAhbnkpdeNRFeUfjdZYYOG+zYm2D/QktwA5uW0eca9beUQq4MexbrBTe05DJTsKUvtvNw6d0lf6jhqtodFhMfB98hWgYIrd4xJC0I2ct7ai+8PeytrF60mMVwNdKKJZYMbkC1AyXTn2PnW1Wv1+FJlmFjSRrhlNVs1fg1Ip25mhrPIRJrj4oifo7bSg0A3091Jbo/VBk9W/OLEegJxWn9cE","layer_level":1},{"id":"3c375076-c8fb-460b-95a8-f4c6eb60af94","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证API","description":"auth-api","prompt":"创建认证模块的API文档。详细记录用户登录、登出、获取用户信息、第三方登录等接口的HTTP方法、URL路径、请求参数、响应格式和状态码。包含JWT令牌生成机制、OAuth2集成流程、权限验证方式。提供完整的请求响应示例,包括成功和失败场景。说明密码加密策略、会话管理、安全最佳实践。包含第三方平台(钉钉等)的集成配置和使用示例。","parent_id":"6e92351d-04cb-46df-89a9-1e2f43b46552","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T10:23:40+08:00","gmt_modified":"2026-08-05T14:14:28.2401317+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YcEWVe61ncvcHAQ/jwtfRO6nsymr3iAj03wbEczPXFPdkTnCBFG7/2OfbbpeK1tBfymMkkI9XyA9US6+PtyXqh/dl0guhgpht+fnBqZUjLPtCKDITwEY8BQFVEwnrAfITga+QRBGsv7TBFSkaEtASwLlYLJ8+UDp8YpV55gwKwHQp/f09seyq1OaV3sk7/BUa0NOa4awOflPsg5XFlVK/rUGF3rqKJcuD0G1glpopz5m3uMHnV2ifBa0D4VSW+zToYa5InFXJXhuY+0gTKSGgsNeM7WfWd9IgP5nF1m42lXF2i1h8uMdxI4tC4Pwyw+cxIQgbgF2wBk2pXuFgTBenf2ttdk1YTAafXd4PnQaAtTkefXDaALJUyhsoVElwDZAoDJ8Hi3BbyoeDGX4+giN3elHH4W+0DoiAxehb7bWQL3h4LgDt61mM7eISghb7avmOf4YDre4tIVHy7db7js9LllH0MhJQEn9vD3bxy364rSM//K3C3REi5VY4+c2MkjObRNnUNJW9QmDF8HSRebX3+quD48HzuI31rEH/sgIyeK3IEKLeJ6pXkVIztfyr/dPATDArleKdh50Tzr/ORAaDwb9//Lp2zmJcKAJfd8/pTJ6URAyJ62B/X5vZLvcepdJRQ5qtjEchSxqRAk/3jlXbiBfehtza3tsa0q3bi64hgk0+hnh+dNCdw9NezPGgoBAPt8su1Xw6zBanlZPiLVYkgXeN8mgxaCwqyMlgHbLd9Ik+YTSAFvwKWy4OXDyQ5nQjLpsOLuoy4XepjNYJDRuAAidsmD522fRm2RdwI1VTsCbg3ar4YuRIYGCu7IDg4hGBz8Wh/MZthE6V6+1lDMcZPEV50kDhNAH9A8pLHZkFv9/g8w7k3xtwEzUCoe0pbBcT1Y6Ozat4RQnDHOxjaZkqH9088Zs7wZNPrglwDgJJeFp28auAoxVcxEcT3BvwgS8RdHq/tYtwpyjlgLk9wIVLCd74u0aWUQJr3Yp6ATTh8rJv4x9rp0mSu5Qj9x7zszzAQ==","layer_level":1},{"id":"99d97aac-8777-4bb6-aec7-edc5e57ac411","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"通用实体类","description":"base-entities","prompt":"为通用实体类创建详细文档。说明BaseEntity作为所有实体的基类,包含的公共字段如ID、创建时间、更新时间等。详细介绍OwnedEntity的数据所有权控制机制,包括数据所有者字段和权限继承。解释实体类的自动填充机制、审计字段管理和数据可见性控制。提供实体类继承的最佳实践和自定义扩展方法。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:32:06+08:00","raw_data":"WikiEncrypted:eWJG/e5ing0ewFH7hWSyzDgM79nSThP7ImW6wv9PEA8JEKVMy3UMkVt/vXcNfrDUzwvN1fofc1lstL9M9gzTUF0lX5sad/ZoKMtuphVzXHoefd46e4xF41p1gxABJbq7qjzjPp8B+0J7P7Ljmo84TFxlJR9NPmY8hegiskinS3ioVvbWll1cGkXx/1ZCnuFyStxkepIUDnYI6MUs0v1rSrivTXki+oClYl/mWAIJW1NmW6tHc6fjJQRXj9t+3K0+cHdzY1YeCyt5CZ0KxerYKqqmf9u6jTlvLbzOkvW2zzocgXHJKoEBcEiK5WDFmh+vU0GticOnUlmDvFyldS6ZHPCKqCPJxvExr4lX0vL6rj6+i5VHof70MAuU9urgPdvPy/Y/NMENy1thfF8z8RK68xJmffTsKXovFQjaQSOLYqW6UmoNjVkN8sxDaeyInewpXu5Nb4AO2qCwKYmUD6MfhF2gSWFdXEpLYdlKeHqQXttExX02SIfmB1a6ymXXsW0tbugNwDJXqbk9Kv2epsXV+NPd9DRl3MYr1FUMGCiLfSqSrgGUPXMnQigoOucOm/Ogdsc4kt3a6V2MFKHqNBQ5F7rNAG3o9f4N8hAW4ASF1T9+PJSpoiMJMBGsVKVJ+F6Bb+amzeleQ9nyCVh62N9VHnUK3rBzUv2079Q891dcuGGi1ONemsblpjfsg8QLTljMFUf4rs9FrbZ7RN3hwE3EuGX+bAhEp6XouqMH8+NBm18Cngrqp7UeCwqvevE20rHoVLeguvfmawsIIprGiKaZZbMDE9+24qrfJ93Mv18fkA4Z1zwh651sko3T2OfBXHNJ1v4zggxyPsKtUt+fJSY1h+rwASYjDwlHwK2PqyWvXdV3Q9hCmbN74YCy6qDHqVsphKQiQIevpJ1M2YBYB8iGYcIekAjNqbIdkgkzxaz13GZJ8d+V/8Th6Wx3W4JIJvAl3eHowUoYJU0aIim2QKci1Q0Z2cLT9G/RgUvGbxgKVRGOTmDC7n5Ho2c+QlMsC7H1","layer_level":1},{"id":"e722ef25-3c92-43fe-8ec5-3f18ed7dec11","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"用户认证模型","description":"user-auth-models","prompt":"创建用户认证数据模型的详细文档。详细描述AuthUser、AuthIdentity等核心实体的字段定义、数据类型和业务含义。说明用户身份验证机制、多身份支持、登录结果数据结构。包含用户状态管理、密码加密存储、第三方身份集成。提供实体关系图、字段约束、默认值设置。解释用户信息DTO的设计模式和数据传输规范。为开发者提供完整的用户认证数据模型参考。","parent_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java,crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java,crm-auth/src/main/java/com/crm/auth/domain/dto/UserInfoDTO.java","gmt_create":"2026-08-01T10:23:46+08:00","gmt_modified":"2026-08-01T10:32:27+08:00","raw_data":"WikiEncrypted:SmmNTSq96N8aZksVSKE+84xs+Cutn7kbuj+ZIuUlRi3YXrc0WDJga98Al6qkDNBI5aNtJUjXdc+R7udC17sK+I2mvu4rE4XfjfL9v8zKuT61G6rXxtkBGnFKGdk8gmkz6KEIe9jZyQKFn3GyLCQwFZFCBSx7wjCxoAbbt9yH23PRmU1tn57ElaQtj8ILZarCMnz22M5E85Vc+zTWj7NVBrDnd/HzOWU9yvBgFzgzKWgXrGwHGLZCG9XL4E/rSu6SvTTAcW2ojQXccz8yMR2LSp1qw08ZUf6te9HShAV/zkeZXwFlCk5qygjBMDimtBa/spJDqLmaY3MGSXpjL3poKkTNcc961B6qh6tjoq+OwjxreJknU8ipC8lJG2pvD9Ks7RD2cE2t52y9p5G8aDC1PdLuieO/rN/EIxcbnYUKYFIdGrgJv9TbxQ7IlF3i8mGpRBVGvxyZIgjI0KdLzCp9+kW1I6OGOi6u/DGW6PDvPex2GMkNMdU8aBpuD81bYiBrgxhoQre4y/dGfms49luWbxVLiQ5cniEFSW1puu5K4qcUYJL4NdaBImS5BwbV69SfeG3W//Z8vsD7cycnLamUQYBptzEvPiHgc9pnf4dQMKBltuuTCtjHZVNXPocgLIT9F5cSaA8EMyjt5mfCm6eZep5IjSvI2JghirUTGdajnQqbgbW6VnJ+n5ZCW7kFgrOF/19fJwSou3cM7hEQd7h3wqlq+3kf1myCG1bkUtJHVB25LxHXC+romWKupNdzDff0mMmifpvVoUhSV2ntPEHfUfeSSwn1oWaK1UpdCiYUCJSOCrw8hjpkdihnSA983oHrGhBsXlPxFozI8xm1E2yo/wfYUrDTdhZVnCVKs6sSQjXCOVYT5IFSXIEonJ2Aje8WO/MfGJc652Hc8KvfKGdrTxoDoOLLMPiAUt7mJTgBywvmMCrm+s/FT7DamVzVvimnSWpvuwwyWHHWw1yXYSIhjdZOoEBOqrkGwRHve+dGZROzOOsBQyLe6iLX8thC3aRYyPGO38TvpYh856xLEw7E2WAPltUgT76Tya6xiN1BR3PIAutNrebUjBnhjA6Duwfu3qQSFRNPsGFS+CkNelz+yOZADmN32z+8ljLyKHpBbUyj/Bxho9ojMCY3ywy/HJf0afbGdNCysR4nOpeXvk1uNf/xpiwAZg43x4e4Jqzh13H1exdUAeKjr63mPQAOijUsHUX1Y5DQvLJB19eT8JhYZ/RoPDALrh0kWkx5HLzcg8/PM3LMFO3pO4A4Q/tn3b1S7TdyHGtiTEHiAm0BKTfdx4CD1yJC4KEToFsgqMDHtJaJpXxEaKoTsCVJxtLRPRtrIAm5J7A3aEMJ11ryY2VteQ==","layer_level":1},{"id":"03573e0e-c8f9-4d34-aa69-f15601d7e542","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"开发规范","description":"development-standards","prompt":"创建详细的开发规范文档。说明项目的代码风格、命名约定、包结构规范。详细介绍实体类设计规范,包括BaseEntity和OwnedEntity的使用方式。说明DTO、Param、Result等数据传输对象的设计模式。包含异常处理规范、日志记录规范、注释编写规范。提供Git提交信息规范、分支管理策略、代码审查流程。确保团队成员遵循统一的开发标准,提高代码质量和可维护性。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java,crm-base/src/main/java/com/crm/base/domain/result/Result.java,crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-07T17:24:18.4785132+08:00","raw_data":"WikiEncrypted:9b1XqHriaqPGsMtQmhzV26siqMA1ExPgaC85HgjysifJEYIbcgxuJrl48wzyr+aChw3GuwdkXSh6XrmnDWqh4C/13LgYduY7D+Wh/qft5zj3ARCSz/ncqZ3IQcVL6WIvELBrI50OXLEhYhBvJtu2DiED0DQxdiYGcGDhZa58GPyTG3bFEbJlKOEHJU9KVqjra2G4FqDiLRm+l+ftO353xHXFnJ2yJt97JfuDDG4rhbIaOEOFlKLepkBhXqJAwiRi8uGfBO1Ln+W7d6B7a1pN8E3CLDXuBVkTXn6wcwMmgAWtts8+D+vwlXO+l5rUzFAqdJyFJ+UF/aj6Xv2aTuSHffgspDutYzEd5G+jX2EAIJ/+7pfIqG9b6ckboESo+gsMhMQ8EjT7yXipOSTfRjqqWpo0jb4JabKsSC/kK8CSIiJpb6b9aPW1Eqnc+1LL8y3jfXjhW7QUHxBqSqyhbCMGyQvEw5ABbVasJ3vevBsQV9+b9YoQNr/NYpJ/LoX9pKWgpRlDBCz9zVEL7Zm9h9Ltgr7fg6vjckV+UspMJc7CbUoS6b/Aiib91RfRvggWVI9uagRYceol97LjvcKwhhgHuB0OO5BWtDiEEtJ552dIsKrUmSK/W8TmIAt1nEfw8apx0rt+x5Z9m2w+jFbDWpDu45R7pcFeUtwavfQY0nbARGrIi1oU7H8Q/ku2c4ApyfaDLLbRV5/foIdQbEgpAmK49TRClR1fQRelRWwA7NHbIBmI0NcOHoiqxiYiqoeLNKFSe3hdN4EFstKC+0iMh0U+ougxFIuS1fzzt2AuC30mkN5Ifx/qBTopsZJg3Hu2AE+TwIpDdv2GGq6Bli3aZRZtSRzIDDIJIa5sbHj19XAlRdWPlfbH1namJ6XWlm0q6iBk78PVPDDXmh9OVSjwDJG9kQ8vfz/RiWfY//1k2BserdSFk2iIxQlUFiZ3usXIZTyXJuEHNGkxQl2qP9tthoJMkbeeif0tYCVWGaVbwV3TMufx8x1zl8qJbcfQQUz4wm0h7LWuFqYUtebBfkUgbr0gNFrUyLE7wqnbNVd3rTlc0vMrZtFl8RvBD0s+4W26OkQJYlyk5FaotMQTJVWarQEYZ6wTrkgwLokAYjiq7tYnInhb7zbpyb9ODk+Dosphm2AawYgui0LyWosCfhpeQVbSw1RJ510vvRRpLqtIJVZukax2umR+NC5zUW8SS+IFVJQG92OxjLH+tWUnO/6NyMeTSimbDWoqNfp7TadQDw520qM42dWOferMjIkfxQY4Y3wdUiaoYaMbUqD/8sdyyqNYd5RcAhW0/j0O3Sb0RcYVR33VYvyektrrgu5wOA1O5ov1DKk5Rr6ibFb+gMwRwD3wKg==","layer_level":1},{"id":"31af04df-8cd2-4a05-ba13-06b468b471bc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"应用配置","description":"application-configuration","prompt":"创建应用配置详细文档。全面介绍各模块的application.yml配置文件结构,包括服务端口配置、上下文路径、多环境配置(dev/test/prod)、日志级别设置、Spring Boot基础配置等。详细说明配置文件的加载优先级、环境变量覆盖机制、配置分组管理。提供不同部署环境的配置模板和最佳实践建议。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","progress_status":"completed","dependent_files":"crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-03T19:55:41+08:00","raw_data":"WikiEncrypted:aeKFMGEcevAvGLRT/IQFCqpj6WDzjXLrVIlQChodXp1E0jDrH3G8xRWv+80n8VNexqmtBGOYlUgd8BJVtuco9q3zUaTu9MAY9GkkHcx7mowiM6FtpJz89sNC0IYAGceFzCI1Se4Wz+FtlXnpdDlvDaf/TMYgTbLOPOIKXPdrcowG+Fj3qGmJYzUw7Wl9NuOQDlPUFNpwByw7m7K3VpQItWm09FLi4/FiOR62qzwIBLjtreMvnOrkHY1GxXmvDWRzlg89jhgHMwhNYHmJT0NFvZJUUF4F9d5N023C9bNrEz45x4vVuc4dhbI8k2QpHumHtQCf7GS808XzPWxv0q7uL+k3CrltEITxd8sxTomBW4fm1veEopFAokU+rVDNDOLq1rZQBeqddIZiqfUjosOi4U18PJ++2fxcpqro0ITXUmd6ChD4kWF8jhakTnhGm3flqy4FR3MFFRtIhgORcvylRk6MyRUzMvbfvhTgJ82idGvjN4AptNqSFVPEKcpVmp4DCdC57aoRVQwqN7/QkJGqDpUOjUwKT+EwzVKe3Gx5hcmTsVKA7Hk7sTW2dPBbWP1iCPQQGQ+xxz3+D448L8Pb+dFKhNHBVs5sS+uep+ZqYx8dU9vmwlXmuB7leWaxEcqTjnu9T3IhzcrI/CyjXd+VLKByyK91bKeQPQdJ2IBDklCQFm8aPADmcQHGnid5oR1o1nIsxkLz1GjyR5iuXlBiShMwousPk59btcbN9mQVHdE21Gne3678B0O8NqLpX9wdCex4ui8jtkLb8ersFPx5u6DGYPD3XB7pO3RpYz/eKx/UjhjpH80EWRTxdq3XXaIEoU4tVEacaj321uXH9itxnjQFdx/7wcGMCtsn4cKJraX/nVARp7VJYb3c9HFbWeExnXydRB3qi6qzPSkVLT16pYf+FcIw2w1vqNeTa225XbCc6QSS0oWnKyVN9XsD9QuZO/l7n/+xTbaUuKdLoh4mWSY8PyfLJA4SKJWZ97qK0pmprIvlET8fMnpvJQphAMc4","layer_level":1},{"id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证服务模块(crm-auth)","description":"auth-module","prompt":"为认证服务模块创建详细文档。深入介绍用户认证、权限管理、JWT令牌处理、第三方登录集成等核心功能。详细说明安全配置、过滤器链、用户会话管理、角色权限控制机制。包含认证流程、授权策略、数据权限控制实现。提供第三方登录(钉钉等)集成指南和自定义扩展方法。包含安全最佳实践、常见问题排查和性能优化建议。","parent_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java,crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/service/IAuthService.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-05T12:14:49.6781106+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YRKZKBkixVCJ7qLApKTAIAYMZ+KzJ+0/n3ivSkD9dNPuK+6iNZzAQ8+P+h8sHLA1ET28RxSJlIQCVrh6ke+HsBz0N8DgFAqEtp76KLltqslXTa6Fb0waWV8N2E75yi+XqZxLqJv2DRHC8SLVxzZy/IG2JziOdQk4cEvGuilz6tESjKmibCzKD/1cLUm6ixwlafv7dMAtTVxCLdzjeeJbJV4hlrGMI5c0VftOQvxkSiigsVyk5Eb1ALd8VaVU3aGyyMKJplGed0sSgjaKguVmsTm4rgYypo+k/UIfwDHuMaun12cXENP7MuIw2TvO+GYYJv/WLakUuqSqbNWGOslLDBXpbSRNYk/AnJEY+xM/aI/G0SaZe067cVOYSVbvXNlMFocvW3DpkLgoDm7eajmKv3MYiiHV+YUnn7M6MW2vyzx+uTgYS1Ly/ApqSqLZ2p+k6VH8L85CvKFepCWa5KKs3rt9GI2zeetMSEE4MevpTtGS24NhlECS3sSld9R9jcVjLbWp8N/oOJyTfShuy8v+wiYsaEW3AQOpI6NUPcR0Qhq4G9h+UFvnnWXIhU1+H/a/E8Q++K1Xn8DFmqhANX1uKyKCbPAoruHgF3EU+sozoJkWC1Z77HnKlu6iozvjp/EhIkPHYcgP/Pzp+uto5/two6dimXbmBJL811fAGIMBJS4Jg9od+cEPGYR4wx/MVDjK3vcgv8MlDSKuDTtTdj3gbPiabAmeX+eJ4NMj4H5te/qE+9yDqtUzfU4YEVJvbmKaAzVTIg4W7Kaljz58Bg9t5L5r3pY2zLVMiKak0uBzURocVIBoloXE5d1+uMBrUEWhhrgHWYDsaMVkOmSgItP/NEcBchqhlTWc7N7Egq0M9ZN5jCazcQTpJoJR0waR1IldYGIG3trXk98BN1cgscaztXjWN9MsHb/wkX0ONCoXznopQcqaQisnbenWQOV3iLY31q/khDtOMdxYNZgnRQgekIIZ0FLwIk/uMffEurlsfzXN89j3I/gpIL2VvAKDgOC8VFRJSPuNFiZB3KDuNAdZmQ7NpBiUqehMiW5y6vI7/Cv+Xm4uALyKTqUTiS5ddRXJzsFKIKb6IfxpmeEsalMMuaY/c4Y2M+AjHnIG22VW8nx5mbxKwyuwFozWBFsJ69JrRcKxdWa9ZR4xS0GMRZjO5PJfaj6MSbQoQ2wg5DAbYNSe2LqanKTadAT8nKKhMbUagzhOY3g8X6tuQukF14mqhQjMuwgOv9flsehfd0pJdtXnLcrcxBeMhQGc7ikeJUv6kRvgxGYQMDCnrAxYUX4dDljUJZdqgpdnm81g8LUupK5uy3BnkWHyd4J5qSxPlHc1l28vXXygLw0a/NoylyADJizA3fbLzxWETay1A/FCi3EAFhvJKqGXESiU+aSXJDCDJePtyYmhYXx8lt6UcI4LMmuyHcKP9XiztAXrvARUDSpW","layer_level":2},{"id":"fa36460c-e07c-429a-bed6-e6c66f7f39dc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证机制","description":"authentication-mechanism","prompt":"创建CRM系统认证机制的详细文档。深入解释基于JWT的认证流程,包括JwtAuthenticationFilter过滤器的工作原理、TokenService令牌管理服务的设计实现。详细说明SecurityConfig安全配置类的各项设置,如登录接口放行、静态资源访问控制、跨域配置等。涵盖用户登录验证流程、令牌生成与刷新机制、密码加密策略(BCrypt)。包含第三方登录集成(钉钉)的实现方式。提供认证流程图和具体的代码示例,帮助开发者理解整个认证链路。","parent_id":"65c8fce4-7186-4278-af29-31083933e088","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java,crm-auth/src/main/java/com/crm/auth/controller/AuthController.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:46:49+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBN19feZhfLoLwYBGoJKvH3N1obTJjcW+FHYSJonLP3jc+A/sg1WcUJ9+F9Iioivnmhhv2MDjd34HwbZjdBDoj5xh3OPjkRHpGc9D/d+FmLVOUJ3NFdLq1dWu3AX7Fpr+k0sTb+9Z7hfYvdk9/XHtPEvfA1L7oBoGoVXeIx/GtYlSiQQ/uHHB6eE3SYezSUXzKG2Wp4Q8eFDUJHg6CyWMpEpbL98T48ZtjqNdIafTfBvV7nTT8u9ptqe940AiKwxjicuwFbTLxw85VNH5iCOrzKmR/Peiw7lZicqPii2hQRF5f7R9EqqDIEcEXWfiFsbI5lhLv+gL90StETqsEr1hWqO36Sg7JtaGPLxMhGJMznER5LloiBHThpm6f3NnRPjVanmchPZ35Y+pQ/kjbkFDOksSMTT3lxagr4dbOGSWfAyWircsxffSGKfuEu+t/VjLrUyc4Jdsbpu/JIeCimQagzemisl2uJpuKoJ7hhwSAOgR58lT0na/ZBsPHfZy+2CEs2cHWzpn1pAesEc98nr56vJE9A6bEMhzEHrPjv2rJRqhhLxQxpIduaiMK46iQtOSihkhGyHzNO/ijJe+MjwAtesD0WJ96TBN9+3He19GlHxNJ2Vb/rOc2682szfcQbD46ZeIRCgAgZ9MiJaLa+P0bJZva37tR8k3Tyt3yuXM+S8D/px87khKX+yK5WgRitPBWCgEkk38qe+X5Wdf6pvQn5Z3T6tppOZ537651uCe6giscJ1Fh1VFejHoJ/0QEmEtOw/EwwAXeMKf/+2VGEaXItFPtzi7cbn/YAWpCbh7/C8d4FAj8aVVQpwsRis2WqqB7Q6PI6er+iFli3ACS0mAqHa8hTaVlSHRlYwueGyfx2aiR+Va1B/OzMaZW9DXAUZvdIa8RY5U+NmHmu+shRglawfVWMB0JBTTKwExXZx1J9xAhxvHJcTrAZ9P1Pt42oe1jTYJX7RtoI2sMflVXUKlHiYJIA+I5iTTryeOzcY+V/z3iDRUqKMOJccyUyf+sptjK/44mBlEp5Rn3L6YPp8TH9YviP8QhDCUL/MKz4tR4iz44ogG3F3wUx95zeo3rp59rhTyL+8uxiqoBXtxuOgEvpPi+D8Lw9U/kyyIZmk1ayUzvbeSZqvKJG+filjFQP92RF4X0n21Hej4z9X58YpIj+xi1WhMTpDfCVNiMcJJVbJk2kozfO5PwDTOfq5RmS/QIbhuEPlqBRrlTWHH5hs2yXPle+pmPCiCjIbQSaOlC+/yQLCOBewwSl6YaO54rk25LSaAMnhbSRnY25MjtyhR0TIFKocimw3VcJt1hKZYK9XQmkfYD2144cO6Aqo0UkBFyqx2L7kW0R5/yiqIIqkpYLqibx7xLjEL40QBEF7ozyRuUw1X2zXYTMhc8e4EkHYCc2gjw0LJeobb5JbK8XzAzrJNcZB0VUJIfu2ytCQ04RXZVJWcLv2iou3wJN0y5LoIRQ==","layer_level":2},{"id":"cfda0d47-7134-4fb1-b1ae-fe5bc943bcb7","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据所有权控制","description":"data-ownership","prompt":"为数据所有权控制创建详细文档。深入解释DataOwnership注解的使用方法和配置选项,包括不同数据范围级别DataScopeLevel的定义和应用场景。详细说明如何自定义数据所有权规则,包括部门级、用户级和全局级的数据访问控制。提供具体的代码示例展示如何在Service层使用数据所有权注解,以及如何扩展新的数据范围级别。包含数据权限验证的拦截机制和性能优化建议。","parent_id":"23dd7f77-e190-4852-b94d-17d2b127f16b","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataOwnership.java,crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:47:46+08:00","raw_data":"WikiEncrypted:EWnmY7FrSrDNzKPUk9wUqVJbiamaj/WtxTUrb3BZ2ZijiB7KkRwwZde9phC+3XDz/ue79S08r8e4a69b+hZtK19Nr3S5bmAlsvXcgS9x3VW7TcdYOppI6JGQDvKOrhs2raSCPxohHagvItJCbKu0JZ1LnW3Rllt49eqY75nxZ/voU3p5PjiZe4t3a3QGCb4aZX9sH1E5wygVpBPWDT5LR+mHBtvy+1rd6oFqX0ATllpEEe8ghA8VgFikAtewtAK1A8Aal5hiDmFdIvEejZxv1wRS9VPjTqtgT337b6f55FGp8iRf78a6tXjosBob7kLArionaE6xlTX7sTh5zfLiVm/hUdxgw2W0ErBu8Sv01I3gCSQN7rsrJhUJUy6fKPGO/xUD/EePwTJL87uQERKaf+zvt2Y6w3VL2guU4rZ6LYeWQ/WeEEjjFAXBuZI0iCx9Sl/dRWBUNVe/NkooCcGLyEbUYPPLdzWCN1H9lgNRxQ2WmUtgq5EkwthJs6k7PsXlS+0QI8bb6OEURuwFoilBaO/mUdoH/WvDX95tmNfLT0K1IOToQACZoWZEYDS4ZKVtHyNCCCBhndXop7Knp7UAHuNwm+gHi+9jr8QvlkUDElcQzoEptp/YGDW2obdaclyY80jo5h54NDGybs3nd7fTUQg1UJKz9Usub4RR6FNq89CUmXn21cEhrjW8GXDtSfirLW18eSRACqqeSz5NP1ATdTXZKbbiM3fCwb5lRoJkyoWHGMA2bDdvqjYuoKBdVVmeTw5kQWUq/WSBrp34JaZlSsCYss2MJcbHmiNuYVX+Tg+Cqot/bkEdZwfiE4yeWKIzk2F2qDuye0+Mae1DxRSdWi38BWOxqERcT5cdAcYTm0DmTmpn9+WNu/YuCXhQGf7PGS98hyfPP+wLVmB/Ct24ijL7fmUn4cBLwH9h3v9fbuT9vgLTX+hOIGwxIMDBPDzObFHsijV9JW5sOKUFZOQVksXTXpyDzH1Cdf2cT7wzjsEilUrw1x9vCRFUAxeUByvd4kx1vu0D1JHXQBpygJUpC0Sg53x/jjE6oDQ0vV90iERJfK+82MhpvxU0dZYGfHqYQILae2mV/7XJGs4WRojEDJsxuY8MiZ4XWddPsUIz+YvOeIqoBAkpe8DEsSQcR//bpUZsASvh9nYlSqcg22mKHr0WVjxIz392dEkhzLFuRx0S7Z1vF1yNTFLremgj0G62","layer_level":2},{"id":"2c7b95d3-56df-45e4-be0b-d647bcd02b52","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"MyBatis Plus配置","description":"mybatis-plus-config","prompt":"为MyBatis Plus配置模块创建详细文档。说明分页插件、SQL注入器、元对象填充处理器的配置和使用。详细介绍自定义SQL注入器的实现原理,包括批量插入更新、逻辑删除等增强功能。解释元对象填充处理器如何自动填充创建时间、更新时间等字段。提供配置参数说明、性能优化建议和常见问题的解决方案。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java,crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:47:44+08:00","raw_data":"WikiEncrypted:R3G/j4uraRHb43J+Y7g6azMTLUMZtTrKIaD5/AbxCc3BA+QAxAxW1rV1cbrgN3X8LxK9i6uZwuTAircVSKZ2mV2ZFKRiwCJtZRkvol+KikDKo8Y0FRfV5j/o/gLrDOry1ZB8XS5S91H3BmLceZScPZLiPLFJyJjwCcV3WvdvsljjJorUXFI3CS60Z0M2WhxvsA+MS/jQd9BXx/nVOaXJ3LneprSVsjZ+azk1kYG4HF778UPiRrFmbJcELGDSx/pyJaIIXk7pSCj3NI0o68uwg6jMI1WrOBN3q8PSHB9a/p429/OwAWay5rgx4m3uoIAm3QGiJEA69KTzoxUZwYfQexdXRHF7wgx1JKIIwLUd9ddoDUmWM9xC6F8nn51fUoQBGia9oQupBnpkjWwcX8Cqssg+OpFSjmfq4hw7u0RU0fWuLJzirKFVfFvL0SPL2+qblWRHBLH1exAOiE/qBe5S27qFANu2zhECrQwzo2yCyWrmT0FEOGvo/YrssTD4TaPMCCtPRl/98iCTM9W+XquOJNMFNTlPG7JfnXjnic61KxflC2XT0iJ1TEGRVokHIPoyX9nBsCC8ea3in+g+tjpsgNwxuBiaWNhls36idR8+FjHS9hy+ZS+AqRsXgtQMrZpygljzjwUqg00dek9Y0SIqjE9oKsF5awzPpWPfYsMTSjleIV0HS6zvTWYQ2nNJ3ePeziJTJcFCKSYlt7ICA8gtpGJvGcH+tsWDeXRnWMXv6fYmQt+10rV2IkR4tTxS1eAck12LUSQk3Mpg1onG5xX6pHZGOcN0ldfPMUmszkdquvWWKPDzfclkQkvfZ7hTiZq3eXRQ1J3ju9uOOSa4C3q5Btl7WnLo6dQ0lhARdelt4KMmLOF4pcPsUPrwdHJpIjVrMiEmi1uJUeDDZf2Neonm/92zIC6T4eWD8AudV80ccjgirCz+ONRd2vWoLyK664D8eOuxEsuCzIQbbDPOlbuGrlbr9gPPx2wbOWk0anVGr0Fsl4TxcwK5VKjQed7ybGQ9q4RcasD5SueZikUObfDFoK5T8LchJgoEZActdSFqJ/8LcugIecXxq06uRcHtjtAQZQXOFrJFeMHsxNVF8jS0tVd4Ov9EFKjujPIMUeTsKmVfWVxJE6M/LAwSFD9+omDdsZrVP4XmewzzDvVFxIArLkBXmo6yi+0zDA9VYSz0Lb4C2TC9GMWkB/PQAGDQtFCp","layer_level":2},{"id":"d69a79e2-abce-482f-afdf-2b016450e217","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证核心功能","description":"auth-core","prompt":"为认证核心功能创建详细文档。深入介绍用户登录认证流程、JWT令牌生成与验证机制、会话管理实现。详细说明AuthController中的登录接口、AuthService中的认证逻辑、JwtAuthenticationFilter中的过滤器链处理、TokenService中的令牌管理服务。包含密码加密存储、令牌刷新机制、登录状态管理等核心功能的实现细节和使用示例。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/service/IAuthService.java,crm-auth/src/main/java/com/crm/auth/service/impl/AuthServiceImpl.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-01T10:54:25+08:00","raw_data":"WikiEncrypted:9QOSaOQHbzL61d6MLK2xGPwC1XklY/msrrXNFxJx7m2nyxyUlMigYzlIe9V3+mfyG2LS90VprjQ9SDyXC8LR1PB6RhlKw8YQpOky8PLRhHYHkdHlXQ/8PQ9AmbQpyJg1s3NR83N93UeWufZqgU86Dtnj98SuRgpOilY1iTClG6hGSDGdguqChJHcp7r3PiuN8nAeTqZ8yQfFF4r5V8fU3WWY6JuUoy+iR1LWQkCgxPvx5xZH99mADfgtAW7RzYp9jvO7YgHBA626WhVWqv6O7zNzOIo2x0n+UZHYTI//TSMpRP97QmiCLxDbuiw4Ff5h++8DQ2x7AUEaZAy1aeInes/Nomu/coouqY+qgrYVddc22Uzgz+bNy/PnG22I5K2bX65zc5cIPk4I4xIIlpwf6ICTFZN2Y++qiKxqc44b1haNl12EvFQvzgS9meu6X3DPZkKpSy32wP35vvHUX5b5MXl5gCL5o8mUp/Gk0foMLhMqUhBXXazaAd5jbBzGHym61Ze00Oc1B8Zn3/yZsUMz6/Za7QvBKqd0oRUQghnl0gV+8l9k+NFE1PPYGTnQjkxmWUIYqRNxgYUVrexuRuRybLZXVRxeZdQV3mHZPqu/bHJF1ZhyeqeaAt05Thx1CZnbSqbCrVLtB6OAvew+L2lQ7qt1JFkTJ1OKZboOS7oCwrFiD5cpomcWnx+Elg+AXKWcW2nZXmpGJ5xbnfvq1SghvKIL5J5l2Fz0zB1kgpnzZU6xNKFXLX7INlphYTJSeKKg4WASOcy5ZKOmr/kEEtEliSxDgSAnjVpuPWusPmImItxju/3r6hdsodcVmwCGvuuup6qzZfITbprhxbhIdeVMtEF837we0vSg6pk4hFMufAN3qvd/uO2+uGg4hBBTSTOuq8n7lKjFxwf8nl7WbJAJOvhHTt/jQWUNNdlAbBFxNI+GJGrxXwbQytfukrRNeOsYlEfeAA2quSPnIIrOkvfxqmHpBJDr6nlc4+9H1ncjEz3iLMyN2JZSiJKY/QKQYlDwzdzE4GRkMkB1CF6lcEsiffpEdfWj0txP7wcbzgmjLBI+xsjfCeVUoR3zhb94eMKl/Bd/zn+esJiL1HB7DjWl5Stu6wJ+c2sbxv5pCSWF4VjaNIiVoHMEP8Pqxcp12gG0/TfPf0mmNrkbM5V+uQsoYSrxuRE2mM7IuIYB5QCtuTA6xZZWmO/glDSiRfJe2+UZaVyelJz2J55RhYXenkR0fU9kl5GUnHvivJyYFuwuQlnQZtY+/Zzf1LnXtq79wbJOE9ATSv/6/FED84EtpA31lFPPOx3DQH21SBu5h7hn6aWip9g5XWf6nLE76+mvlOPGEAJ5HUqKb2Mnm6C9yI51ISr6Qy4wAbCYUmxO6mWr1Tc=","layer_level":3},{"id":"2d853bfb-7cd3-44ba-9bf7-a683edb4c2ad","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"自定义注解开发","description":"custom-annotations","prompt":"创建自定义注解开发的详细文档。以DataScope注解为核心示例,详细说明AOP切面的实现原理和开发流程。包括注解定义、元注解使用、切面类编写、拦截器配置等完整实现过程。提供自定义注解的最佳实践,包括参数验证、异常处理、性能优化等注意事项。包含完整的代码示例和使用场景说明,帮助开发者快速掌握自定义注解的开发技巧。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/annotation/DataScope.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:48:34+08:00","raw_data":"WikiEncrypted:VrTOMK0P24YINQ3w81YokT7HZqpHOgifbAbagg0+VsCbWv2FnlFkRhXiyhtutxmwsXQMf/rjyA/MBH+p8MPfYULZqxFtMwthmiRh1wQk89eJm6Df+qTn2P5+OsyqDca8c9VQ9pbh55BnFlBF9ULW23P3dhdOikPeNxIEMmK4Ahw7eUQjKkcZucKCxAkl22HnoZVjg4jkGZqQ+eQ/jcXKKncmmgRHQaWu22HpDEuyEcn+gvSUO4XtueD9hjo5atF9kGuRJzafMXmGoEQlbwEDUX0ggeC7OqrqBNiyERv4ZYYei7lgJpihBhkKy3ngoq+KVzM3rNFbIE1an6KcPvVQC86nwsxxhTH7VlVlIFDNcsuZBREZyMEepv6XroGkRQJ8w8BOUXMrNDFOQTxFWjrvoMeoMzeZzSSMfx2yN7GeRP9oWfUiOdHTp74ZodJY+lYM+H+kpVpFH7DZJh/fkJhUfBTDuEURHK0l/E2yeFZN9m8Jc3qMSs1TDNrn1KA+gfp0wmculjQbBd5XUn76E506gvhm6ynYNcPHL+/P3yeXqJOmyOv33qai0MPIFnbAn4ws35Zj8dad/1ZnskzV3vhmu9NJIOZaX48xdXZRSUdFcjqhp4lxANHKdZ6dnE8BRfItsTfzXoYa08sCIak37K2za6sAqTzHgKG6zg+WCufAcnRv8doiyD4ALmG/hcDODgyAsxniek2JcK/kH0DptPcEHHmO+W1C7rAA+eepof8FmzEzC0cAVLQhrAfvbM2LTjawLqMfE6siPTmFAN+lTZ+g9Lm+zmdJ58JoWqIoXzgPiuK1eDldZ7OpRjniP9CEfvR6UcIs09lk8BhxvZwkSfswgFCNIArHLoOtaLhEW2A5VVXtS4KoDr95Z0mQxnVYQwN8Kt9MzSLFVdJ5OtAuNiruzkjzW9rjjE9/Nhzw0Eq1T8Ej6f+tE7mBG6SSCxFfwrw8xY+Ap/kpQCHC/BDrZFqv7kVbA1fMfKI5m4dP+eD6Y5HO9q58qhSoTiIHfgRxRnG8q9JXTS09Q+gXAojeLFLT7RKQ1z1ArAI5tRya76z/EJSEssMHU+5G1ZZwuhUcCIphcFTzmHqmu6C8DCQnmdPLz2xbPG2iaNfyS+vha8vwFAvY9Aw7mTnOd2JaSDpNwBffE5fMu7nNlOX1Y0x8NqnhoNCbvM4pFk4qEkQFOtr/wG7P+wr6GeFmqHBMV4gBcb5QSENvZstvsL4kuIzCJFqPnA==","layer_level":2},{"id":"c870ee03-f2fe-42b2-8508-2375fa8a5512","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"通用实体类","description":"base-entity","prompt":"创建通用实体类的详细文档。详细介绍BaseEntity和OwnedEntity的设计模式、字段定义、继承关系和使用方法。说明基础字段的自动填充机制、数据权限控制字段、审计字段等核心功能。包含实体类扩展指南和最佳实践示例。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:54:30+08:00","raw_data":"WikiEncrypted:eWJG/e5ing0ewFH7hWSyzHmm4uClAAvkyiDqUtcCNCNjWGIxFLxqytgUvr7r/8RaqNdcZeV4CCbh/bMhWOA/YED95Y9TiN/ziM8J0DR0eSdio8+MEDLQBE+mDLvK7/E6ap7b9Ixc9RO8BZYux2I7a/mWlDGVJymMZ07copzOKHP90kORH2qCocaAgeGNrhUwieU9lbQiR7s6pvC8I+vk9acaD+hEsvYtL1DRKrkjjM91rcBzIO613qYfu3CKjYMWGKRbfQO3l2VrpYzHshNtxcAzS2YXWbAhP5Ks//CtvTkzmcmrQrdeTTLXsMCqTSx9ILbDlXoD81crPQLQh/V0l4Wcv0bQ5AzsTlPutGJGktQoORptiUmZaTxqE6bq49xFB2iToo8FEsJnOjL3hz8Wh8TnPHAmB704/B3yl4eUrvafZSNedeGicsklHTZe+Dgx2WW+d9Nhe5qPyUje8XVqY1nauxXZ3GyjH1Yaa0NC6z6e2cE6Dhif0nH7+eblA1iX7t89XdwnQm6pB5OWVzJpFHD7kSuj9uG/d0IhWL4XKatN7fTJcGPP/PxFHPlTMp206vuDVm8qdz3C1A/ymmoiHlN0Q85ese+Mli3cmO7hNMFWqO4miIiBzie21sN3ogOhVF6qGt11OxJeJPBxdLLx4BpPC4CSXbdiuR0mbeTj+8MRpGY83NHycyrTeSvJtrmEbYJo1WWMkoLbkSRrm75WXO7j+/XOrwbRSXdTh389WijKJd7EvlddvfWmKR54BOwmyNk1GDOwGvLeUlo6ojpu7Ug73OIYZ8XGvleD/tY7IDlw3OBeVL6RNEUNG5etVEzFJAaDYMEaz9WTxa6l1MNo3flox49w62ser/DKca3MGGk=","layer_level":3},{"id":"5f6ff167-f16e-4f8f-8266-00548ce0f9b6","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"快速开始","description":"getting-started","prompt":"创建详细的快速开始指南,帮助开发者快速搭建和运行CRM系统。包含环境要求(JDK版本、数据库、Redis等)、项目克隆和构建步骤、配置文件设置、数据库初始化、服务启动流程。提供常见问题的解决方案和故障排除指南。确保新手能够在最短时间内成功运行项目,并了解基本的开发工作流程。","order":1,"progress_status":"completed","dependent_files":"pom.xml,crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:25:35+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWju83LC7H/jAM8CEAvWT8huE5OClmQiIfNYNxHQ9s7RRS2mtAecmmvLPgKd6tawZUhB5KZnZSF5+8AMkH8jMNbukZfdZqdronEKkTAjb0Xui+g3820Sdih9Ijnkr2dVJTULtip4p7QaVr/sCbZvzEuNJ7fpWgmeBzNgy6EPgexjo7E/6Anh9tIPIwK5pbhrlOFOV4uu2QtML/o0V3TkPUJNRLHzPFAfj1RfX0NTGGxCmUcJBHtW26rVURVLG1SVPsaV8epeI67z7BsaXDX54AzJbWKOPFDsT6Mns4DededVnVAmcIBc+HWOSR0QgXcPmLUlkC+kAI+hzeEoHKQgD1sk/9fVotc4iC4aPAuyf71rygcOsJXEjOh2LBItJzkCD+RG0Hx7+d3T2tfy1dqjack2xxs3hXpi1nIC3GbqscmsPiuwCDMgYYTK4vgWiIBRVUG5Xd3zw5RttFvLT03rfQhOTJbJyDk/SCFhAV+5RDc8MQYcRwsF5ru818HnMrVEtcsSq/LSqgtpZJjipq5Yieg3wixQ5nUv8GBV8Po8cjva7+lil8gnUAXwBAYDESIMuF4cKQWsLdYUxnQXQICY2BBiW6hDjHjw7juMLIDGKt1eWp9+00+k2dgp+KZtGlYoYLgUx9yBAgZ2Yuj/NF7jE/+hD/w46zRRbrDUKNM/icU3ApRGfV83KvryPBQ/zjGzDqXBJTKEYWl8e7n0tMJFQ0IicN2uzLKvDxaJbyy/D/gXi+Vqa/2EDhdYnrhLDk5d0T4SlmgUJ1ytwslFy+oVr0W3bLTaOg7afgKDyRB+qPoAqm/HbAt8Q4PfprzZweoUUlXzvd9ABAA/HvMn5TCddpv5G1N9AblJZx9+gcZDb3NUCIBboAgQfUeJqs1pFLo4tsPsNOE4iIT+b46/7qhZKFswPL22LJbIBk/GrwZ8osCDsw5Bk4TrtgW351ILsPi3nVRwKRUT/uB+Qvoyngn0gL+G+m13QORAtHV3WFkFYQIWOyrPugZGHjxYHq3MQcWIQVS/avVHwUsb3TIO8MqHh2uJQ"},{"id":"44c82594-e392-4a1e-8517-2c526989faa2","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"技术栈","description":"technology-stack","prompt":"为CRM后端项目创建全面的技术栈文档。详细介绍项目使用的核心技术选型,包括Spring Boot、MyBatis Plus、Redis、MySQL、MinIO等关键技术和版本信息。说明各技术组件的作用和集成方式,如Spring Security用于认证授权、Knife4j用于API文档、Jackson用于JSON处理等。解释第三方服务集成,如钉钉认证、文件预览服务等。包含开发工具链、构建工具和测试框架的选择理由。提供技术栈的版本兼容性矩阵和升级指南。为开发者提供技术选型的背景和最佳实践建议。","parent_id":"673ed306-0e91-4381-a45f-07865c6c3582","order":1,"progress_status":"completed","dependent_files":"pom.xml,crm-base/pom.xml,crm-auth/pom.xml,crm-file/pom.xml,crm-app/pom.xml","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:33:18+08:00","raw_data":"WikiEncrypted:w0CkdCdnXCcvlN5xOpiEhEX3U68GI0Ngj6azFMJo9xRSxuOblJXg8Gncvj5vankATp2aJeXH/Zz4LVKH2Ep+cKjWgx16S0ipU3KkK2EtlvXy6LXaj2N/9K9DSP9zPH2uIIbIn+lx2VTPF7lCwvm6SoN8yoQwdBxCAKy4KBTfTCFSr+WyCBgZaGrLcSYHT6qbUyvzo35eeMyCwUi62d03xAuV93u+ejXWhMOgLFu4+XZ1+zNRYVz9mbEBcaqKpKlUgSeq4UuwpduCdv0XVcxFl0o//BwrvFUdu2jCK+qwgdmbQOygPuKh681hedcQ8j3GBhH8+SPLCRU/NrPhUspAXUiq7zuwZQ/7dE/gwVNhekMz6NM656bqZb/4EACP0yOES1O//2TWNd0TzMOkj7XRYUUHLMRDVs51n4j8aDIr6pzBhQJlrODWBWQ0MmRpFsbO6kpAapRk1ori60jsu5zbdJSOq/Wzc8yn+jcqTjm6PyvTI/nBQKWNJbwgBI2lBn/39pNFJKndXt9t1FYTL5Z87WN4TP4WJ2MqYJ7xDlJyHYp6lQg6uv4ldq+mwfjEWCjDvMN8ic9MsQ27W9751py+fbHkty9aJNpZ9m+iSzjoKc98YXvGkfGtKXS3NuhfwyGjuxWBQZm9zylI+/6jtu9xsnAiI3kb+6+LZSMaBWf9M6yZSCQ8Sl2lXfRxuMjS+9HdnXIpxK5LbL9AzE27fTurSC7/yzPDrFhvHpb3KSZTkkO/cb8oaKpPCKTBEUTmKBdHu26wzEsLuaTkOrvwIEvag5nbC3L3jnpHP4Z4oaWVf1/BWPw8gpMgbIFdEcegV+mHnmEjFxjywgJWZdi53GStBB8nuy/jN2idGHuSv085JntemmMusA9UYV70DbOX1mzoV8vecinqS4oetx/7cl3wilT4MY0t1crFZklV1Cr7IXLmHQjNEg4Pzh92UQMWupNxCVydWdPFMgv/nUZU4dm6EOxFzUnSH3nUU6zMk5JWl2pvK1KQbBOEKG3RJapcj6DriPaNbaiQqfp5zHym4eQ5BfF3qCXo+SPsSIG51SRB0tGsgCv/O5KGyGn3AtR1gKmP/yQRJWAYQUbQoBkbVivSfaraKjUm4DM+WFmQbh0W2HY4b6qlH0f+7fLA5NrNLSwf+KDSu9gBVw63uYCELp9x2bw6+jnRc7rQSc5gLzvmiwtmlWdOVgmLRXn3Nwa4Ra8AMTkFkc11yZbid0cH0VAYaw==","layer_level":1},{"id":"65c8fce4-7186-4278-af29-31083933e088","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全架构设计","description":"security-architecture","prompt":"创建CRM系统的安全架构设计文档。详细描述基于JWT的认证授权机制、RBAC权限模型、数据权限控制实现。解释SecurityConfig配置类的作用、JwtAuthenticationFilter过滤器链、TokenService令牌管理服务的设计。说明DataScope数据权限注解的实现原理、权限拦截器的工作流程。包含认证流程图、权限判断逻辑图。涵盖第三方登录集成(钉钉)、密码加密策略、会话管理等安全特性。为安全开发者和系统集成人员提供详细的技术参考。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-07T15:23:51.9003103+08:00","raw_data":"WikiEncrypted:6g8iffgXzed698CsRven+anxjuHeeTjEEAJKogu8ipvGnMkT4JQ8GNkeOgMIC6IR85OYF17xllaIweqk12c7GNraVBIpMt0ZhalYKx8T5S/vqcAOADr9C3CysrvsGoSAQ1/z8F2Fdm1Ym9bjJSeGMOXLz5Q9nBgjQMA7F317ny4bkUl/2Z/gAp1qx8yZdh6VCiJRUQ4945LNtIu0DKVdIr9vAsT6uJ4Uw7bRuG5f/CPQkr/s3KpjoCPA3zhvFcvTV0xFlsA2PxsyjOfnaXha2adQOlK85MpubPsxGoLAYmVacCwLt4QTOizJHGLanhP71huypBSYW1ow4qmJr+LBFDzPKEEoFhCvhXziFrl4S91eVNgt+gAMnbwP0MFdirzeAp8455gF3b2NFgIyM/nTEkpre+VxBUBpXKX42Dr1TZ/ZqAU3+LlF69eH/GMVmxUMeg4Cz91Z7Y1lM78/eacbEcwkrx1AcC0xfHhMTH7oswWLvCEgNLIQCMyKWajooZuBPtU4AZqNELeRJOegmkkb3+lxPF2j8DxXej1SQ4X+q5EcZj3j4yFdZ1sRuwpBL7gYf6B8Fln9k8B6IakJGb6Pl286NC3SDZ4mcbpd5ybDQ9tZ92MS4ArdKHmYm78bvw52Pmup65ZzO2APb/whQ/+iTKt/RlHtNPiOYG/V4FeRrBNEpvkaoTaouJxe0HYVKvUAQbqafcAw/pu1+Q4h1VjKXtNG35b2uh7L0tjkzHxgIsurHaQBKNylagg6gGyzj4L48ucoUPHam2ut68hZWuiWwz4vn85+z7AJrbbx15xXE64qIKwR1l84yQF6S7pT3pFuceah5ZP+o0lekaaMSGnPRZhPtOBOh+FCYb32UffG8dOknSVh3/sxihqmKFYEBt3xQZfDGI7pu1xqpkTOd9uKYuanKtGdh4b1vx150UNvs08bqHQCqVl4fn+WILyiOHIEskV5Xz57NLVd+Igu+K5E7fQwz0EMCVjhtoKGzjHaIZL1kF1twtCsrWcYSvMA03TrTb/TdzKj5JKF9aBRwN28r3FQlM+qq2ERxnuyJ5gReoqWTg4BPZws3PuwKKkI+/reMbMgaEXCFPPqfGMLRWHMAqO8WDEYxBLreSqx2bk7E0wzSwaKead5MAXINeam4ji3iBCFfbGss/FEBcOOzVAl4Z4SFdK8mwak6Bmosxpr5c8sRJ2OBrUBGnSIgco4+1QQq+TUYDR03TJzy3tCBP4X/KN2Jedthc8tF8H4+syxYC2Kp/lFMiSidFR13IQ5vcNnS5zM4sU8AmwvnGuh5qtBn1i/cMcVFDQsroOIUN1gmOOkJzt+2plr/YzfGWqjwTCNJgCcQp3U0fU9KJT0Hcj0aRTvea9EY89EDhx8BsQRalx2cqbQbqBpEVc6ViDwvnOsoELHcdzaiTxa+LXICnBO7leMYSUjc2E0hEuZb1k/hbN7nmOJYhwC3Fqi9LDR1Q9SNdAuARQ3oG7MRfTxhAPKzgu0bx3UjdNmSVNrp1mxFu4=","layer_level":1},{"id":"10fe110b-0599-47e5-aca7-ce0be9725463","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"用户管理","description":"user-management","prompt":"为用户管理模块创建详细的技术文档。全面介绍用户实体模型设计、用户CRUD操作、用户状态管理、密码加密存储等功能。详细说明用户与角色、部门的多对多关系映射。包含用户数据导入导出、批量操作、查询优化等高级功能。提供完整的API接口文档和使用示例,涵盖用户生命周期管理的最佳实践。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/param/UserPageParam.java,crm-auth/src/main/java/com/crm/auth/domain/dto/UserListDTO.java,crm-auth/src/main/java/com/crm/auth/domain/dto/UserStatsVO.java,crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java,crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java,crm-auth/src/main/java/com/crm/auth/mapper/AuthUserMapper.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-01T11:59:25+08:00","raw_data":"WikiEncrypted:omFBm9/VSXD3WIUtSV+9ITUDa2v+RYq+C/fLa8IO7B4qQ1XHnATlK6m6IxdkTmn8NY2ajKuiE9lLmBkQDMFcURRqkg4TKDRHcFEDVnbYWl/dgd1oOhtlZ+3c9jxTb4PQkXFU28v8wyZT/8cTB3Syp/0/L1Lfz6Qy/YwWTSd57sEw3CVLLnlaWZaagpQS3vCCsuSC683+r0GekuWXZ3WnfPFtlcg74Y1Quvv/Px/Qf83fm97012UtjEJTUmjeD6+j5Qq1biZgkkp9UzToM/eH4GfEsBUKOeUZYqJZdSL8g83HjeMZZpdsf5H3XvRoEU5uDhiWoKF+VdnuHZc/TlGR/+/y2X/wH8mUpP+U88/YktM61wtm+a06d+1Bqps9zntqxzm8uMWTjffxI+vXsWlVV6Om3tNIiKUaDLdE7RFz3LemADBpvRb2Ek3Z163NArwTlI9+A17BcxGPtsY16T0MkNSdmDaBB94lsrexAB455Uj4NmvJPQeMcq9RTqFlCxQwNNmOvk0dl7lN6MijCbfXUVlXvXK+Lv5AJxIvkZD1DzCuPv8c1omWgoYDOQPjbTzXEqYVn6xk1A/N3FwcmpJN+Lqeug9vDbxXLHvYyuY9Z2BuYCqwU6wYyiqcsAtfAtR0pvh3T7cZBTCbYm6pQQXI3er4qyjLbJCFic3QoCOJRZtUIwo2uqbPnA9i7K6px6AUcbXxv7YPt0kQ/DOCNsXif043ADwxFxR0BsDZv/NhFaDSxwGR+Te/UApHHMhN/gKOoeedrK0J0Dys3GzyTrOaybXC5SFX/W/IQxEDHinPKPUkJBvIArpxo03jgfE16wdspZpN/jRDpuYkCHLBEpbgX8GuHE9h/zRLm884pMl2I+ODc0M85n3gziIRYxa8UmKvO2Pkigv7zl//33xWcVb7tSk4pjxJ1hmbNoxw70YZPpzTCtX1rfXtqY4UD8d2euK7LGQeKwVyXo9msbYp9PZVo/Ts6NCuuY/Tj8cz3qnINfxxbPCMmtNqiXUMGhrAM1WXjguNyztL0LrrgER47f3V7crdzB8WOAhUaf2/VJZdGTQyodF+9qRlRwtqznmpu+/rZbKcs3ZqPJPJ5GIaMScsQUNrQls2eeJ68jG/Swy27Ar7kOZfrlrrZW00EazC9aToSjCFYzOM/ge26EYHrQbPqj3RveapB/gX59mHaev6bCg/lcONcVgepBaqX2jGh7TX+oi9WKgjO6kDVm6UeCONK/jZ40YBtHG1x7hwkHdkNBW8xu35R2o6rWARbBac19Bn/P96VzOZ9i3FKuiN4amlov71yBnVTCL8aG8bCD+6g5w3gRO86pV+ncNJutXBlarh7nCFvFatUjmUOy58ej5f6TBwtHJPEuD09OUD4kuc7p+9XuPlPmBf+XLSiWurKybmnhVveG5KRpcCWwbGVBGOqoH6TGL5BcZKgr2rOM8rxejnHFlNT+5IWKPYOGpgMwjsIlt9NFIo4Z6VG3xBIFRS45ljJ8uvyd3Eb+CZXORyQn0=","layer_level":1},{"id":"6d5b5dd3-2110-4c67-91ab-a4af568b1fcf","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件预览","description":"file-preview","prompt":"为文件预览功能创建详细的技术文档。全面介绍KKFileView集成方案、支持的文档格式、预览参数配置等核心功能。详细说明PDF、Word、Excel、PPT等常见格式的预览实现原理。包含预览URL生成、参数传递、缓存策略等技术细节。提供预览服务的配置指南、性能优化建议和故障排查方法。解释不同文件格式的转换流程和渲染机制。包含客户端调用示例和常见问题解决方案。","parent_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","order":1,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java,crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java,crm-file/src/main/java/com/crm/file/config/FileProperties.java","gmt_create":"2026-08-01T10:23:36+08:00","gmt_modified":"2026-08-01T10:34:15+08:00","raw_data":"WikiEncrypted:dxMhctgo/8krDJJIGvp5je7pnWhEGjPpcmzQzTYORNrHS89p2z0ROReU8lnJkh4uXBOz6IZfJJ4ZaPZsYZngPVK1yXZZDvBeVxrSz99iZIwZrjsWDcO/zHRCBXofWF5ppeJ9kiFjD0xAw+58zXgbLfLTjqPSl+cNXnPTFCh3zJIKeR+MVLajfbfP0TsN9kCNycb0ad2IgHxBJsyIrJpR8BkfgTdO7g+BFLSItYUR7/ra7DlU9oOvaJYbHbO6XdY9qHeK/JAsg5tUmTOJL6NalK8bdAIKSu2ASMHVH7iq7OSCupvPcUV5Lv6Qid58UIkulru+QTRUoTBbdOoOA1+7hVywnXS4ETxAeE7ZpOWwbZGc1o18U8QYSN4QkGCRkM+i9WCEWccvNKkL32bgEL3nO4jJurqmGDsck1ME6c2OxzoLCNOlG1hdu3S7UXZ/1I4g3tJFhob05DWMoGwFUwTt4LRndIqWwrq1VX6NrQD7VDlpAEamjfjx2+D50YJp1wTotyjGAue85eZwUI/O7uFTX90R8BWv1QcwMyQSmbtfDk1FGuIwVs4RH/7i8E7Go93z2awjMGeOASQPzd9Q1DN/knciKoZ3fT9zvh6TuZwmnZbnlO3/7iePFcvhQtKiuFfVgSz7oD91rmgbrRz3lg6ZIbQK1w7fHfM8fLNoK3Er7xJTJParYYOmcU9VeyZWK/Hgi3dBmVShiPuQbAFaW8LEiSoSLOetpUpmiDK6gqhaPuhV5Hzm0kCqwpVRm8m+T2Td2lBBxkwVogRQEVei/EYenbLJ+ScpFiqicf+RAZPgDAl5nnoZinmmzhbstkbCo5pBZiEqLOvuNLy0NmZYmaqCyYgCzYmVsNJ143UzFkzQRkFieGecHE7chtcN98Phnc74NbopkEgy/8T249h3HrBWYE86uaoybR1n0EE3Vm8PX/mf/OzpVGvNY3vy+0PLn3ViCkkt+X0qAn1fgNKdMtYtrdihPqXMJ7u4HOJ9VMa8I0pnw8Oy+2RAVQw4ceO8H6gSYjdKT7eT/1K301dVXX1D9ZL+d6Up2vpj28quYe1Ry/nFzYNZ01evQgq12s2wWMBd2WgDbVERZUvmyzvpAY9nTbIbg+PfTGEa8TpNl/JNV0Tiq3H59C1NPvwrBnb2OsS8MX7Y1xhgyCKaBh2ITYAqGvbKZ/3aNTKhCE4fRr7cmCqDGXJw/NqhE4hVpUMuXhW6","layer_level":1},{"id":"944b8007-7a9d-4625-b67a-994c17444047","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"系统管理API","description":"system-api","prompt":"创建系统管理模块的API文档。详细记录部门管理、角色管理、菜单管理、用户管理等接口的HTTP方法、URL路径、请求参数、响应格式和权限要求。包含RBAC权限模型的使用方式、数据范围控制、级联操作处理。提供完整的CRUD操作示例、批量操作接口、树形结构数据处理。说明权限校验机制、数据隔离策略、操作日志记录。包含复杂查询条件、分页排序、导出功能的实现示例。","parent_id":"6e92351d-04cb-46df-89a9-1e2f43b46552","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/SystemController.java","gmt_create":"2026-08-01T10:23:40+08:00","gmt_modified":"2026-08-01T10:35:11+08:00","raw_data":"WikiEncrypted:gWB8HBj+8+/15rQhXgtMjEKq2kOmky4szsRWbrRCDYWdhl/hPhdkhdxXx82vgK0Yq4YovLidZUwMzKENzTC1iWLHZP7CVhc6MA/Pglf2CXvMqEKG2yvSGc3y/Z/VXVn1FpYBolGlyUFwRtfohsXNYoxrpja/fQuNWUmT12jSfYFB55Tm7n6TDp4zFH7k94Wwwh85nBGP9Sp1qHHpyICcOzV1t68+sjY3ZmSOCgOAmvRKKlgIWsMUioaMHMAtmqOTlkPlUqpeZyjjXnksLfBSeS43nyEUOUthyGbP8JXY5TUJmTjNsCVMVZrqEcuw3mR/3l1hS6DzMgAyJfNk2LCsGHm3Pu8qB7w+j2B9FzSF85Dv6T/FGFAmhQbsx3dt+tUD8YajzQXFUKj9Ce4Wjn+hHfnsUYqPgw21xr02QjmTAkfIRmvH7Z8C19ncMrrgq7rlDbPZK8b2PlTNP3py2NCirSjB/L8TDMlawckMow7JiQ9Y5XdSuCwBiR2ajf4EiHwul0VGD1WMoeO5u40vkVW1F+BL/hEIh5ouDXR0yYK/d7b7xRaMHfAoel9uDPt3mUO/om3iyQe/ZKKMUapY5Pk1KSl4+jQ7+SzQVZ1O5w+sVTvhMOGL+tQmILsnZ/yPu6IHQd9SWtE3qw5HfdxhypeSOCGLhBycFGuSuZ+RxE/2ItXNNBZAeOaySFzmRGjjO3jcGaaMK1FrWCPMiPSrmEXltZ4IzM0C/VvF3U9qA5DSSX4DjHw48i5hYLEA58yrc+c3Q1bSE33m1Bob5EXtKOSfUC/yPL4X3CktnKTC3E9YGlCOUCZGJjEb+ogzAxZyWxv/YqKi616rHCzDtSAmzCEHdqKYlA9p3NTn4orLMaq+zLYa7G1NBj4zWGhY7SKUtDx2AnqDxwE1yiZ7NigkBeJlqMNNa9P6iNRgcv+XvsQjUhJmpS3tbxgqbwO1RK1ZBcu6zdwFUpZION0Xs0INjXT0gMhE0zfcZjrRx1labVSXZcf6v65gQ020BJ7p+U5rQNAQ2S9cOwrCC6Frq42bJ11nw8CMQP5WSaLvp3YO1V9p/301GM5cifMoNqMmozvLCzlDwAwF+oJ51H2Kn+R5PL3IthEzNyuhLD3Z1IgwJ507TMqSH1LiBBA4zAJEa6Zpwb6g","layer_level":1},{"id":"36b2b0a8-2baf-4ee8-8bd6-9a92f4799c8a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"基础服务层","description":"base-service","prompt":"为基础服务层创建全面文档。详细说明IBaseService接口提供的通用CRUD操作、分页查询、批量操作等功能。介绍BaseServiceImpl的实现细节,包括事务管理、数据验证、异常处理等。解释CrmBaseMapper对MyBatis Plus的扩展,包括自定义SQL注入器、动态条件构建等高级特性。提供服务层扩展和自定义的业务逻辑实现指导。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java,crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:35:16+08:00","raw_data":"WikiEncrypted:5LF7XW9XcPQyjyrZizRHIAg5yfQq8gr+Igxc7dr/JkZ+iHvLFy+fvt2l+6zK1Mk6pgy1AtNNvhs9N4YswM9d3MJDFFyRtBYQexOmkYd7Rq0XQ/v6r/SAt5WYx6m4CNHsi5QrMjD+YXb5hxAPQyeKifRcaagvF3AwKgVQT0VP4HSV03xcSvfOXgSPV0E2y1DY0QD+Epxc4PdxM5qBQwBjGKHjoPJwIR5IVBP2nXOw/G8v8HKUvbUExnNNEXz9YcXyh/+aRP6ibonmsJM9yfSZ3VH6lyAH5YiVdBvkE9Fg5YXdLhz5ZQSKgd4txpjtoUAn3fNjM8QfKhrIoh+Ihdkvz9E0gfvWuFdmv7vvvls3yHuJmsGRCNTs16m1hqMOXon0pWQCWYiT8yTcCjcHgyvt+EiCxY13OD2I0QHMIGqkSbE/cEkbzQMe4SM3KI8EblypMjkK0oVeFMnLZYqZNLsV9cJsgE0Phfr8NT0FxT2dxSN7qxODAZjWpHPTYsQG3gTKDUpP9Y7um5NOkq+4TkIrPIE6e+Di77cDKGWK4FzBn99eZd3hQ9LRGjam9/tARwUBWEv3OcjvqQ/HHn+pLttRgIfSlAHt2cz4YPT7Xm4hNVnR6HY6aRJ2rHG31PKxQT98b0N9eai9jWl64IvFsKbBK6ExpniceBEHrSnAqbJMIwgsGQqDQZOediPxpzWrJ4OmBPCpSk10rI4w4xBuWQbYQC+sT05i1VQed4wW9G1Oe0mu0A69N7egEkArqpKvtKaYbTRP9R6247Rm3RmTUCSOnAWT7+MzwjZmYDAO4ZeZ6sZAZb1eYpZrC1zU+9Qw5Pa1Rhplw18XLHP+gIgH8fy390oTnTao/bbFh/fah9/8Xj9EFGoeOCJR07yn4EpvXVuNuwkFNM4V8r1ueh1Wv3YksOPaAKxbLegz9OBw/Jlpz5HQWoWLaNBixawwu6wwFVCnlgGqcF7+PJHUIZJSt753NtNg7UXS8tMY4PkrUdE2eDaN09KOPiQzJCK/oJY1HA3BhPkMhoe8jOSKfnXjwgNmhbY2lQcy5OUbWtq7LfVCBP5oQY+ZljwwcdnqMh5BFvdy5dlXVrHgzdlWFui6lZIZDTA47Wh2kNy4vOuTLofIL3BaSTnDhvOb/4sxJAI8cF7Z","layer_level":1},{"id":"93798792-5525-4a76-96d6-4cfffc0b6918","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"权限体系模型","description":"permission-models","prompt":"创建权限体系数据模型的全面文档。详细描述角色、菜单、部门及其关联关系的数据结构设计。说明RBAC权限模型实现、菜单树结构、部门层级关系。包含用户-角色、角色-菜单、用户-部门的关联表设计。提供权限继承机制、数据范围控制、菜单权限过滤的数据库支持。包含实体关系图、外键约束、索引优化策略。为权限系统开发提供完整的数据模型参考。","parent_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysRoleMenu.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserDept.java","gmt_create":"2026-08-01T10:23:46+08:00","gmt_modified":"2026-08-01T10:36:03+08:00","raw_data":"WikiEncrypted:arCjhUL6OOP3tq0tMlrtoET0MkpnpLCYrhUowNxgsxTcRY2bN2fxRV4wLRIZYRVr3pi7f8L8Omoh0HgWw2jB/pthz6wvbifEuEoYIsudSB0hM2SYk0fyeYUsj4HcFuL5yWD4ZUbRrVVwBSMakUT1hktC0m7Tihfd3J3vge+lkDM2To2O3JY7EzeGUKNKxxn0ia1dLdf3ywFeycd3GXTG+dxoxovwIv382EyxEqEKKODPA1Tx3NOaK0m4WXzW0LoFYa6FoEw+SpsjU/fR14+jKoqVCyWcM4xcO/0tJTXhkAA5oN2YxtyTHMfCaUtDQuVPD4esnvF84HoJD2g0GumhmKWfKiV+feWUbbCM6IvDvYN2Y+AaSzKE8FckzEBmbWvSbh4YKuKyaEFm2dOFlAUSV/+5w/2JjgoSoeBvpgVOJH6Euinpnfqe5STeR4enG0WvxkS8JSblXmTZw8UDwKqJ9zTkKRmmxNSfyYFcSQFiwLpxAR4AbYjNs8cfpM37QgKzAFgvytoyYfcVOMJjUvEkGQZFLTYwfeS3JDVToIDdMXJhc90k8BmgaZEH2e7TP9GDJgJTQV731bqWkoPPqEvphB599W11tqnRjj77CPQm7w2/JX0eTD6lF4TXBivtsF7monnQyBCseioCruxY3nDIhXz1o1WyDv1hRzXCFE6KlJXn+SN8Qh6TVES+1FKrH1dIhK+CDlyXNKDoFHh2SJuwW3y4mNOsJ3b4DUs8+Ulqgp2dSWAOADqooMWf+NSOhjbUpWHeZAvY1SuyKMGxcNe7q/aLYDb16Fg1G65lQ0LQMFCMHmowfLuF57Mh8C56dELgIUA46XQLcdFfYHZ/9X5sK0o+ioEBG+MKhGjN4RZ6a8Do4WIMUl8TCb5llEPBwEBIIqgikY7VyCOp4QW3xFLgDAU2QTMmXT4Ua66zvytJ8Y8eMcyeh72ZEuaOUP/gbWLwHk/EXpMXbHahFusKxAHNCMkidjGCl2HPcPqzZ9ZQnGISB7EEfA0swVNfOu6a1ES65dVRUjSxdAVmjS0uk6GlBC5f2pj6R0arfZFEqphPyf9kF/K8W51YX/7VWmeT0SsNSHDswWKvAY0m0+ekatcf1ScjT92b9Gi1zTfw/a+avaNLUydnAIDyZ+J50anxW47kuajBHSMCBrzCSE8lCNAtHDUVMJ7GyCsHn0kJeevijVqYtP8hL6pxVGPxNhWW9MwpvKYfH8/cZu384XsWhDyl/76ZsFgYCsBr5EcrUTLI3AE/la99zM8BxplywfusBcqFeukPGgj+pVuQG5kHu8lemjBmxkWxKeSiaDsbC4DBOUeE9KkGIVRnu861d+weEdB9r23sqLHLE1lbZsONYNvsVMFAjTcUbcaCk1iU/jjEywQQT5lAc+Jibc2Yh6asTGNY83Q0XpqNZmxwxOSVfbB7Rx/flkb/XOixKIta11v9O+g1izeeViIAgsqzkN5zbZAcsHXegIyqZZAK5BocWEL94uhaDLbCcA3wYUa4UtbLLoYDuh/CX0VGUa6bngMHrgzNuNfYlPPd/QBWt22CIfzhfeXBUn2fEqrbkXTS5nIUrkk=","layer_level":1},{"id":"f361d96e-498e-4429-aeb9-97176536e9f4","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"框架使用","description":"framework-usage","prompt":"创建全面的框架使用指南。详细说明如何基于基础框架快速开发业务模块。介绍CRUD操作的实现方式,包括实体类创建、Mapper接口定义、Service层开发、Controller接口编写。说明MyBatis Plus的集成使用,包括分页查询、条件构造器、批量操作等高级功能。介绍事务管理、数据验证、参数绑定等常用功能。提供完整的开发示例和最佳实践,帮助开发者快速上手项目开发。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java,crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T10:36:12+08:00","raw_data":"WikiEncrypted:09EvoZqOsAftfa6x0cY6Td6Nt3LX3AYa8SjCt3eFts1+TGD+h6Gz3gyZMlUyq5Bq8REoKfPUo/y/7DCab+Oh4kHKINseYJTbSpjiZGJw0FYftv+7dy/lLN+ibX3GCF6EBYEGw3p5BIOqv0VnLbR8P/HnnVT2wnJroOYRdgdBeAEezoM48A7/O/YWSW0HBeat+DHgTPtqut8U/PoAn9EYtM6xNXalUJGUbqxVOPi2I80ZiD/lSYgd7kpNxdHDfyrbcnrFIhGqN/pl5isB4izKPgSKiizWIqUbbePF8olBnz37DPFJPyWViM67gq2OFtAcA55fcJnwTWbDDtOBP1D2GTNkOTjjOTXfDrP3+WWdOOFHsAyxQocB7mzK3XGtc7OLgitmVf6pgitwLfpb3O/2HgORdmgaKVhXuuCoQr9XOAsgI4bCmzKRO1OfLUQxHVJVHyvI6Egn1cUjIcWYFKKPw738iOAV/iootqZ8rVuuDf/5qmWfIia7hka7O/uJH3bKY+6Oa+jOi7j7ga/Y2HzpxPUDM74O8mjDcF1L2ZKTXFCOtbHg+E5AcOD8OvFEi3ph5hYKHeMsjBedNhYh8f0L06d3RHcwaRlz97C86AN3bUcCgsW3wuwdlzMtbQhmdQhE3StBuWvvlOeYP0DaA8WmiqcDHj80SHSx5xD+k50UIeehmODgMFaNILykSZi/CzamcAqHx3cXx0vbiJVzlwE5T4AKTHc8MszJT94QBmg1oiYzknDBK4gNUnAH9bMfbLtL7IZEUiJgjaLe/tmUl1EuuWPkPy5bxnR7+hd9VBaTWB7J053SH0L/T67wNpYTUVvMovoa6cedJ59xwXv4WBCE3j+XOfsTMr2jZ8lutroDNcJ8CgSPFRlQdwpbeK3TD5nwGTqu5drkB7pfurGD40F7dF27gNX1BnC14z/i9ZMS717jnrWsNb6YIbbcRYPr/Yx1XWm2EHFQzVvANW2hbX5VJ6mEIwBjUkPTxTHt+K7TAHonDHT72ynEQUcdYZGqBY42dX2sl/JjaAHGIBodSzKcLjBsv42AmfBAE1VCGaQ429CJuZUYMu/nHil0E411zcxs+9TqijvcsmwW0cwZktoS7jGccqXPiCVoxSp4kp6QXAUAQihWICua7KaXTMuuyJYB3k6gGW94W2LYRi0ZJ3XKpFoQRp2rKwcI9lvJaSe+SYnI8cZx/9VaXcSGPmK+LVOjgTe1F3to1pOVL5Lj9oSurjXiuh6PjxfxqwhoVtGK0+4ByOsFyt/x2ysJGhnPiF6sL7TOJPVIQUHGWQss3vW5GPR0qzcEoE4Ho4UghSV257sCM/OAcuiz5+38jS3JOiW4IHAP8OLYl/XVb4ZrPW/0MDYPkd69tdqkQvIhwLWJrEq8PWvmY4V4kOqTNgvU4wS4","layer_level":1},{"id":"5c0faa41-8ed8-4869-bd14-7c05941d011b","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据库配置","description":"database-configuration","prompt":"创建数据库配置详细文档。详细介绍MyBatis Plus配置、数据源连接池配置、SQL注入器配置、元对象处理器配置等。包含数据库连接参数调优、事务管理配置、分页插件配置、自动填充字段配置。提供不同数据库类型的连接配置示例、连接池性能调优参数、SQL监控配置。包含数据库迁移策略和版本管理方案。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java,crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:36:11+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkFIbPLS24lpjasA+uCz79jMeOQpuJhuP44OLRhCn4MTH7aBT11DiXe6Thcw/3YSVSgf40f904eeFYQ9uvFUD8Z3j1UT+NAzNp3CvGaQGiA1HCpDsGwO0VE+lTDSplK2ERMIc0i/lAsq1/YP9fUHnoH1DUa1gq0NkYLB2rVwjQN9DLOm8XC+mjowAf0iLzG9ack2BctGQTMFLFcmX1NXhc0gR6coLDHNtgbpNlO92In3Mk7urgzmJ3nhDsXwiFtB1dW0J1p8wJNrY2tuJPn3JqnfY/nfbJ9F4mgG7HVAZKG1Rin1UflKTOf6K9PrEfyNviMjxGqgXXgkLEyhnA7TiAXe2gGm4ok2nPJbaZ0SQlUU/SWFSSAgQ1Tp18zeUic7NhGxNsHycD1NURf2pIqZhX9it8I0dL3Vx8+pFOXfVXifmey1a39iKwrfYUbj97ZXdrPC4C423ntORA+enwH6MoVbzq4eSFEOJcWDlyblI0ClX9dAMnPwLiy0h6W+vizeVeg0HioPRyyVjGoFmKrxLSN3JUVaCoSm9OVjzvpwMat11B5N6yixXzZoZZ0oS0w3xraKZE44lA49SrG89Iv7K1tI6Gqlp8F0Kzlf+aXRUuk8Dqm4FJkIFV/+f5Nw4hI61IQ0O6CrL6LJuLl5SYBqXDcycNImHLv1nkvBd9c9BwgW9ziAY4bge16YIWgm+UWeBvFyPf8BgrYsBLlC7N29iVJvW+2gJikxuU1SIqGuGnOsW0JdiwJwcdvwDwRwRBvG/xV8IzKm5aHYL3nG3tYDqOPGKGXsUwFDuS2c2Fq6Me6H7x5G9xPfSA58wdJFa5iUWR4XRR0HNrKS1tLV6idMgD4q1JVHERJGmUQ1rshd2/WFWH7vyS2id5EBR9i9rdS81QQg4ND5D/2YCL5h5t+I403Yyx3i/cyqMuJybIN6ndlwjtA8/oZPJpMNev0ioNDOb9w0i9xoiagtBGCh7j7rXfU3bawT9gokNZnIV+dkaRqDjU7zILJURYf5rrRpoZTChiEm+AxPSbpTjYrLgMF83NkiwXvHzCZqj+jl4tPCcYHIk+E442udBEQ7YR31DmDwthknlfVUoEd0bCt17/hwqyuHoqJQTQujJGVG21i24CogDmqSevn7AFaq62VWNW/i/zSKSeZjsczfiXCH3kvZSUtw=","layer_level":1},{"id":"08498174-3340-4779-a2a5-a6806284023d","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"基础框架模块(crm-base)","description":"base-module","prompt":"为基础框架模块创建全面文档。详细介绍通用实体类、分页处理、异常处理、数据访问层封装、工具类等基础设施组件。说明BaseEntity设计模式、CRUD操作封装、全局异常处理机制、MyBatis Plus配置。包含数据权限控制、缓存配置、Redis集成、雪花ID生成器等核心功能。提供扩展开发指南和最佳实践。","parent_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-07T17:24:48.48147+08:00","raw_data":"WikiEncrypted:Sc+AnokZklSlRQqxQ+1Oxv7Tbfk6f3wyshUF8xwOVLV5lMwlT3LqCNRpGYk2vquujbXQ9Mmcq8+U4XyJQBjCOU1r8I3ZGXKzYfouTsPTavHDkJtk8bYgTlIOvVG5ZiSFXijv4P3aVN8gBIjeJXXAbAfu9WmCRVMvpAI2SuRSkoQLmTdoXDbuR4JiyhQ3tL5kufquQXSXcwyGZxqDit6kHWQ2DeuY7VsfQ7yOsLIQ0hUh6ckvX0pfHqoco8XqPBdEOoskZvSd58l+a4IheM5o9M+EpCOAciwTfiFPfS7m3NT/h86WXhSnTC8iXxmsd0FRIdZnHDF1qB9Pve3KUQ1HGEYpV22GRU7zvqQB2zenKm013wgJLoYZh7WRoOxujwjDVLtxFqHtoSiOo13RVjvp6mu02lRaQ0t9WN9O9OUi1NtKVjLU0zHBlDORIU8bOt77Fvo+akuVhpJaNts4SO/2W2uiqtrDR9R84/LfbufR03pxC88bD83FYl8/cQG8c2ZlzyUqnfKwhvcpzJENBNvMomYQK7klZZSaEByAQkBFkss0Qa9EpOkVxl/I0FcmgipRIwyYLSp047xUqL7psFI4DF1ewkdoI3v4QUssSatIjCOHKER++qammYJa0Zs+9qwPr3SWh+ueGQfLCcFmcmqXnrP2Ux09nK7IRmJMcwq9ovr+a8wGeCHiF5hN7f/CLA7S7oAbDLawJKhvbzqM97zOy7psunSNVToU9WpYph0XI1EZsDELq1nrHDOobOvi/afmq4L8AdiYHtMImRuqIQ35wxHCR54sOlJcBhXcI25jcfLJQNNFPFLdM0wlX0+thdK3FQs4lxrKjG7ercOxAZMQOuEkSKo4Nxqvp3MFoq7+UrjE5DUtLH/C2WqfaQQMm2ZO3hcUKtYIbQIYbBM9ZVIA2EJGcbM0uFaHzi7wUbJW98hf0aFa6SHsg0zF+r7rFwsrOb72YcGSXexLDnl/Voc+N2pBxs6lidbThvPOX1S69jffo3wTjREMoWqT8es59d7XM2Oma7pJRiPEYBy1nTcUadiItQPUjf9GduqolIbf8y5nLr0hH1a6zeFsKPLOyXDYqsl8MTsG2sKG4PLHb6AsLvbiwea7uX8aOA8aUN1U2iuVWdp6u4gtwtDTyR/sEHCb3vbH7J52nkQSqdXBpIULGczuHB3nobp1biZNLq+MddfOoXwEXlYSi5gwNgZz8rR/wOaC9YkQ2ygmnWneOXWsgY7EYbcootxlWaEpH/e9mLM3fLPnuTjOAbNznzkhGrh7PVaFt3s5oeEhWrrkXL16tLXRdq2v98vfqOe2QpADfWyh0eEBRqwXlDJjM9sbiUtX9OKjho6xTV9LXtlE/u0zJ633QWOmw1gzRER0EOC40tQGPBvqCzO59vccOYvC1WSQljnXrgOL5ieJKq4kV+0nfqAX/PjZvbKCw2845JWSj49hRVPXNQ+TV75gYrmw8NoH","layer_level":2},{"id":"d2b828a6-c055-401e-aa37-67d9c9fbc9fc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"授权模型","description":"authorization-model","prompt":"创建CRM系统RBAC权限模型的详细文档。深入解释角色-菜单-用户的三层权限架构设计,包括SysRole角色实体、SysMenu菜单实体、SysUserRole用户角色关联表的数据结构设计。详细说明PermissionServiceImpl权限服务实现的逻辑,包括权限校验、菜单权限获取、按钮级权限控制。涵盖权限继承关系、数据权限范围控制、动态权限加载机制。提供权限判断流程图和实际使用示例,说明如何在Controller层进行权限注解声明。","parent_id":"65c8fce4-7186-4278-af29-31083933e088","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java,crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:48:57+08:00","raw_data":"WikiEncrypted:Jgq9fCpm/NkqSNIWYhs+n65qPUPaq4NvEWloehv03gJrSw+5Oh2lCz6oEq947lSA4auBi7JAuodKRlg2DrF/1XSSrqkYNXPPFp9USTAvjm8JgXSppCDv9t3x4D6t6HXt505la/+0gH1Iw74jWoS2P7yYAkcYwAO3nJ4EAehJD2rMHPek+K82bazTTmuKKEDQY4UV4nofp/M/bMyjcoi4/9mJ+cFPS3PVPQFx7zX44Qu0D+Y3Vw8QAtZdG4GR+yKTxSUAWfOuyjALqXx6pUKYQja/f1vLI2SB6T2VpB0Ju3vWnnunyIIft/VErWyeeE5dcnOVSoT+oUQ7hlkUmXTXWa5rRgFpH1rqlqdKf3DwAgLSYeptBKI8t8evo6wEPSul7oy5bUBAYH7JADmUI5IhU3u34JRFAf7eZTzX4THZPnCJC2SNEeB1g/0J2BO9lTq0sN32bGerUTqmiLgWku2qNGqob5kIH9RavCmXydO4PlzvQzDdxUP6iRuyvOUE+xl6FEK9v/ItaaZaCXhzOHSIQUPSqrAUWpqA2UwSi1F7MajFAVd22+IZZuzv8vFDR+j4oKv0ZBk+Yy6cmgKZUi6omRxXfSYMBZeipzx28F2A6fSHw+SqHncDhrH2UuZIw27YiUYqc9AZKztc+gJX/PNRGtkRnxwCKcSRQFa+tb6k3Q3FNswgRJNvcjVUONAmTp2iZuBhXhc5n7mwBlPtyX1PSB6xQmX7n2zLFVzG84JQjB5BzdodAuj0J/xsTgQ1uvRLH6S54KPfOIMr4wpwQUFiasQnXXWwc5eCEzkyOzL+2XUgqoSF48hdMFGDUZIol+DTXJybw9lJZl3PurZ1Uhr6A47IyWlac0CsnLlA6BIJc2dv/ovDyr5oyledl30yseFM6Sw0auQA92dhawYmi+UUGgXLZDQwbf0dOctrFIyfyrnsNXb4TUcUB1fU66Zdjp6g+uQ7P3gbkl0j0L3pzKbzLoDMs8SPujYYMEgVPQrgT0c7KwFsOWsbaeGMIu3Qn7qR6OW/niAdc0j4/gSQgBz0bWoreavu4PgpuJuKrPsm/4uXW9GfUsq32v1ltdTMF9RZeXrkHBozz2HjbQ8fC+NJuWvNSpcrOJmDMnllYsRpC1eQyLROLojzrIxRKnh9tXTGiclsmYW7k9u1REDdwlI0bFf62WJL4cYLGvVSYUZsiJSAxblMKzQ4gDf03Gp7eYCwziX8+XVDniIvlHv9P4lg32HqZ+/Q8UYtceiBAJ+d/TzCwkuV/x7CW57tSplQtQQ0v7F92DDASMPD1MLN1Fls5OvaeWONZkytq9nayiR5LYtZaAZGb9ArlJdQ42Y74z6KdZ5NwJC/y6YSxjVzttqqeHfUu/BLOtCCcOQzblb1GE+sauxFJHLHXxevAUZBvzExLSitjQGEhzTYxUYp3Ay6VrWntOVUBoo93h4JB2Yw3cLTPvEfzOg9MJisB0HlSmbb","layer_level":2},{"id":"f30568dd-ee5f-4b57-adef-92341e4f08f8","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据范围助手","description":"data-scope-helper","prompt":"为数据范围助手创建全面文档。详细介绍DataScopeHelper工具类的核心方法和使用场景,包括数据范围设置、获取和清理操作。说明DataVisibilityContext上下文管理机制,包括线程安全的数据可见性控制和跨方法调用时的数据范围传递。提供实际使用示例,展示如何在业务逻辑中动态调整数据访问范围。包含常见使用模式和最佳实践,以及异常处理和数据一致性保证。","parent_id":"23dd7f77-e190-4852-b94d-17d2b127f16b","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:49:36+08:00","raw_data":"WikiEncrypted:yP6vl3GzzNMVOI7+ToNUFWjLEyz6qJnoTjlCLP4h8KvB9GZSFJHEPlphDkGPkwC5zWVtinGpzjxNq/oBK9sMCODd37X1fxvaznqehhePGzvuRdKKFfJVAiV1LqwkVslddsr/kmnpFcQtmCz3ngn7GVb4GESyQjTMlWWJwf433A0ysX9HGziCDAesC1tMboUI0O0c8cJcaJ3FPP7H3f3x7pG86dqth/XBM243KfeQEZ5kCBdvLPxuGd51pVuQf48Y+0ciH8BHUsoAls3uiMuRujJ+uAh4r4oShCSjp3EBaGxV2UT9gHzgEKlhsUrgf+uWbmWUv4VfzfUK1MOlgi6lCGMEeAGR4knDb/9eYPDH6KJK/y8tBbT+j0xT1eQjvMJhvbV+EzZiMZNOjegkws0YXoYTZNzAjexZYISDsm77iz6YXpbLbSbUmX3NHHOuQ2R4OfwmsUjGbpwRvBr+7y8d0BFn8Dggglrme917f7Cb8HgGeVWh9QS387kZIU0+UBiyAeYRdXCr20E7eZSc6iIuwtUvs7X9dxpu8t+X8Ku3w7JgioOGAIh8W2r7qhPzOiAz9evrYwlSME/Y6KWYaQP2YO65Yidrh5o3SdGy1kpKZdn8C8XLf/S6ZX8E/sC2HPuZzNx5u+7565tvWSv2VI2za09xVRwboM3urc4LLzTaIKnPUWCZNaChWXH7CH7Ypq9pFgGoYiua8dp9enJHEWwfFb83u4BgDOI5gWRV17bW9Ph8lqAHFd8Ap9R5I35+xnFTW6SnEDibmjd6YtG7GyYhU6Ja4yNAfBrtFuDK9ezzFx+z7gzlmMePJrWWkQ+335BwuzMC16McPMkpbCBczMJTECLGdxYrtktsinDn6iQdUpki0wqkX/FEDvIrvUlmi10bOjBMWBI7LSHMyfc5ivg8DV+HNGgZ46L+HM/iIKuEYBqeKYfG/zTWG1KRGRT3RjSsRGxXwGJU4ldQ7e1x//51H3jW0cp1iMiLP9jILfrwIR4/tNmAm5wisupKyEmwLDlN1qqkZ2240ggZj9XmPm51/Tf4s23xMMkxErQMxpEM0zbRJ0wNHLVm9A+pWhWoSLyeFIZNhIxsU7CYuZFJCojFEqDFMXFAwUVBF95wip+3k1Qi6MkHX8jBHHzB13PsUQSQt7Azo/u5YLkY7V7XmrkgLnp7P35MJSF1uyBfUFDJpmzXaq926uoEQk3I7iLGhM84R1FbNTAP1Aj06ww1j1gbhw==","layer_level":2},{"id":"205f602e-3460-496d-8aee-f9959ae1d4b1","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"Redis缓存配置","description":"redis-config","prompt":"为Redis缓存配置模块创建详细文档。说明Redis连接池配置、序列化策略、过期时间管理等核心设置。详细介绍JSON序列化和反序列化的配置选项,包括日期格式、空值处理等。解释缓存键生成策略、缓存穿透防护和热点数据缓存方案。提供Redis集群配置、哨兵模式配置和监控指标收集方法。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-03T19:55:26+08:00","raw_data":"WikiEncrypted:iqPJQzVx1dw/J2D5HnoGAa3GlQlFd4NfIvCWopKSIlwe/Z6QhxuFm/9C30Vy5wugfxkJbRV5hkN5IJFFR/eTAOjKGaN0L4MDv7F4pgE6jzRovikSh2aaYNFOkg4Ov9k7oKAZavegZ8xbHAgjqS6C4/i8iSTqRqQi0Q6B5NUSF0C/1Rl6KYVC/dgND4LponSOT10pFcbpAULvpJLDkEZJEyHO+lYakqUYBhwi7YalMopm6jjoNCySG2GIDxgyC0oml+dR183aKlIROEygsTT/ogzlqpmllWzkB7yr923pEr8ff6uQgrKMC/uXtRVx/XG0ap4Hktw+kxU5iXCx+QcB87wrn0zl5zVK/Chv4VbDDYHpAFUw1E2QfVb0x79NKwahSmkxiIB25U839oFqS1qKnJwE+tyZOBbLP6KzGG1U3/TDlRQaEyCKgiABPj33CIHDWQzPKDEqbexsz1HlK/z+EJVKthgNDKvnUmjT9D9eePvU8SzR1HO0wixRSgAg6iz94HoEWcNdRRNMtFewjg2o18+cMnZ26VodNEG4eFacW9tvVOA7/HJkwilPNVLnP4XNZTyJ2y0tcThVylWtM26n2DPDmfFPMQtR6aDoi0ayV4/JQuS9kqCHXK5sqiGvvxl5xv0sSD8GFPUTuK7beD4ocR0KyPSQuXqeSXdEjFpgi/1ggI3PvfTY9RDemwCYtqScOPs3tij/QZUzwa4tvActlUwSnD5bf+NVpf5Mr6gPkQz3dJ1Pj13zTzmgYY9gsHN0oV/iKl46X1oIC4yd9rxCMTGM09QWysob83eok+pSD8qG4et7mGvLrq9v4o43Z6YvFQsYUgw1o5VJAYHjF++IjG+OYz4CyOo7dc/v4kknzgpFt7TaM1RPs14CefPQD3mpma1/u27R9cBeNeDBOyP64LcReqLb57+kmfzKDWsf3LeYD//9QZNh3jRQ622430nq","layer_level":2},{"id":"24f79255-1534-4c47-9d2d-1734103bffb4","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"权限管理系统","description":"permission-system","prompt":"为权限管理系统创建详细文档。详细介绍基于RBAC的权限模型实现,包括角色管理、菜单权限控制、数据权限范围控制。说明SysRole、SysMenu等实体设计、PermissionServiceImpl中的权限校验逻辑、DataScopeEnum中的数据权限类型。包含权限注解使用、动态权限加载、权限缓存机制的实现细节和配置方法。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java,crm-auth/src/main/java/com/crm/auth/service/IAuthUserService.java,crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java,crm-auth/src/main/java/com/crm/auth/service/impl/AuthUserServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/dto/ResourceNode.java,crm-auth/src/main/java/com/crm/auth/service/impl/ResourceServiceImpl.java,crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java,crm-auth/src/main/java/com/crm/auth/service/impl/PermissionServiceImpl.java,crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-auth/src/main/java/com/crm/auth/domain/enums/DataScopeEnum.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-05T14:15:12.8293219+08:00","raw_data":"WikiEncrypted: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","layer_level":3},{"id":"d016da08-6253-4c3f-8900-7211fdd0f593","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"分布式ID生成","description":"distributed-id-generation","prompt":"创建分布式ID生成器的使用文档。详细介绍Snowflake算法的原理和实现,包括时间戳、机器ID、序列号的分配策略。说明SnowflakeIdWorker的配置方法和使用方式,包括节点ID配置、时钟回拨处理、性能调优等。提供自定义ID生成器的扩展指南,包括接口定义、实现示例、集成方法。包含分布式环境下的ID冲突避免策略和监控方案。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:50:03+08:00","raw_data":"WikiEncrypted:YDoRcNsKkN0DDXOHAYnH4GQk2zDwyvq/e1QirqdzGRl9CusldeDWAeRxPrD9HHfi1hUA/ggMh525AhMOfdv7X5lujehW1dZEbNObgRdgQucJfoW+pXqrQkMP3xgqFB0yHstTuSXeq8cAbV2NI+tJSGGRlKmdK6KdGYHKmGprGmxhnsW7jKOJg1YTnEzfutw5CEfI2AAMF/R1Y1mbWzT4Z4AyPDIJbzAgL7d+BvC+GHHugNV39nJPIPgWHvhmoXVgEi2tBmgzQf0g2d9bCwLkqYLV50/0+lxIqGxsDrfVC2urDwbiJQLQonX7p8Z/RlDuiFgueGvhgIvHpy0ozY+DsN7z9n0f9FcEhmAA2IRtaNKB/oAghXX84Us3XES5emxHL9+13bCob3lvtTJbOnPnk2MhrKRz5I8uEcT34j15ydc8IqEgHPcDaPRHff4pxSG5nVD4NIU3uZRZDJTsmld0a0wmxVSYshlsoZQdYYdoyurmCGnlLS0WCkztAbQpb7VFcQ1GyqX57vaPQtFqOvhQypJ6txL7EAnx/BndB9H2VPwe9a5hOlfSrYIq74snT/6LGiO103jCLlN1HieTPSCVzem6xLc8J3dYxLeooJSCYsqK6xfp7ttG7g2WesRasN7qycKDkpjeVSloo8tZHNu40ZVquGOUysQ6kaH6iBmavEWWnOyPoBoLZGb0cCUhkjxXx8Bkk7gmOnkzAxzRbLkQgKwfXm2AXylMxvFuomP1rSrKhCkAhEX3zs3Lg3qffH2btil9FJDOTMMCO9O649zoG5OrR2cYE8xnPFbO9E6E+YRDhdSYd3ZZ8Ju73qkeneupeXlHGnPw4PchWo9+/9eOFR5M/ABZOBoZhbQvL9aBZAMYNsUb9KWNc4Z9mfLATMLppjNTkZFHByGHuCaV5prLmq0nTg3/U/bjUJB2SueeLsHLGCkMJ2qB3cHkNhquRHiQssEEyFscsK+3qxFU7Mmq1cigy2IitYvCVRitNORedW8GeED8Uctje7LBXagY+rlxDLrTzrsarpyBcyJsNp7Ngtzblvck7bYtEeB/BkolTHM3Ca0bBPLf3WIhhfmlTk3lYv7cHikBjixzbCdb32pLfeKKmT/eAMHXFyVGgOpM1p+6JANSleZnq8l8SvNJ68xrTsRLiiFY2+UPfA+69cYX3SoNQqFSuS85Ub+D0ME8lVO6L7pBbulmLPOOouMRLBqRgzeubMWg0CxZ9pQZe+Ko+w==","layer_level":2},{"id":"38d7de85-c5ff-48d7-8a0e-c4972f5d6800","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"服务层封装","description":"service-layer","prompt":"创建服务层封装的详细文档。详细介绍IBaseService接口设计、BaseServiceImpl实现类提供的通用CRUD操作、分页查询、批量操作等功能。说明服务层抽象设计模式、事务管理、性能优化策略。包含自定义服务扩展指南和实际使用示例。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":1,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:55:14+08:00","raw_data":"WikiEncrypted:vMsgMax61wW2sTWhXd8DH5MWokJhmuibsTyKEKUwYd0jU1wt1a6cO9gghJ3SefDQsaJpomzBIOwbaVKYW0PJL9py8nKaIwDUmdhq7iNekda953luhCFyuLK0/IIfnX5jcyNbFqNZosbeD5VrSmMLbakG+DYvsZ4fx9udRhcZMQbzUQGi4zuH9tKPUWPWZHvgWJLY+aYbvV4xLqtQ3UCw8WgFcBdK/UdJWRuFa24B05W5wj7dppHFP1AiHQZ9AI91bJqaL8ceog8X+h9kI9++GaSvH2pO07r6hitlvE0dkLD0fh7vJbW2Qmy5LrmcbaayX/nGW7qp8jGg8AdLP/7bX8SJpiJ3F4OTM58R1dJ9kdILl3/K3NGnh2hLmOBug9ivW+7MTNGOYbcGFP0yWVoEQdRgiptMqvYZFaFlV75WlwGU2bCyn9cpMS7v/BfJ8IcVVVw/pX0z6krNR87RAMMD2dhFwa9xCsQYMw/D+Lzc2BKTg1kHTW0w6Wpek9rPJUHhSfydn1LOJS/XDf9gDrTyrTffDfEtrkD7MwnVyVldx3qkswU3ra2/G2ZIefaNsCCjIGJKVqZFYwNU6hs7vN7Ixd9TkXHbcAm99MTQtPQ3LLp7tcWhHtOOvX6H4h+O6DWmJTis512PzbiLb/e3SZ9fAyhTOa7QLXkRHXgmHjQtFq3RLwNtyrbpOx4qKdTOv6C0NpAhubZhF/ggiCMvvkbwMisq+LpAr2n7EyXz5LpnsvDoL4iFpXYHWsgY6WE+/mU2AJfwKNUKYVyAF39tP5qbdPEmLdEkl0we1FllZyfnt9rU3PNKmd9E/g6psxHR/E04MxjOshDGYL0FJCRKDbSwE1c++YSLImCtfboP6ZC+AIw=","layer_level":3},{"id":"1b7df2d7-ac12-4df0-8bf9-b70d107236cc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"动态API权限拦截器","description":"dynamic-api-permission-interceptor","parent_id":"aa92acd4-8a14-498a-974b-5385add01858","order":1,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/security/ApiPermissionCache.java,crm-auth/src/main/java/com/crm/auth/security/ApiPermissionInterceptor.java,crm-auth/src/main/java/com/crm/auth/config/WebMvcConfig.java","gmt_create":"2026-08-04T17:45:25.1800287+08:00","gmt_modified":"2026-08-04T17:46:33.4519067+08:00","raw_data":"WikiEncrypted:juMsv69HY0hjMAj09/nIlYUwGMwwWHyRczX79yJUy1ZCBBsTN4dFEgaHJbybij2vfkMVf2BKNp4hnb7UQSZOnb4Lvu4vm0LGHJrDScvcjyWwLXWLQYCWaLcZQTQ4ZE94uNsML0oEzyRsVaSYfzX/s5RyqUGEd4iquIfB/KpWcSou1HynbOHE5h1KXcvJ1TeM/hg3+Od1SFd8PH9iK9RKocgwlJQ90Ye1yBrRoePV8shU9hmewxuUQYXmazuCvDM29th2BP1iowyBrVsJ7nn2oBPaEIwWG61uV2e+HTEhMwC/qzJTqc5NHcm+a4FOkGDjftgo7ba+vC7kTqRwewsvRW8AcGyyxm4GizNBXucTuwhAkCPzRA0e6dSPLKut6zr1dJyfPfbn8tXN5FdTJHsfdfVt+kIwDuv/vcr720qWA/dybtq/yf1rl9ygPKCWZTKZrgx9A6L83WcR1oOgyn2cQg==","layer_level":4},{"id":"6185fed1-d9b4-4455-b998-7973faf0fd03","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"架构设计","description":"architecture-design","prompt":"创建CRM系统的架构设计文档。详细描述微服务架构模式、分层设计原则、组件交互关系和数据流向。解释安全架构、数据访问层设计、缓存策略、文件存储方案等技术决策。包含系统边界定义、第三方集成模式、扩展点设计。提供架构图表和组件关系图,说明各模块间的依赖关系和通信机制。为架构师和高级开发者提供深入的设计理念和实现细节。","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-03T19:27:26+08:00","raw_data":"WikiEncrypted:Jk0nNOIGshX80o3G9X0igBLknfZT5v7zZXeQ+tv6q9qpFyin4OnjRV0gFu+HicYJzz/KlPriLK2NWiMS9xCdlAVCxwfSyq0PQjIpTWD7e/K4+IO1wu/GyYdInxDNlo2cy2CVRF1YaFzqQcTBkERIkMB1zNegRGFDzQ52Ibgkk1mSivTvPzD4gK4QrboWg/iJ3Om1hougDkYhkLS7VYotSyy/HcCdM+sQ1w8t5EQ24z7xxK7WAE0sPqnrV8pKS7SzZrzhKq49/lUe8aSKHCgX7auLO5MQSvM8rxLPk45Iup/JtszaTxoS158aIbcIyt/F8OqkX45S5iZ0SUhiO/jFficeCtadp6bN1lzYbNW8FecfjXzBSCrha+pbON3wv8B36VRnMpDWe/Qbt6FPEREUGvzLDiAgckB2OObgBHPz6AqTqdhz70Rnje5OZhVHmaMuehgp+HeyRw835/GpQO3+m3JJcF0kB8l25g+V9I6b8WVHkCYeNfE54zF34EpHjr2trhvj2MVzTh6+LYHlJR9SCQF4AUR9hipize10G+VTKbV8TIMvrxvHYBvoFgiXXMM0hM0LnX+CVEtR34xNVXeLv17dfI1C+0/SxVJiD6ZW5kbkebmf+BMloCWF9Bpigj35LpyRXpzehPiI/E5rJ4MJDUE5tHgwGSsztlT0kFixi61eFyt4sZvjieu+6KQA8CadWxXQh3KBE7Qdvd6zVHccsbm1NaCR8SCUK0C2dVOA2mzQzYGBFeCNUaoAYay9st11BjPHXCEaMXZq+BqJBruTwrf+Sq3a+ZxbGHw7wn0A/aWBIOz0PeZNxTxBmf09K1xKS68hJE5X/6OvuMrziTuiuqIwDfSaCf2zwu16xPdpJKdECsOB/mt/6UEkOmdgsNkHyAjH1SRqbB1trjnjbar6OQjrOBDpD/k7IW/XJD0ID6ISfx3gk3/CX7if9/shg7av+ga9NPb+tc8dJZwJiqohbiF5s8m7S/uQM/YvVFQMs+hfpOTAw9Xh2hRP0JwRvFUtqm+5M/SSulEH1NTrTsM/Yi0wAya0FZjPPud6w/K2gxwAYEx2OML/YvHHvdAjhnVWVzo82zaQxHOPMx8KiQYrZrxdTEPerq0zO5+xon+9QBuu6vNftMMEvJtDWRDqs9CgHX7/ClERnPiuz1OT0Qj3r5SDcLOzSTQqtrmOPA0GEpEFdpB34eD2NE0iKWfpyHwjrLx/xADYF3femvaYgDNqxihk+IjLgQmhKrzKKc+R0wj9/FyI21Nq/LhSvEkb6+ccZwZwXtpAV4/iPyhzOWJxRe0KAkJbwgVIdCTcNv3ytVVuRlxeJgDwTJRrH4mm205FleRBzfaR8r7a1AhiJpsSVw=="},{"id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"模块说明","description":"module-overview","prompt":"为CRM后端项目创建详细的模块说明文档。深入介绍各个核心模块的职责和功能:认证服务(crm-auth)负责用户认证、权限管理和第三方登录;基础框架(crm-base)提供通用功能如分页、异常处理、数据权限等;文件服务(crm-file)处理文件上传、下载和预览;应用入口(crm-app)作为统一启动入口。说明各模块的包结构、核心类和接口设计。解释模块间的依赖关系和通信方式。包含模块配置、扩展点和自定义开发指南。为开发者提供模块级别的快速上手和深度定制参考。","parent_id":"673ed306-0e91-4381-a45f-07865c6c3582","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/AuthApplication.java,crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-file/src/main/java/com/crm/file/api/FileApi.java,crm-app/src/main/java/com/crm/app/CrmAppApplication.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-07T17:25:08.99353+08:00","raw_data":"WikiEncrypted:W6yqrfECiowNfsysFQaGhmP+JLOyNPfZCV29MBuFbQhPqusCZcSpmvhT+a4+zo6Adh5yqgphASAC6x4wYfGU4/zzdQ+SdkXUGoRNQmEVe+m92CgPrfdZxP1C1RtZC1mXRT+JG7RnUnbQ0EPYFPkyaT4kFK3VB7yBhOIoezWMhChrzMmr59aBvdaxscpkKt0kJ+C74ziLToqlvAv8ur1Q++R00ec41soNPIit0qqAGWgN4yHFF6Hn5cdPeoAQfNJi3sQsrag14ac+5q2aJ2jR7fbBXF0b/LOCf+I5yGK9LV6gdxW8JaoPlNiWpQhBvfbTSY7OzgsB/yFi2XEQ6qT7shMgQrqBY+7nGmoG3UVAYr3J1OA1gyDfTaCgBjOXfsW/F4J1S5iqdEruzreWV0pAvLio/G6LX6Z0N8/MQVfbCMotuTEoQonwOWSgsiLh+WXZ9NsgG9e3ePYCoiF6Nrk6Yk4Z5nHaSxCGyzEiEhgbmXIqJ8+OKch7Ga9uOagcUHbiyX+VNOBEd0hsn3zf678EttDYm+monzPo4jtAfCk3/eOkypnWlJzGzS4RM/v+2nOVkc1XXl5MSL02p5ustq1N11I+TwpzUtMA9oesi+ovhBrOUG5AeRn2axL1cmN3R7VOGyM7g+iHxrfDr9NDXq9fwBLULl7UZbO/LYmzapwRYojbCUKPv5yB1EAKRiG9rlwz8Zsn9GAHUH5kX1hEBjDKPrwCaRUFxqK9fGMc4Lgc0Yt0pUW/zaJJ/Fmu9galDSypbLcbEnUNUH8FgG9c6+/MMRzqVo/dxjEQ0n9X6uvzDign6aXGfxZDiTkregFBsQHbqAb1BRIan22ygotzQhlqodi87BbCOtSxOcH3aCQ+D4J6rLfpMmK8hcNxCfbjxdJwW45G4jHIOLHnNTc45cZPeQIub2y7SYW+t3PvXEmG3egTCLIm5f/zeojoEAgIGBe0C9JRagG6FzT9uVI0pPN7M9APsRdvoYN+tHohLw6DZpP8OMqZsz1AnbegrtZ2WqCL8YUyJdicdvRxXJW55KBqWFRacycKknM2waa70n0fcJGRsuB7TcMB4MLCA5IsgtTsU0HtoU7jdszuft2Xw3jCZYxkCsJYVFCpzxYw0kMxKbcyErRP4EkvhYXz+dOdeQblA9OXKsrkIjvaTG+giL2r0Vu6BBPqV5hWpW6LzfSFLWHynLDmsfxUeD7shcW1hC4SkAk+FqopJEbb8nwfxi6JEdCTOFR8TlU1Nk0GtciiJIX1c5F8BJWEgBHW3svY0a0qP70MXrUQy/PDqytiQXGoBhy33Ia1GEB4jfJZmiRWE0KxOVTAQc2L0LzEowOKbQX0acLNxfWR30uDgGOMEAr3xPSrZno8UnHAz5AbD5IcFFa9jmaAOXJi4pHCbJ+JK8f8vIj6nAEMqigQr4ReXBTbJ00J+iTdP+U0kMCstc2GVj8lOHiVEJmDZASiFNJUS2ob6dEwJn/9aaKRqVhwhaEIrlWpCD2qZcCjJ63WSBA4LtU=","layer_level":1},{"id":"84d1852f-5d73-48d9-8e67-51c02f002f84","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据访问架构","description":"data-access-architecture","prompt":"创建CRM系统的数据访问架构文档。详细描述基于MyBatis-Plus的ORM框架设计、通用Mapper基类、Service层抽象。解释CrmBaseMapper的基础功能、BaseServiceImpl的通用CRUD操作、分页查询实现。说明数据库连接池配置、事务管理策略、SQL注入防护机制。包含数据访问层次结构图、查询优化策略。涵盖实体类设计规范、字段映射规则、关联查询处理。为数据层开发者提供标准化的开发模式和最佳实践指导。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java,crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/service/impl/BaseServiceImpl.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:37:08+08:00","raw_data":"WikiEncrypted:M8uljGDGJ//mcfRJly0hh1hHWOIms32MJ3U91HA7c/phHaR80FWWIo+sljEWTSBoo//RwWSzseRn3+ZQkrtKmt8TG9fTUtuZ/4PStQSND9jEeLnyhKz6MGO+JIp5U9vMyyXYXCXQTnKW5IvDiAQP6ITaI9z1A8w/fYKcUjXLY7DpMBXG1/wfi1+A19s2CQp9GkD6LxWILERjNA4oBe+t8p59lqNcWi8X2DGZHpkgufv/1cKl18VKylKAcJgu+CcLXHLJ4prKqL7k1qMeZt0prqH8kpo9YlJglz0PZVhB4ZfvwZTI+SjBXvownXCCYLO+8oxE2d4MAyaJkaWJZILWn0TH1TbIZMQnQkjHb/zG9ptK0sTKLgfx+m0hdn+ylGLZ8l0t5WbCtk7nhHRAvM82qgSK+8OhMwsqMy5y67z4J0HIYXAlNTirQgd3O2A3ofw2t3KzstFRnncggy1gQHa+a7l5bjbZGHNw/szf/2MhP+Lm4juzmuQceK5vPVJB1X3ewf1Fw2DXLg7Jdnl+dQVIiYeCMsua/SFpMOnGghdF+AqS5DafG4Pi79QwQS3TYcRE7wgWqr5RIh/6j8sz6LmMH24j02JIzzof9PzipKIlzgPDXlcBifhKepHB1rEATqdO1FTGVn6XEuiWSoYkT2YEQ0HUwHzoy6PNafWa9uB5xlkantohV4Aa8/1d0KZKzB8cnGmQKYPF4Tejmc8qDjKyIwZ1AkYAvE0iAHB62OkcUxy87Ku+MGMA7rc88hi9BqvCkxaBlHaZ/3tXb1P9pAwpqDoMYnN8HChtHm5z4zxN94TzvJvjmMsJIpYcV3wMWFSy4Fzh+HebxKe3jRRbVJ0pMdjch4FW2zUfId1DiHRCrqMVe6Uvxu3WSnkRiFUPll1wlT83oqMz8PcGIITRhgMbpKYKLbhhqqYZulQV2iu2IVHW3KDp3RikcNHguXry7e4RbVkr6rjd1OtV6CaHJwm43e4qi/BKH3oQeBoE+O5ytrfKFO4urj4GF+UzuV1oIOsCtrZ6/HnZgrHrtQtiLlHcKopCEUYmSwzjidV27NtmWbpkY7m/OJQyGWto7PzxCeA7plS6pYyoLNIvw74mCVc92VwK77GNYfjPsChzPBnAvxy9y8OAScFV21DCaql6cjI6e55FCYtOkAPZ2dVhhpJW7W1iqWcRQaOhwybXAB2pGEybp/2Udg3UmMS1IFwrcc67spKFQHyb3eptx9NHZeJ6x0L1dvOvo7BuEq0FCa2zqadqnHvPfZ98pouCmNuX7erZEj6ajhtwor6aa5AhHjD7g42mCCDjnOrzg17wgFY5QRf5DADgjyXRiJiJPVkC//+Y9d327hVi7qtM+sTlFg54Dh01NiH9u/kSfUN5wQsRYc45ExCeDXA6V6bc0DfHDQhJRKM5hu5tr7Gfvf0Sz0BS9NDfME/jk285qkwIJEN0Pk4=","layer_level":1},{"id":"206132d0-398e-47da-b31a-d5a00714ef04","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"角色权限管理","description":"role-permission","prompt":"为角色权限管理模块创建详细的技术文档。深入解释RBAC权限模型的设计原理,详细说明角色定义、权限分配、用户角色关联等核心功能。阐述权限继承、权限合并、动态权限控制等高级特性。包含权限缓存机制、性能优化策略。提供权限设计的最佳实践和常见场景的实现方案。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/ISysRoleService.java,crm-auth/src/main/java/com/crm/auth/service/impl/SysRoleServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-05T14:15:15.2241292+08:00","raw_data":"WikiEncrypted:sqopOHmfiR5tcNE/geHOiDzr11nX9EJ/HZ0LuytBVakxzFZU0AkpFD2jxzrkL4LOIkXMOqlsLLtNEoxSMiyFNVQpbKRqnHhlyjxn2vwG2VhuwxITEVWACuE3bHLTSAkcfkNv74kzpPswbfOU+RdPAEKKCCOjpo2EiuhVydRrvrnmYF7FsJMayf8P8x93bG3W3+eaT3zTfPtSla4mpec57VJ0dTmgwYs1Vrh82YZYYtUpCGLiWRXQLCp5Q5jIsaR3uyeV+5WxkkzW5CCULOnNZ6X0s/Eh28niibLNpaSbTxUnzpUOGFQBB8CFL1SKFw3l1ImYHekpVw/Mu8E2GRPaETMJBi+TT4T9O6UeZAg4UX1GumKAK5nJGoDxxOxE41xdZoVNa17M7JZaxeig6y4epmi3iUzj1eRo5FBVZ1hcmnP310RVdDGTOzCwmc9SAVjeaDfBZqyilD4g9sokVBg6aeeNihxTOKHSlw5GrOEhvUxCBqXa+AW8sbQsmLhNUum/A39G7HZtJZNFu0x8b/gKvVZq88+J3E/OVCQdgF5PS+D4jLs3S+/c63N8FJ7mgwLRTRpK/cWApuZOhHBEmjVZSw2y+J+wGBm8hoyrwJ3R5/mHBh126zoGVGDp5aJy79clBw0S07Dtzj6uXhtOF9dWyVVYt95vg/Duiq0d25bOLjP87s+FwzMMgziAtCmGJPiD6YiUkdoKFei9h8wSycVrrzqiJt1jUARokFI3uOHEiMb+7K30eKCmrnam7FTb3iz7lmAajpwDGZ09UhuSmmiKR93sTC34MGPO+TEa+uRk46Dv143Jm4xbLzDXRTJAzfol4eoYz+YIhOMor9FiX2fRnVhnSoTiEdjASQHTOT2kwxZkjE7mjiWan/hF61LUVqQaTmqukjDcd/geTcM6CfgehkOBuhwnJAZPStk3n2vte9Q89WJyCGKz+sljrtO+PFKUX8/QQM8NPNaI/1Wle3by79bd6StmNr8D9nNcZntSbmGZBIHrCD6emnjinSZk9sMlp6g+NgMc93DhLoAq16+ir8wqJrOChrCC8WlJFNYtEyxc0DlSGUjMXyPbuOMhZStodhM4V661d1lNGFNB4oVJ6QwuhkbIVJjR6z2h6xhip3ss32rQHzq+mzZq/iQTjJ/gLiuexKoni1fQ/LrZWgjwaAd+6pKfk5cT/Cbf1gZFUmjbg1mJRmjMMUyOkHKhf3hpw4+waJZpKkDjRY4oSXYWqbkrkHX+KzXrFaIDvMFjBig=","layer_level":1},{"id":"be63d49c-2198-47cd-a738-469331301903","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"存储管理","description":"storage-management","prompt":"为文件存储管理创建详细的技术文档。深入介绍MinIO对象存储集成、Bucket管理、权限控制等核心功能。详细说明文件元数据设计、存储路径规划、版本管理等架构决策。包含数据库表结构设计、索引优化、查询性能调优等技术细节。提供存储配置指南、容量规划建议和监控方案。解释文件生命周期管理、归档策略和备份恢复机制。包含存储扩展方案和迁移指南。","parent_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","order":2,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java,crm-file/src/main/java/com/crm/file/mapper/FileInfoMapper.java,crm-file/src/main/java/com/crm/file/constant/FileConstants.java","gmt_create":"2026-08-01T10:23:36+08:00","gmt_modified":"2026-08-01T10:38:08+08:00","raw_data":"WikiEncrypted:9FtCQC0DeAGG21+hIR4h+Dd+8XJeekoweoDR7tBC2uOo5RNzHKFCvxq5Iktjn8MQM8j1ixYZ7PPJ0qiibSTfzMnmEzqKUm5ab1yje1/w7qa0FxynwmDf8zPTT0lD1WuuJ94qzXZ/WngBglbSOfbyxNzd2EiomEv44b1jDtNLCYwsPEsF8VAiZ/9RpMSpMrF8Gh+gBOAReYmPdRX0YpyA6BVWMooOWZngB0K9L55yXSXD+3TEeKndZnV+NM2D8+sRoZpTwfgX3Il1cJyyxOQNcAa2nv4/Z1k8Ex31HEhmqamnWEqbkHVaxs3IHCo1+wkTQZyRvaYpNH1ypERVfFN7k9IhSWNLWzAgytET/RHnTseTnIbFG0wD/53P9w6L1NQ2OSTB3e6MBKOJe8FGeI1T438PsOiEw4VVYSgD+kGR13IhcUWAgPzlCJtfElttDJgP3RPiq1ua8ViikO/S/3/sAJTEiaVl0CL44i92ThQFivXzk3sstOF9YOZ86qM/4q9ou7FrHSN+JHdGXrlxwtxsSjuHWdwOrTj7KMXwsZA+utz4H20bgbHEqq/LQA2+KVUxfw8njUuF4PGGjupxtqcAhyYg2FQFjL9vCfOXdvuHKmgkdfnvEqypt50AVEPog3NVd0DfgupPqZ6EQkMIsvaDYuGFTuoHi2iBRRrdJifjjwLM2iAnhDd5smAWD5fFnmxc4wKeGyeNUvNTLirqIY6HVUAZ8GjgJvv4vwpwOEXEpxiR5LSpDNvhuuBzgyxu/o886bxwBMbOYD9egSaxVfuBTupP1hqOwqQvQ67Y6hKabNixf3J4EGILclWJ8JaemkkSDna/IiScgxyKtTyAcr3HMPWKIZtUSIF2d0ITwTSj1wdTIEojwop87toH9fBWjA5d/b4dTAFvelEvXt7lvxmJfpLCZOb8bqR17PRO/dVB2OxAeQkanMiX3qtT2eopB2WefP2QabHsjUSH2hdEe2RAvATrJrBW0ercuxEDlW9CViXJIDMVGZKVX1MwgzosVsX9KpSniisJU2pWkBfJCBOXa2v5pnYDfDEsAtprpcxzGDY6mpOObFkbkh+dMYtuA+rOA9J4l2Xfn33ZYbTiR0Z1Fz9BLdDkL/BuSxyD0mJ/6ngczZrF0FGwUV4b0dGp5VKMzkyoObK10EsrUdMgjwtEBBWPt0N1c3lLpPzA3XKsfk338we3iMb628PiWsjwnYbgJgEN0fwbzyUN6WeheqtIV4FBblkOB04rS7l8mAUkElTLYU328aSGRoIP/befbI5LOKqOxPS0yVPU9LWQHmyZFew4faeLiSnDQPcN8abA8esuzthkVsKyXPTAgTkFsBZwjO76ohl9iHL+m7jnxM9GXDLeraMqAsgd/BnH0Q0IpVE=","layer_level":1},{"id":"b7dceb3f-2af0-4478-a20b-90dfb2844564","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件API","description":"file-api","prompt":"创建文件管理模块的API文档。详细记录文件上传、下载、预览、删除等接口的HTTP方法、URL路径、请求参数、响应格式和存储策略。包含分片上传、断点续传、并发上传的实现细节。说明支持的文件格式、大小限制、安全校验规则。提供MinIO存储配置、文件访问权限控制、临时链接生成。包含文件预览服务集成、缩略图生成、批量操作接口。说明错误处理机制、重试策略、性能优化建议。","parent_id":"6e92351d-04cb-46df-89a9-1e2f43b46552","order":2,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-01T10:23:40+08:00","gmt_modified":"2026-08-06T08:43:51.3339554+08:00","raw_data":"WikiEncrypted:YY0OWFh8RMOtWS0p5fnjpCjAJC+C61c5k5dLCj17kZc46WpB6154WMU4oi6b1j+tNeS74LfprNeAxHa9jjkOTNSGsPWO+zC/KH1Ym3OleuIuq5VIrVqbnqE3+lnY350paLmsrMSPels4eMMxvEkrS5dXmBToPFiywGQUF2IW/qPmkdOd1r+1yF9vqZHcgRUGAtqVrVjr+4Kp68Kunmwhp5Fwz8xQsQ0kfshTOFdK5mmXMlg2uLLBYtWS8k0KYs6VXIr1NlYUH+jRqj5eDkqOHereOkh6WPS2UjZ5vrr253EbBQGVZrnlcE25ntj+77zDQrbL4X/j9lD0w1A2v/APRYzYYOynKA9Eeku5lV08u1IB75nRAskessqK3ChD14teHBWxrz39PimRnTONYIH+ucDjt1NGCqxRbf07Svhvy8+Zi6gY+lZnRkxGc0yVGn9JLD0mDkudvF3WLJN7QDA5neu9347MOKbwknmzbPVMT6KH81uKFgqWGElt1xhKrvmWjhhtLF0if6O1zim28aVL4aQs6ee6doqpSRSdAQrSEubZAHFvwatKsitwtTRfpxIQJafkA0Y1soXgUYyfzNJBOpJiU1HepCuNfiS4Y6r82sG0twUpAiimUiEKzjkM67GMAZAT8IQRQEl6W24mHeNfE9WPyCWRbfITQEb1XT710dswXBMc1WqvlT0NlGRdQnvDNBRUbfx+rIV6T+8a2amMTp9tFbCAiywvvTdRJ/leP9TKQRWdGpmgeqWw2n5OFzP4WeEdnV75J0U+I5WhDNnEQr8yZPv7jrtstvFm9UsPmHD8GzH5SOoBi6zLSaiLopirI42dqJ3QyIO+av22cNy86/qj1mV8xuKZ46MD/UJecuZMNgIr1r5wtVSUG+LXTL4xEY+1cqHRYeJ0tnmoEIkvPtgbP7ugsRpHcHTV/rDOuTe1VxRhKWyrCy0rqgu0cTWROfO0QwXcwnMpb1I3aC8B9h+HurOoxIQCjn1w8T7R6C47v9KX0eYp3XKrZvnWexMSEjVyEAI59cXl7DfHTVP+5icDl/6A6nj2rcEOK+/ROvPUu+ohuS/liz5CeTRJvl6k5A7r+wWg0kZdV7EHhOYHBaxfOJ9n731wVa2eVvQYFWk=","layer_level":1},{"id":"94ba65d8-c0c8-4b05-ac7a-b2fc2bea1ab3","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"全局异常处理","description":"exception-handling","prompt":"为全局异常处理系统创建详细文档。说明GlobalExceptionHandlerAdvice如何统一处理各类异常,包括业务异常、参数异常、权限异常和资源不存在异常。详细介绍各种自定义异常类的用途和使用场景。解释异常响应格式、错误码规范和调试信息输出。提供异常处理的最佳实践和自定义异常类型的扩展方法。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java,crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java,crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java,crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:38:36+08:00","raw_data":"WikiEncrypted:RgZcxlS28ITmDGf4sH7fKcx/KKgHynIcKtHjdIlivuHRmYu6dsiXFrv8J7zlzfnmDRGLfDz3rvUx1D0b4Qjf4FVbJeCQB6Ajv0h34sxvgcR3CV00qB1fquG4WhH+QLJdpt0uR9Js3WNQ8EFfGVN7tS6AMz92TJ5OlphawvDR2cspUnx2DmzGNeB+cLqjexBmPCs04JB22bWStOqHpKbmUa2PY5zTaumMJEr8oLf30qezLDwzEOedC6IwG9z1o7ntbW7SzSk9Og0BBfXuD0RrN6szwvhrhctBqc+hiE0JoGHMVwAYZnzNQmxhjqRpJxnJxZZdhcET4tZ31SeBqoOkz5C8pA3ymnRma0L8IBgP/4LkhL8USNiRl/R1y8aDoW4Mmpcao/ejGgrt9pwbCqJTZqEvR+xQj5/CI2IOFRCZCrm8GVrU8D5cZMFbjnEso6yErI0bA8ny8+1bGTyph26kcR+eg10tagdLhy4AdtwihQqzSQowaKGvDC+pruTq0Xd+VFVSQmhzVCdUGYjpYFoPVuExspMae3Epk+bI678/HeM/Um9DWNdoSHJaoOR53vpJ84Ks6Q7IgVt4sPZglB/0kej9dAK65ofNdZ7/hiQqi0obtva2XIytHWezgVvQF4HBsgp0dKLS7ff21W/5jPmWMnQ2xYMCx9ruHrKzRQNi1ZwMu9xB7v4YMrY0mPehxJkn7q2AXd+lWE4BVAiCEokMUkIwQmyJjHs2EHu3xDK9CW00Hm6FJA1whr2YN590NGUM9Rm+qy7Hz8T3CuHpguOvIu4GFMmwBEPmaFdoc9I7fa8JetLgZMP8ZZfyPIQVItMlyyaSwSyOQnc10UzRFn5JLnDDWXneDrI6KmuT1RT7Mkb6XP6SdDVOoLiNG7r1EQWuq73QVS9ONv222LL1ydi6iijMvZvHum2tqPFQPE0/R+4zvifLGPRXiODWA1bZrX4QC02AzQzV/kQH/W8y/jFbAJ4Ja4l5VIy5wjVlFceuYC6dOi/T8Mk7XD8tfDjOokryAa8m6UX2LfnnJw9l3dsVtghA2N0tJzHkRwfmb0t3etaZhrWavGZoNESfXtCbHATrvE+8iiof/RB1giAFZjdkzKfpbSm09VOlSBplhyBUM0/TwFy0/H+arUfa/yXbdwC10eRyA7VPdoGT6JHZwh2J6PbSz0yXra9MHiJqdg4hP6qmOoJ2pxHNaRuP+Eck9XJDCH9S4td9BDUthrPutpc7dt7mPOnJPDmxpijjV88cc+gbcm3SaqmgccK/gr3w7PqWTER+5aDD+e74dDBzLi3MxjTzL6geZQcDNj0hVfxCBmvp1JnJFsxMLixR8fvjYS77Dste6D0tHQj2/H/0EhUdnn8z6KRwiC61JrOF1NUmK++/+sUkNLpjfmH4r4TMMTRVtNmDIakutzdnM96SwW8r105M04YC5nh3fOFO9jPVLgY=","layer_level":1},{"id":"ab8b3963-2438-4d59-8c5f-4a99380ab5a9","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件管理模型","description":"file-models","prompt":"创建文件管理数据模型的详细文档。详细描述FileInfo实体的字段定义、文件元数据存储、分片上传状态管理。说明文件下载DTO、文件信息DTO、分片初始化DTO的数据结构设计。包含文件类型识别、存储路径规则、访问权限控制。提供文件生命周期管理、断点续传状态、临时文件清理的数据支持。包含文件索引设计、查询优化、存储空间统计。为文件服务开发提供完整的数据模型参考。","parent_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","order":2,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java,crm-file/src/main/java/com/crm/file/domain/dto/FileDownloadDTO.java,crm-file/src/main/java/com/crm/file/domain/dto/FileInfoDTO.java,crm-file/src/main/java/com/crm/file/domain/dto/MultipartInitDTO.java","gmt_create":"2026-08-01T10:23:46+08:00","gmt_modified":"2026-08-01T10:39:18+08:00","raw_data":"WikiEncrypted:PS6QJlpgHxZyZMwNYt1TRGCEVlUL0Zbmyu3abotMVf6L1IBhFcuSmeyzNGVw4j2qaFORjUm+VGvInLU+tQEGc9Pud9OuLRywihmW3bOO5sIlLqis5gTNilcT8OIpbFLBliNomUnLRx0u8nTlUuY22oOd8UruIZJ+6i1z07RQv332UZODEl1qYSPSk2GoQNjX6Nlthk+q4audH4j4kTQn7UlKqmfq8P1iTsESiTHNdFeK1UnQey9BffG6JnXuPadOTkVa0PtXO9mqdop+KIfDSv802zISyrjoHnWmtZGvfQjPIWEctG5U836pw9dHyNohBPSJvZxjnKWNgcp3vWihOtQN8hqL2U7xtmPaWZ/O/78Tu04kw9410a7DUCyAM5xJjpezhqpyVaWqmLkai78eNMIK4mLy3meRk6g6njCPJZyTH2NZYlZ0+fQHx7cnnaQYqfJSkJbB3+cD8djVCQaueDuGAHBPjeQKIQISg6iGm+UqstPC3nvfS0d644QjHGf1TSbC/lqCp2L2JxNhiSnA7UinjrNLk33ZIhtoBKTO2W4XBU/fUO/DZriM4gkblix7U+9MbYmQdmeid3Ov5nKoUFoJj6jq0HbpRv3m4z+K4PL4OvDR3EGn6I8pKtvaTritaz3LiP/1i3A0sAib/nAbDQ+s70ZtoZc8MkreDpgshqeOBbfQ8l8RWyZQAPnk25xXom/ixPfIG/gwkSCWJKbiEjxh5c13ehRqGSvBcIGTl9dJxXVmlnessq1+8r44dlQEDNcYio42fi7hS7Ddwkb/GlXmC7AILppN14tjz5X/h97W+ZIxPVdUJ+ekX8ORWYMD+YypIRL3ky4g84wt8Mzghvdu88uA4q0WFAJ8kJjUxlGLre66S7GGzVlLYAywWec7i4hU1PVtvpxxwdGYSSvUTU6Qd4E4auIiAjFpFlvCMLHAZ135CEUXObU63XuEqoc+7KXC5bW0XYKllSsSlPpan80uNcquzgefuCRpc8vpBVUogwFMfNv/GtsPoKlaAReNPNxlu2ZO05dCdMwK022a///jcxnPJ371Ef0iCdlfLWNzV9w+Ua+0iqSFWIbz8SMPBGzdSLtPZB5mgJFh8JJIbV1p7xiVUo/kI3lqbp5dEPpg4s11Gwee0wQ+ATXaIGZglUAI/VWjtpukCrEg37NQNtiYYlcrkr4JFHVL08x79RvZ2gzWkNaR/8NOwYylps8AJ9ffIbx9ypyisiG+4zb9Eq9a8DL4t+9eoFDVOvIojEub9IvZ7Xpp/LMKzPReFBoOigncVQyTBqE9pMpXbTVPJr41OweLWPaFsNQ/9QQh2wOuWZjmDCx5PwJN6/Hg6pOAf5UOcrDY5SFmeiHw5gYRSru02YL6zItsdhMWpgXhNpbViouVGiWCvFfQfL9iUJ4cLG+FnwyoTHbvIcwHdqRGEw==","layer_level":1},{"id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"高级特性","description":"advanced-features","prompt":"创建高级特性开发指南。详细介绍自定义注解的开发和使用,以DataScope注解为例说明AOP切面的实现。说明分布式ID生成器的使用方法,包括Snowflake算法的配置和应用。介绍JWT认证机制的实现原理和使用方式。包含缓存策略、消息队列集成、定时任务开发等高级功能。提供性能优化建议、安全编码规范、监控埋点方法。为有经验的开发者提供深入的技术指导和最佳实践。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/annotation/DataScope.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T10:39:39+08:00","raw_data":"WikiEncrypted:qSUmbhu+RuqdVWUcJ+wGd4e+ZlhOlcU0FTi9snO9I31pFDv5klxFooIMNUPcliqF/M2nmJ8YIAXOaLMHKbF3NmYeq+661MVMJJskubGniC64s43dSZmMvmnpdHdBUbSTZgsQUKM5bnvdSi+eWIVVeaU6jQyBLCU2wAViJcMeeADBW+V5d4P5UQqKYq9eoxuf/+/FoOg6ZMJ6YoYI/F7xr2vOkHS2TK3uXu4fgcuwQdxCJmKvKMqW/98QmpBBRClWAhh6J/+M7O8iyLcPMFzfcDOA96b1v/UywRLvJGW1oZ9gRQXqJhGVJjfwQVNlRXffmOIhYum708jUOuW8/otzOHIHiDTeqiNlcNJcblztOEOEsjiS/eQznrYolVZzDOdKuhkmdUFnGOBYuRG598jZYr1IODSkMwVwgRoiw3X6DOxEhjnHjUIqHi3GsHcWKrC3OvsqQ5flK5oOTi0CUbQobGqydMbBUaSys8KaO+DlBlLaMYIg1uq4QMJtmDSeOWgshdjCFeK4VziD2CY6400yeF6N6UIapuUxLj+2JqlKmi/jo01BxoF3wAqsNXdUk0ehPNrRWhHeMkRoT20QlEr0oM1cV185z1lR+gFd5/oneg0+Ib47WF9A6Xy7KqXEbZAwmNi531Rw7sD/L2sTgqoRVtx/st0AW9vK0tjB11cG72NSKScvXgT+w6TfpPsARdgK21rOBotfT+wGx0d5GGk2EzFajIpAuO1j3G6CXw1TU9iBsAlpvQddZKNhqW2Gvci4J+feECsnXg0IjDo6wOJ/dmY2fa4wH+BTzWIqxC3fD7GxYy1GYdyM8F/4OKEtNaegzgExip9UWHO/h0VGlrSE/d/a198SKmTK7zQojQH531OeQPdiGprf7+zBcfui50N50sf6OgWyDL/tZkSBQjXdtS8NmKJg6Jwz4XGU6suI4OkddPswYC4a9cikZDq3SphJbW9gjoEfqbnXFBZxHTfNB7nEU9yqea/5o9ZaK5YjIbxv0ZeSNFhjNu331Cu3eJbwrZTp6raUg1N0sBbg5cfP05ZRM60QCfLkLUYyvLT+Q5tufmKQx7s9O7v6ns45Fn8mXSsPum7dDtFD4w5a3F/KaQgUbR3rdEQx299GcTv6rfczGzzCJXP0hNSOzcvuvgva3qkU9f+RQePzNbAot4d0BLaRqB5kmBWiPw0heJ89UwUn51JieaEc21Lw5srZ6cvR7OYUa0v+V0MncJ1w7ZAntjyLxAaMNbYJHOPyisP2jmlCQb48PAKN2oGgN64RYykIxTBcj0AH0LcUT4hhgS9Rle9Naipvjljg9QvXFMCii/JHRoO/DQ1Lj4C4hFAdJV2qaqvUQ1CD08GdLR5d98x8hVb25kbNClbcw+uVXBJcfNfEvVnU0IwrFehIKxBpe3bkKNlDl9y/JygRYMU0YCxs/+fcOeKHRubOv060sviQXAs=","layer_level":1},{"id":"efca4d87-f0a0-46f2-a4f8-67caa3f933a2","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"缓存配置","description":"cache-configuration","prompt":"创建缓存配置详细文档。详细介绍Redis连接配置、序列化配置、缓存注解使用、自定义缓存组件实现。包含部门树缓存的实现原理和使用方法、缓存键设计策略、缓存失效机制、缓存穿透防护。提供缓存性能优化建议、集群模式配置、缓存监控和调试方法。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-03T19:55:33+08:00","raw_data":"WikiEncrypted:qF2VoNuQmlFJjqRbYbbhOn1Gcpo5RLb2/0xjtWV+uzqzDk30tb9Rapo8M/sksKTrQuCXAIdF7thOcMPEhfurbsvjhdmhDDrwJ2rjR4prjndFdPuf+oFry+kI3BuU9ssEpzh3rV8ZEuC6UJ94oJLh9gYeADKJVV0h1e1Fy3bCeyEG0ThrgVYroYhZ7jmUvj377MLVi359qHNht4AzPGVaMmT5+fqP7DqSLTASSBM55nqXBi6lNZYXvjRafNeV9GNu5hax0ya8ZbZGV+aZ6vqNZgI3KkzvgKuOlIj/a6x9y99PgFipY23RCe0PM+htFOdgJbb6gKe/P5aTepvJ6xe8MrRK+9HFfL5ylitsu9GMwZO6ytGXE7k/mmdXcjs3p2Zd/EMDKlb1SmWbiRiHDR8AFXLRmeBXAgJ4aAAhyHaoI3X7kpJh2OyBhUxL8qacl7drmrI4tdsoGJDpXTZGN8Ut3ouWO7WL3NOTpC2+Eyy21Cg4xSyZXWqySZ/veStjDYvwA4ki0m5Xh9+oED8qQHreBGu7ruyAtgvzl7aB0lTpp64zyvdnSO5aDXcz2NlmlhP+AMUi2aCvbfNgfo13OEQOKplnajok3EwfNWXXR/tGnDqxSY6L4iRb+AaNLvFNqf9WxLTo8MHpwBM9uU2AaRwxHFVwQUHm5idtp2qoRKYO9HblGfoI7pJbaLvx8Jy83H98MkDW6Dr0VTtHSXkyDj66XLpYsVDkdCmKXVUm02l2704BuAWzDlMfS3z1tSWPpg07/wS5e61AYzXXM1kVw5Yd8zuSZme7l8y1C6jEy8dIhDG+nlG2aFqBXRPQzbAycriHu+UNOIfaYrt89UI4CBPx/bwSxvZTRYtQNIbmouy2+j8W0F1h4bWEctJqFXnhgdAV3h1yaQB/j1HI8j7atAjiDGiXlOczjCOijloVl8Vpn5NLUwRE7ehzSRIsWORZmf4bL555unx+z7VaOQCTeT53ZA==","layer_level":1},{"id":"3cc4b9eb-c8bf-4cf2-ad89-79086f5cf862","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件服务模块(crm-file)","description":"file-module","prompt":"为文件服务模块创建详细文档。深入介绍文件上传下载、分片上传、断点续传、文件预览、存储管理等核心功能。详细说明MinIO集成、文件元数据管理、临时文件清理、并发上传处理。包含文件API接口设计、存储策略配置、性能优化方案。提供文件服务扩展、自定义存储后端集成和故障排查指南。","parent_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","order":2,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/api/FileApi.java,crm-file/src/main/java/com/crm/file/controller/FileController.java,crm-file/src/main/java/com/crm/file/service/IFileInfoService.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-06T19:46:09.9684366+08:00","raw_data":"WikiEncrypted:YY0OWFh8RMOtWS0p5fnjpHV/8ij8a4ki9H2wJm/G2sXNzJIPNcOpyIJ6gc5Uw69oVc0vq+gGh4m1r7Psu5enV0f4XnAZVOdynht3aro3L6HJvZs8lkjI6PnFbnueSgitsmIv1Foqmzql4SXZSjCcVAcdHN+uaj9RaB5o9JopCdSI4hkEUBkfIG4mpLb4MOQcqmwmjhWr5a3f7lh3HpfSMkc8ECvtsq9uq0tuSUybdeUDDyDl0wMi6NXP6BP4ANP4DhJPgB17Ay2IzWRGbJhpTOKgAQmhlCncVaps6Vs0ViYreTqT8EN9WLlKzCM619P0WDwlZqAU6zZL/NiEpRYsm4fHRYqqOsQczmK6hTZmj7YSsTXeUG4bgp0X8b+w9C8L9fNBbQ+4ipFhYLHx8hts2wz92HRYSddoNBlDKYXKvUpvJtES7xkXAlx96IqPuDaTESBq1Qq7oEj6QxYOCDjUsMoasoSlpr0m1cj3u8u7qd6dZN5xfoa9xLQDeZp5JaIsSwSlCy4xYtCyEDspZUnvqOnp2Q9iYjEXgJrtCYP90jSzYSNwUyyJLIHMJWHcMh57hG39DwgPI46rtlO6+wop6n/N4M+ZtO1B0H7D0yErVTDD76RaF/n/YUSkt2uNYhQUqHa+ytJF0U2w+BCqWoE69kBNPkWIXJ/kyJTi0rmwLQaHyY4g2zROCwgyW/9fu5ZhYxCXsuZN++kShlE/9Fhb+/Fqu97rY/Ugv2B0TXsIy6/16/lrT78j2n1hMxty5VzL/9K98AlpJ4Yhov0MczWnhlSu4GBWJcawYfwsZnGKHiiStKETIACXi9MvpsJ/PORAWLZ4OOENGe+GeZ/OkL3o5eX08iD9k8ROPf7YDLZUbZlW595DPWJpdOfhyMrg47AoxIZ1VG4UKHJ8yPC2GhKMrVZJF7b9Iit00iKLwOvKM1frfGeILDeLs9UrNsIZz0+6tH4ITmanaKMasekM43UgTsaVL22GtVdtbEj5jtBYpRK0BXoZBOfvm5L1xSiKSBKMqdf5DiDhHVPjfu1dyOklkfoNe2Xjj14bmXrMFRUnETz8nUUopdPNyQy8I66gJ3jQVSmPpaJZdnEtSmwhp9g68ovlYrku7Xs9NVX4Igg9Hv67igGLjOtuP7ErDKUiIkg0k7VQdoQooYtP/RMfVR4qzbpZJ/1rEbi8YyO20ACLYy60pSXkKnp7W9ABowbDZLAT/Ku9teJmaokueC+O4rWnVjEeIbmqW8g+LeYCPlT3BJlNwNy7Y05bYVJrPtzvJbcyGpFI/GZmmcqCU15BdTjTWoQrjQLtNt/Dib1G60sX1SOhhGVc2XaNW8P3iYMmEuZIllful7UQzW0zKzh+MflTYKVqbtQ32+HQAcsArOdNjdO0SMrFqLlwIACNtCsT9zzT","layer_level":2},{"id":"2d22b0d3-cb51-4b9c-8ee0-b4e26edb675f","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据权限控制","description":"data-scope-control","prompt":"创建CRM系统数据权限控制的详细文档。深入解释DataScope注解的设计原理和使用方法,包括不同数据范围级别(全部数据、本部门数据、本部门及以下数据、仅本人数据)的实现逻辑。详细说明DataScopeHelper工具类的方法封装、DataScopeInterceptor拦截器的工作流程、DataScopeTables表的自动注入机制。涵盖数据权限的动态SQL生成、MyBatis拦截器的实现细节、性能优化考虑。提供数据权限配置示例和常见使用场景的代码演示。","parent_id":"65c8fce4-7186-4278-af29-31083933e088","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/annotation/DataScope.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-04T17:15:13.3135414+08:00","raw_data":"WikiEncrypted:Zb5TNaG1u/mRrgPr+sDyCqgXGXRc8KJGye/Svh/7L2rqMTxPVA+L81dQEV4bKKMdN92fErReKwf2pVVL5mSHPQmDAyZi+3SsnJxz6xAIQ+B0PPNodvj3DzRlLihV/CuWe+uyb8Gd2w0H4rsZF7OZgU0nq2gJG/PxcKhgWgP7aUlVcrMQ3LSJv8WB9TOnEJPgdD3ig5ZKSxuxQKhsJUn128R4sZ7+2a4wrUn3mtQcjsghLkdjenrre1Pe/uW7hNnXZGZ1p8LG6tAuOgWLxE5jsiunqiAqiLZzOYUUopRePjGBpDgwTJ8sd8b7E/Ov0cNZMCtR7iBj0/WFHS7zwFOUDGV2oc5DAKzwSWdbUwVnoxtpim2q8XMhGvDDwC7mEtLYTAn2rIO2PAdYfPeWx+QbKszK7bbIVle0ZE1vmrxxYsbkEwYrZXglHAx2qmCTHSe5Hu51JU6zbiLBYcMj+dXCUEBkEnjsn2Ndhl/eFWi//TjHwTzVbcmCEm+lajJ58GkALUUosA2+l8fVAYGTwVIw8fGNjwAWRoRXwZwXtIJCVms2o7cw53g8YWQGiN9jeran/cqkWZkj81POFKohF296u+ngpdkE0w8ckwsIUKIiWxzRycdCG1hH+39EVziCfulTgK1jRjEbkku2mi4hRTkksnt3mZDXdNoua9LeF+m5JB5thJR0h9AZfqSiE94rvQMxwd2jVABMxj4BuSQtd68gZZ5O/dEGSn/G/NqmdJSXG07sFG/aX8mfaq/pjZgEXcRG0RNhqEeB8gSuQyfP4AlIzyiHmcEyNQca/cuQvKK2/vgXXrDnFQINacIxHpUtNF+cND4M204l9kyoJY+G/55E5/TQximrxHceteK/qFWnKt5kBWgidI7o9W6IA7AJc0nkrGDChPmcU/A4WwPuUo3Wv0tmZCmnJ+hJFSPrhSUQ7s5HgjHAhkI7T53YG6vse7cAe/sbXRc0If9pwSZgb5H6a/FDiSx/pxsfHGXHrsjPCYLl/Pteq/trrf1JwH1X6jqCPMCh3cjA2+2VwOKG0uIzPyHuGYYckn4D94bOZ5dA/9iqLuJtW/WvAqCFcTCy02O6MJ/+UMIZP3dtE02EtaWMwiHJxOul2sipBax2hLo3sInL2o1Htzy9v5dnbOepaYGatPU0RSuRNrmFmPRbIenXPjNPrw386I9H89nqYNAz+kcWWZY/53hBNApKNFjWCmvfsXDv1hANlYb+OLq6zhBUkZfinR1fG8MAWU0ckEHteS+/HpQdhbZHWWlnB7J0ChwkLShBF0W3SKWtdb5jdBcsSjrsvD+1dl0Fdg4gBp91fK4YmlI5IqdslmA7QuxDIWYiyznYYapYmNYw/irwwhEKUkD+cjtxk5eZ8cPtXL8qg9JLnxWktQTf0Zl8EGuY0QGARR2mkObVV35TBMUXu5AzhCQi4qCut8DK+tdCEfbKniudxDVo5z2D3hqM+luylyb6VrI1IJPXhs8U6+9U8dRGsw==","layer_level":2},{"id":"a1ee2722-ca15-44e9-b4c5-f8dd54e74819","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"用户安全信息","description":"user-security","prompt":"为用户安全信息创建详细文档。深入介绍LoginUser用户信息模型的结构和字段含义,包括用户身份、角色权限和部门信息等核心属性。详细说明SecurityUtils工具类提供的各种安全操作方法,如获取当前登录用户、检查用户权限、验证用户角色等。提供完整的代码示例展示如何在Controller和Service层正确使用这些工具方法。包含用户信息缓存策略和安全最佳实践,以及常见的安全问题和解决方案。","parent_id":"23dd7f77-e190-4852-b94d-17d2b127f16b","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/LoginUser.java,crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:51:10+08:00","raw_data":"WikiEncrypted:7GMpDAULkInIjOJUaNlZ4k4sWkUIXBOYPi45EYUmwrPFY2pWRKUikRVaXDdAIABtqFiyHF00eDZK38rFNHqYRbYFvselWhCvR1knbmS6vQYTLlWGuXSiYHE70LDK1R5a2LkxkcIyZvlUQFx2Oq+uqeqwuDhgJ8Nb/MTTz2BPLdP7TYJlYVI2Uwrk6kKxxh2D8GCthjmSDzDQDYUYk9vF+NWffAwb3OxJhJTbRs//DrJZddq3NsPRuvG1CCFQudoV2T4JUkyPGKDXGMfv9PO5XRV5MwaOLZAacRzFnjkJqbV9BNU5jpOYMta9k85Ebg/RrdJ/BHc2pqc+2izdsKMwyfSZLEIkMySRl0PT11XuqCXq5tQBFCRUhboqkn5J63wNarc4jgGE9LQM5cnooF3W8JPR+BN6WGvNw7bw8pUvW+YI6LKp1l0w6YGOYVrQ5Cwdy5Eub5kzRG00137jetpKGOrsCVFdqC/4GlyfIji77+pOfX9xRsD0r7hmVzYxQTmGLNFfUX/DQ371JAnXxVwoy+PR8OMgRzG6o/s9+Jh9iLFkgAcBeJ4zyKLXEethEbVMqAMoxbSGDj6BnJWsazjRHogBFH0OBnL+YLeQL3Chy0vKuOXL8f33fGG+zmvMV7UYi3BQpjJ0gSdKj2Q/Q5v3ajn0Z3asmwOQlAtKLi67jpxzjlQjsVL4Pj112anewuTznarphctAN6rL5AKnJJcjB8oGA0EpKeLCGgN0Coc9CkMKb2rl2bymt80VfXvHTPAiSZfZbcVw1wNJjybieSwuOJp7mh3EyN9/Enmk4TYUxREsU648ICYVp6BsxOyVOFbE7Zgl5wx+IoBLLMoRRe7mF3sWSuq7IA++J3vnglb1xf17o2Y3Xozx/Vc+CQSO1T2m13drqKVyXKcKotPhHLCbdzBFO9RVaggY5VNLVL9dzQlZ0KqjrC9idsju3CVvoMGx4Eb/ZsHcIlnQ1nqbcc+gfJzg5x6xNLqFzIohqmYFWXfg9DLqw5tt1GzeYpRdiEsLlaJn19dmNbE0vPQ6XfNFejxWEEnPL7xsTUpjiLMUzL3qZdNEy0NRfb/00znEyCRnQ7dlo5XsePu/KfKGIRo8ow+hnTX3FTzdJiIJ3Nedj4J2VW8njl1bV11Sb/dJHgw9jGLvSB5KLFOuE/X7Ak3RYa5xxI1p3vvYejj3TU6vSZckKcHsGIoG5dDIsXWu3fJiLTA8ZNzK3wLCSyBwaogfqpxE6I/O6FZbGiiQ1C6Y/MEia05jxwtX2GZCQemmbbo6","layer_level":2},{"id":"ca56f7cf-bcf1-472d-80d2-6e0b42d8e0f3","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"Jackson序列化配置","description":"jackson-config","prompt":"为Jackson序列化配置模块创建详细文档。说明全局JSON序列化策略、日期格式化、枚举处理、空值过滤等核心配置。详细介绍自定义序列化器和反序列化器的实现方法。解释大对象处理、循环引用检测和性能优化技巧。提供JSON Schema验证、API版本兼容性和安全配置的最佳实践。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/JacksonConfig.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:51:32+08:00","raw_data":"WikiEncrypted:6gHV2se05+vRhSnbu3WMw4KxU0jJVC8iMlh2Qgu9U49loQjb4k1RXosU5jdqrM2L4yjlxwHoquWYRwHspZZMFz4bv8l5ZFhp+jKFywUSZZGFJ6vstaFrfFf12YO8I54aCugWCPTu6Ak3DkWmeF37bqnr3IQMr3yy8aZaFm6uuYMQznTUVZc8juJhbVKp9/XyT57KHaLAwULHeer3X8JVBqgQiipy3psj8LHksWx8xE68VRlLBCjl9eRTuoBuTyTk1Usdw9tkr//c/CwZ2M1KbKXP/zl81JjyNGov3YCNifOCoduTaOsoak0S7ljEOL1MztXF9XdB9iljJW3IPWkYohkZaY7Ob7lfhn9EDhiDAOboj95mlMOVarYd/NkeHOsAHEhhwdpTpdw1loCOLnjo9Yt4lo8HU3HkgjreQtbrHlNQTTYtj5WGvccX6Jn269jFROg6RfF7yx/uagY1EKTbCmafTAVd3z6LAk4A/YG7KgHFljfafmOgWoaEIjXvNXdwswdYOqG9KbAGlfxQfZYEbzibbDwqn+y6NDS4O5udvYSf4/vGi1+jOPboxvllQXnDPUsTuOIVi5k7c7zKFuY185Cu0PgrPTmMZzc4gIeBEhy3+QKVf3e3jzhNs2nXim9HzP6xcmpqJn7FRLdG7pxRA0bKdkbSojrOSUmQZvQf23rsV4n0BbsfHn6i4fS8HClqffiEAaGXhBXRXzgOngF3Ul3C5EY/Knu/Y/O+EqbcYkzP0sQ1brcYC/PEjs8N8/vsktZ8Fl793NdgHEK4byV26SL4u40lKtWJ1/8HqTGSScFENfxZWZKc/R4/aURIQO0xjIN75ZGNfbLfTjWCRBbCcU2LOHZSN5uFlTaFkIIY3yyjF8c4nSmdehXJpgl5dWLHDQ5I7+Q0COo7xQgOuBNDSQ==","layer_level":2},{"id":"beac3859-3efd-40f8-bb6c-cfdd3d22cb0e","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"第三方登录集成","description":"third-party-auth","prompt":"为第三方登录集成功能创建详细文档。详细介绍第三方登录架构设计,包括ThirdPartyAuthClient接口定义、DingTalkAuthClient钉钉登录实现、ThirdPartyAuthClientFactory工厂模式应用。说明第三方用户信息映射、账号绑定机制、登录状态同步等核心功能。包含如何扩展新的第三方登录提供商、配置参数设置、错误处理策略的实现指南。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java,crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClient.java,crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java,crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-01T10:55:35+08:00","raw_data":"WikiEncrypted:WxCGFGSl9zR6IDeUdkqKNG7ZGOiQN8xJ0Zck8his54pxeVD/1lpKUGNE/zAfWgzrvsZeg+WvYulWQVP4zXg8KC1sWV2gfDxqUnfqFZt2gGohZBPN0KdZHN4aX2pMTr4NmiaIEH6NdlFMa/JVKaxUCbilvap/PVygBukZoCyxTjoKXrcsqgGOPUfl66mfj70e7qRE2gQjmpcv3yDRH849z2EyhD8TBOlwqzRoGmTihV+j19mD7XPots+GEa/ZGtdY5Q6ON8k94hVDiXKY+R9MpIDbaIE01FoJoVkVki1+u4GkqhdiIRoNcgbK9KZdP7ciDbCjfGLckf5PNBvKUegUIrweIEcA/sjM/Q2ynzADGf+r1qbN+7fY8JXes+z2Jo9A+Z/kRYYEe5QrA6gan6PnyGx4ZHux23mkm7OCAOgBn6g4c5nzKg3nnNxRSRVcymwF2k5HfEHd+tion/DdZ/fKAaOSBCPP2rCnZhPFjWDALCe9GJcLV8sGjqgkTYpWydehHpZKc4/L6ZDIISCNQcx0NVBRg277krTymZ376ZhbgCJW7kquMDOElb8nu1BudErVnWRi+X01SErJoB39gxJSzI5H4xVGr2u75wgl6HgUKu69eKMfMwV1LecNSR7ICUVj4CzuHGKJYefjCKQmLyj+XgvsoHptCTWHVZvDqZ9Rxs0LETJWXEZQ4lunK9mX5/I7HsAkHikRFvgHTjX/zP+6zix+vDkMflOWjo+JqsT8auNZJ8tfXk0vDzU95Q51t6UXoVcIX0RbP9dEbf84DcFbIAiY466eEt14vXvJRD8EbmHgTc8N37CdTYGZGVfYyKUvVn/ZZanzZtcIfAxRiVmatZZtrQFU0PgUqfTjf2Xo0P3sZ+wVXXvnyAsi6qJ5v4Iu2+6rxZQ3QW6sH5Mwbig2LT4ItwG3TgF6u84qXAXrRXGDDgU0qxCi7EK+Mb6w9VEPg9Vic9AEZ8Vy75bXRf0iJf8DsJNoI9P/PJvsGCk9Gx00Wc8Mua7v/uJXP8plkBooOvBHcQ0rKh7oE5z8PZNCuO1i4NSaiwaILMy8gscIRKqwDZEtwQYH8ovfy64Mznwy8ujvh90u8N7RNtV0jiX/TMzILQD0uEk8LqGNMLq+7LMI8jRuCTRqWCTz9w+py5EeDUZQ4Z8Lz0kfdyqJRALRX+jw63ogQUcRZ+UoWsWdLmnBR/IRox88g1EaGlN3PjqWsghmVkeRcY4rwZ+Mt7yk8F611Uv5VmFhigmu7pRsgw8OpLJh8TuCBZ0SB7CcZ9WBmj7cbjyLrTJTrefUAgw5bDAAMzGt0aT8JnzReof3nBWqKgZsgJ6w4wA9p7d9U/zDJIkz50L+lpJn4ThqYGYQgZbd8bBHiu90B24iuanphZE=","layer_level":3},{"id":"158c9c2b-ea3f-4e40-9c9f-a26a2316416c","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"JWT认证机制","description":"jwt-authentication","prompt":"创建JWT认证机制的详细文档。深入解析JWT令牌的结构、签发流程、验证机制和刷新策略。说明JwtAuthenticationFilter的工作原理,包括请求拦截、令牌解析、用户信息注入等核心逻辑。详细介绍TokenService的令牌管理功能,包括生成、验证、续期、撤销等操作。提供安全配置最佳实践,包括密钥管理、过期策略、跨域支持等。包含常见问题的排查方法和性能优化建议。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":2,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java,crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:52:01+08:00","raw_data":"WikiEncrypted:8ebUGRa7qCwWfB8YHyDHESvFrQQaaYoCnwBeRxsXQ/pOUkfYcBJg9tanzNivhH85kJhj14qq1um8K/EP7sUILNwF7LDpuQ/bkaYZyJBZFzl8FcIcKcZgr9F+/fEUlBFkWHBMr948Ar1aYPb19jv86MeOiNk8y7yT2CP4hpuMGpUr+y1oxMxMP0fK3xjJ3Usb+fjncTvsmsETOxTJl7V34iOnK583UB+r1qMIwQmbkTQb+wl3pcjtpkN3M8bCpHXchohf4VY+vvMkedsfTIoGoX8EbqwbLlMx/Xq1FEJsGM3Q6IWbsFRUQf5ey7mUxc2Hzgu8DjbjMU2pFBm0zz57P5YQtkKSneFz55vr5c0Kl76K/t2IsDz4pKQQAHEy1K1aKspzR1Kkei3avCP+alpRkA1S/mGMPmyyjyOQKt0H2Dyhwe+yoHSVhVfXQeQ3qOuaguikzSqhThhJGLoNxgCWtpKO1CG0qedMMkt3pA0l15ESDgg4NiX+gezPhUhQmeCOm4mUOL8tBdib0j/DSL0N0geyIr+ApequwPEw2Fy/0USF7PvMKqsLh/JqguqzZDD8k8waugxCSqj0ef1vHKYAeD+ZEkerTqeYDQw3F+I0RJi5HK01EIS9PbJCsZP9RzEc/eEXLFVwxLOClkwW+LgPHCRSIy1/jz17cUKkVfphWXHoCpHEo9U+azZxaIuLJrA9ED1qYmK78wq6TbZbXK3G7sapF0+26mMhJyndH5lNIYJXMPwk5KhNB8cOrCnQKiNsG53JYLYXMt8uOZnMDFSq/cWBmCjNm25gsU1wd3TWGB44oRyC8SCOy2Pax356YHdfwBdJRE4OXrsh+Vw2SPTsfAJdjDYB/cmIV3H/a7XBYErcuGa0QLNIOSMhQM6XfZcKfEElia42DEFsCNop2+SCCg7qpWto+gnTRo9G16yJ6/RJlbC3FCk7Kj6nmMVbXRFx77T4YL0H6ZK36biRMLlrfklNt0sTMXxXWi1KXU/tYiovNjWO9ulF1eAucA7MUtDpayaqEkaz6Yox5FCaDh3xLN+CqKbd5t04ftQws8kxWKE2catjg4E5ohF6VnKQiF2r6wt6U0ikkFSA/b+TOSVTAvfBejO+11upMtQX3pC6nuzR5yCnfdYJ26cXk8zIK4CRpcIbC6yZVIWo2uUOHurlOJ4b4GEL6iYXFqLN+z6FyZPOqWyOzS5fBUxdN+v/9MDWioihCQUp6BqBXaMW9SmN3JTm/4XNdEZnBRKWseEaNczsrTmZxvKjgrx5eHSNWYOOGycYVWu4wsEK/+6BuZ7TFg==","layer_level":2},{"id":"0642bf0d-15ff-446e-9a9a-2f43a53e7d70","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"异常处理机制","description":"exception-handling","prompt":"创建异常处理机制的详细文档。详细介绍全局异常处理器GlobalExceptionHandlerAdvice的工作原理、自定义异常类型BusinessErrorException、MissingParameterException等的定义和使用场景。说明异常分类、错误码规范、统一响应格式。包含异常处理最佳实践和调试技巧。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":2,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/domain/exception/BusinessErrorException.java,crm-base/src/main/java/com/crm/base/domain/exception/MissingParameterException.java,crm-base/src/main/java/com/crm/base/domain/exception/PermissionErrorException.java,crm-base/src/main/java/com/crm/base/domain/exception/ResourceNotExistException.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:56:16+08:00","raw_data":"WikiEncrypted:RgZcxlS28ITmDGf4sH7fKcx/KKgHynIcKtHjdIlivuGYmPqvzEBVHR01xnhoCJbxF6tU+oaFpWLe7rbeqY+Zoz8gcM7OdNVIBtrMLKyfxRrlyakQNvAAnTChr6Dm/JL2pbb3X1qA4P8xiY0UHjAt7Y4hBASvUt8GcwmNTaIEXNvtyfrAg+CnZiIF5R9AWNHQnVOVN/JBzCr0cjLWIwuaMSLmgjpADKfkhhrTPZ51Re7z6O/d4OSp89iMAKKKPfd6grxmUs3L19D9WtPx1XQW4MHOqyv6HLi04VE5jjfk/euEoxu1QFpIf5Uu9iqLkEdj+cYcfojzoW9jS+aiN2MK2ayagPJAV0hB+lf21cIlWRrOb9n4TGi5jX3jDW4H+dnBGuBygumWM1f0+LBtPxTLQR21sUG3MMgtTmGcoEJYDi6WIuyyyI3Zujkpn5uCApCT94kT7OHZgeALAqix53mHNg16VxtDrLTJ36UFO0XoAjwF5ujovrleDD0uuNqwV9lordmU1fE4faYLjM8c1GJjbJLeG+mPAxWsfO7PlDdy31Bxg01BYHr15NK1yk6u9/NZjpD5IcpkHv8tdh/iBphJRfXvTcYGKVEmVegI1vFb1kfK0Ozf6cE7VDFzXshILV6nzN1jUWMvbdAe9hx50Udkh/U64m1XvfdL4X0fQcSl+Q0zXcvHJ0BrkHfXt6h/hdDut04GjdNx748uU0ecb8AjZB7wxKXaP98MAopvklgKaaQgKgtkXpZL662OXTMoazKFfb5YUXmitf/TiD08QMDRBHSAF/il7hDg3CvZOzdzujmNe5+oOhntuVd6oFZCnHwJd0Xn8xPOuSYPw2Pqu45HrTISFB9FmtjihEOTt8nr8hJr637Zq7GbpyWdQQjdgAPRXYmgaaPmq2E67kvkiBS9OTQi8Clx8VOpcatqRKl9PrArKYQ/bVSa+pgfLWVrB9+cWWb05JpKj73Og9EOQHumzw9tq4+j4nj+dL4PkgAn+lhjWqIU/wFAMyi2aDXvqg4QpwoIboinEPvnpt38cTnOSy5TOfzcD72o5mSpAXmpTuv/TjaJb+VOglK6lMxVulozUsjt3T31cEr/3cmyDJS/i0NaQcr8ooU7gU6QcUPIENJF7IS2m04nBuHfkEazyk9We8vLHje163Nt7SQceIvtfVktC9vCP4nrsLqbuq52mL0i2RL+cLf0z3yemu0pvMgAzNtwg0HXWjWdiEyiJLnX6P+X+Kbopu+k7FN+916FlVTrmLemf8ElKKDoaCuZewHx+as+ERnCO8ln+gf47TpPj8gbXRfxvNX9B4L5p/8uSFw4Re7Y1LLz4pyRh4mEYVBSRJ63rHkf8j2FJhqfrTd+2g==","layer_level":3},{"id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证服务","description":"auth-service","prompt":"为认证服务创建详细的技术文档。全面介绍用户认证、授权管理、权限控制的核心功能。详细说明JWT令牌机制、RBAC权限模型、数据权限控制、第三方登录集成等特性。包含用户管理、角色管理、菜单权限、部门管理等业务功能的API接口和使用示例。解释安全过滤器链、异常处理、会话管理等安全机制。提供完整的配置指南和最佳实践建议。","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/service/IAuthService.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-06T19:46:47.164529+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YdEOsVGgzo8Nfq5SubSefWdKC/0fdl4/fe/r9twXsQwA4+/qxaSef26qxWvQnh/uDCOAbUqs8Xf+lAVjnpcbMrNUaQOMahlUFr7tjNtFQU6LAkfil2LysP6xT8Frf8HT5FNDhGDLWBGX79G96V2e/f7+hAHQ6/d8f40cMFagwvBszIHRHtE/yOCmilX8mkDuI6FQXuj61TNnQFiNSOzv+kCSlagN70wxgypMTfCVwB+WYDRL8FWrcxH2UWwVGq8AwfM4G9U2qq46F6xqZaR+Bb5Ftvfspx0Uiyy7C2k3+BnG/CPKsZ1vhhQNHSD7zhxpAG/Ul0drIVqhs8A5cHLMyyB6XcpJBbcLZEouJJ8kgVET7ut+878WewIGuK14Yzyz1y2UGfSLxlAgD3l81RcHHVDJiR4OpJ4TTZAgv7KJaiD0X5nyOkPI+TNRUQCI7yA18/m2aB2bFoI26ftvgSaa5cLBgd8shCvUC5E/uAagvZGbjOYule9abogkFwcooLOJDHXmoTLZIoTHLcVcJKUgLj9nVsIO7049TAwzMeF0MUY1Yu6NE4Q/u2rafrZbzOF998norI6hNUldypkjJUHcWnwZ973KDBPazaAQnCxOp/CN4xOK/tNTcYpQSOp7AvodIiYp5iUFXuF0XfVG6YsCg/GhAsnPDhMyWri8uD2WtWB7/jgqUmLDmU35jsMhvBPTuN7wYyxbKHGnLjZJ9dDkBCF8BYh1cr0m3U5xLyMUJfZSJfiGdbz1rVjV3Co9+/9hut3DzGT7jh87/DhZwTm1k6S3FEVKZNlnmFtuyAeKLGdvZQb4jWhVMXMNUfX5abz3WuEXpi3whQVxViN0b0kujZdG2ru1dFtIdLQX5dzjwjzWb1MMJjmK3K07OT/mrJFKZ/l+4FfASFKL6+NU5tf7wySdU3jFfc3Mhr/0/CIp/Hd2chN/v00cVSHAIU4sKF6uit9sNNO/sA6m10JtHq4767i8+vXmPSQZL3QHnlSocaqvfmkIeamqwGHVm/nbIXMTzvmoB1ZX9SQxy6Ry+iOFSlHSIrvaiPybVzQ0xEQkVVRf3QKYwxXzuJdT2rQMnHyVqVqKhSrip9uJN3HxWJoa2kBY34L+T0xSNUcilNzCHvOF9H9QmWL3bShI466P3f+zQ9ufGxDDDMHI5Egyy3lRmEPzQuP60lj7nt740Nmtct4bzPS+/6HCVu0gA1+Rw+EAN/bSiXb0POwImBEIx55ScZNT2zy+T7Xy2gRK+sBy2yShyzjF7ueeovkeM0TQdtLEoiNy1rGjOcj87SvI3oymPR9Y2QvGI1a38ypITFFttAFe89QNjAT2zuksP84cZg+4SZOgDL5/Vatbkjc/ba2eOWFYQjwWxfE+GE2CVxzuwZ8GyEovvZv6RA0VRtACYfmVTg=="},{"id":"a131dbed-4290-4582-bef8-49b15054143d","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"快速开始","description":"quick-start","prompt":"为CRM后端项目创建详细的快速开始指南。提供完整的环境准备要求,包括JDK版本、MySQL、Redis、MinIO等依赖服务的安装和配置。详细说明项目克隆、依赖安装和首次启动步骤。解释配置文件的基本设置,包括数据库连接、Redis配置、文件存储配置等。提供常见问题的解决方案和调试技巧。包含基本的API调用示例,如用户登录、文件上传等核心功能的使用演示。为新加入的开发者提供30分钟内成功运行项目的完整指导。","parent_id":"673ed306-0e91-4381-a45f-07865c6c3582","order":3,"progress_status":"completed","dependent_files":"README.md,pom.xml,crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:40:06+08:00","raw_data":"WikiEncrypted:1aHEw3M2aeluf1++NE1n1HTCzLNrSYNKzc2IVp06RQtbuAYcMEXChpU7tJYS1f3O0opR6Xc/vB+l5keQe8PgCRMXTuFik+f3C3rFcP4dXnar476ml2xcaJkPDVPrG2IY3nGMxgNM0xgn/XUv83MjUsGTLoJBhrq8fcalI0KdODjCIQ4ci/FmE5LgzoB7PMhgzR7H7XYD3sE/nW36F9h1CiYCUVKV7ST63v2zNrjv9TEHmDxkJv59IGh7xXHvH32NEmYBgKf9EmMaZN3nnFiz8GVmbRLo6iYtiN7sEix9Kc5sQWFYWF37eYA09qppBrInO3xC783RLudu+33ECt7rOAxvW0O6BKqUykkyUWkGdNgrn+NDjqsq0iVe40cpQH8g2hLC9nuZaqKw6gedybz97+rHZ5agXbEcig4TGQUmMsY/2qNWZGv50UWiGiXZ2JF+YC9ACFvT4DWNDTMk7GDCJHnBRwPfb3KEwNTiRRO8J9DkDUZziN/jzUjjnqSj8A7SKY3byhqY8HvudqffB/iLpd8yJZhj/4ONHrdth5tQVb/IPiXTxU6rT8QN7A+TA582MHdOu47b33ifZ1d+pV9BP9F4gcEfya0hDsSYA7CSW1+DqWO0T9G7gcuqE5FjDYOf4SVegqU+jPmii/dE/WdbFKt7pcxYF3C7C7LlllJiifeEH8DRNUF4djcC4Z2bjwJrMDLrg5LtCRp/yz9Jzkq1WfvHzilYTyB7iW9XO1pF7vQhJJAhJBa/X34nx6oiG4RtenWlyO0/5Wvudav8J/kHesGEfIk1+0S/0VhuFG+HhA8Nuzk//CBloOWoTDrEOSsBftfWRQNUbNBNSFi1kk//gCRfQ5ijIw7gVGDn6bwKRPhq5VpDX7DzX81YCTtRs+Uu0/kNjXpJUwV3NxAQD/ewv/GIkYKiBRh8XyOuceAy6L3OlmNKoLj7EK9hSAmSSWTR9KXxzTNgekMSb4JRete0RXkw6SDrRyWIEnZ1Qd46hzP/XkJEqivT/H63cCKMYBMRex0JpPWOEDmscmgwdnKrzrEdUN4M2rj7PDHCDiYYgyesosQpwNZRE88r/kzKdIrabDBSvY3sG1zqqzpZZd5sf4bAkpGOU7RfF0A7JCQEGuiSBj6V51CGftxLCQAP0FZaaSE2nVlM9jVxPm2EGZxkQM/SZJdIvE3eZrCKnmno4vtFqdI4Abo90LFLd2teITMqJ37e6pUxav8vKFOp94Ig+L1IojbLRnSU0IwnqtjQ8ERKrh9CCvGKjOkMTfz75Xg8UUaB4ka1ZGBcZwbV3WghynxCNFgwQXbMKIAMqbLnF0bniiBPv89sIzi24ft2M7Ga","layer_level":1},{"id":"903509ec-841f-47d8-b6ee-ee2e202b6d4c","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"缓存架构设计","description":"caching-architecture","prompt":"创建CRM系统的缓存架构设计文档。详细描述基于Redis的缓存策略、分布式会话管理、部门树缓存实现。解释RedisConfig配置类的连接池设置、序列化策略、过期时间管理。说明DeptTreeCache的缓存更新机制、TokenService中的令牌存储方案。包含缓存架构图、数据一致性保证策略。涵盖缓存穿透防护、热点数据优化、缓存监控指标。为性能优化工程师和系统管理员提供缓存调优指南和故障排查方法。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:40:30+08:00","raw_data":"WikiEncrypted:6+tjrG+VnXc4xk7AT6U/byJwOxViAkFqvZEtcR/8QP3UxPJ0HYIl/rA8bKGAlUL3bGwDrYHOC2WeAZQf9gCnQ9tjZd/DfaHvHz0rfqkTTJBwvAFDpwLuaoY66glZTK/vzLXfhlXVd76+Ry/BrYcmAE0BlIlJixKWlLcevNR0clGgCYfOaiWUnDJLxOTCLGM1/NOkzL/Gc9H04dC3iXr3egIBRkEK3qmGsZVlRv/VTUFxzq2bSM9sg22pWDtmFfZcCjUJwLkr1fme2LyfGdP/qcv03iHzIcRSpI5xpPP9G82aUR2n8ajzAPXEnUIZEsFRRsJJ8gDmv/czDs6tv2VkL1vvykrbiakQRGcWPL1fx1MqsxcUuE9aOtPzTauN3mwDWZkVsLfP10MnGCJqfRgtCBQmfX7a7PMLGKnf3vXKofBEntU/Q8M8lomIEkw7nz9E4YCJvY8NNp2wEwMIXzE6asGRvM3X+ntBJfDyeCPVfX3hMqoPb5pzjscB1z5bwYbWOSCkNPkMsY7PhUEsZMarRm8wBiFOxoX6Uadz6GY1HWVwW+H+WDUmxcjcPnh/UmalrMPqYbovNpP1aJV1v134ogDpRjsRFWnfEpLRMWis8Z/jpoTh6FGItqaNQHNC+DLLwy1UGdGcvee7mRl8LPk//atAQUPXkPQwcdR8T6VpBmVxNEam9382X45Ifo0B1ZWJ0YplE1VgQuWq6YzvAqNlB7H6C1aLe/StH2jltXI4dcc3Vn9AfdkypidNQTPTdjKEY7qfE10IHkSBgUEuTM7wVN5HfBAan2Pi7VWc94YCgQb9Ax329W8osZfZL6dVoN+uwffSgWKFMJXUqKKySzvBD6TA/ONCISg2bxPTuyiDr4m1FYAwA/vuyu/dhU5SM7gZRN5NcLNN5q2GpQ+eJN8ADylDfjQVSXijNF8/RLx22eE8n0hpr8MIL7MrStfLBMxhDdpE43z1xBEwhXX3eJGCJ2CdqLh1Xzx1SZRUQXbpfaKh2GsxU0mE+jFSIubHO4P64MgTysWmChQVlbkW3IqP1sJw1LjLGbBZvvHl6lQEfgKj4j31s4F2zf/5fTg6BFepeBFAXqFJ/uG/L/DHAWhoE4eGEXwScFGr0MSwKJ3mOGBGuV2R7ArBoZtVdSoIPqwAtNOVq2eZ4olufk6QbTboqXByRuS4fHYFCLJApVGh0PI/VN0e4YOY5ljVyUhPdA4IpNBaYE8otmu37M9Uh+3YGn5b7JX2X3fzc/aYD85bxela/Gj37jZA8GKmGfQIS+iSJE9guD3TCCJPngTqIPZlyzkuUsas2soUQMHW16FrfMyTn/8gI6k7X4ohVGVOzGM/AOkQYAmTdvPoYyOlP4bd0g==","layer_level":1},{"id":"e8319196-8371-4fce-8507-3ce68e0fd862","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"菜单权限控制","description":"menu-access-control","prompt":"为菜单权限控制模块创建详细的技术文档。详细介绍菜单树形结构的设计、菜单权限的层级控制、动态菜单生成等核心功能。说明菜单类型枚举的使用场景,包括目录、菜单、按钮等不同类型的权限控制策略。包含菜单权限的缓存机制、前端集成方案。提供菜单权限配置的完整示例和常见问题解决方案。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/ISysMenuService.java,crm-auth/src/main/java/com/crm/auth/service/impl/SysMenuServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-auth/src/main/java/com/crm/auth/domain/enums/MenuTypeEnum.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-04T09:27:03+08:00","raw_data":"WikiEncrypted:SFq4naTIXfRmvCSi9PrDlS97tSpEG+LKZREhhwLzTBYkoSzdfB3zS//OFuGCDAKE+NY3HcWDImN5jtY02wCvu2EDo+uliBxYhUcRUgq1u0V8TJO7utPBDaUQK5bmSMLxWQ7FKRD6f/IqubwZh1ZG51BHw/ILfPEfv10+Se0QCADOfjiRAB5ffHvL2unZ3fTw7ru0kgtdCX5Q+y9AyLKs0eNBt7D3SnfuQOvNhIOsASZ0scb+ET6s1MdfNexuV+NdpmtZr3NUfzlP5CQ1wBaWaTUWbnlgy5TDbDFUDIVEHSeVQ2lbSBCUk2yA6TOPxh2PIPfFr+gwnc7qViBI1JPKPUluu1MuuwTjilYr1gEEo+YPH5Ar3xx2eAQ8gbXnHQU8ODSV5KAq0O2onJB50G7MTSeVnXu53ANs/euc1YffnshBtBXDGubA8ThNS5i9LxNpGVLqLLxWWLq0nvuhxIfEIm2yUgM3+FXZhfIdcIkYKos/oanY4uBmDoEixOa8J6jA9rnHcUBE1Y7uTIlLaLvT4EGfu69CMOu583fCQux/j2M+ImFgqT8VTd1IkWl2EO2KWItRkDxSSK74rFNaCeasMGev2HrQZr9fSDLhp8CisSOi3RZMRLDp9Kvs28NWUCgOWKXxDNGURMjYZIYXQ1vWTSqg/Hyn+7YZZcPomhHPsNKcaqTJ0GaRI8sMh7SeHNHFFhB4m+1sqSD7pJJXBitne0OeD4sLe80ScEedi0ZmKN7ooGkdrE6wfyPVJcIDomO/AfULtQ/FFcS8kOY5fWHtsHYxGZxeeLhcriXNofmXeisAAe4t997+yovaxW7IQIl1dEoq8WzaHUHJVsdakiilqZJxemNqBw5egLsdvzmXO0Ac8Rs5c2Ev4IuiGIIOcQjwl2IhfuSpKa2QT4Cwj3zYLaG0fAiXRhUM4/CwrXcveQH0zj4EEm3+DF7OyW3ZfxMSdF7DYnAWikTIlvgfVCnxj1hSNdzt0370SB28y+7NqZh+l1myQg9nJoR/xx1z6Poduva8lhACd9mKAHmgDXCKfr3H5+B1UE/9+0/2kWKPbS7sYupAf2FblxfeYi7khcirXJ8NtFrH2i81AzwpAmDaciWLClv0hweis5sgK4HZVLHgqL3g1ejvdrUanIZMN6hdWEtmAV0er+anzeCSwyY8fgwMG82Tub1GP20eJRwKWFHNIz2Gaz5kvFGNd/22dYedq69Wr5YJpHseaaPVZXVqp8n0Vzm7LoLY2R2jlsVPSew=","layer_level":1},{"id":"45d01f64-96b6-4edc-8c0c-d25d7f250025","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"任务调度","description":"task-scheduling","prompt":"为文件服务任务调度创建详细的技术文档。全面介绍异步任务处理、定时任务调度、清理任务执行等核心功能。详细说明孤立分片清理算法、任务状态管理、失败重试机制等技术实现。包含任务配置参数、执行频率设置、资源监控等运维要点。提供任务日志分析、性能监控和故障排查指南。解释分布式环境下的任务协调和数据一致性保障。包含自定义任务开发规范和最佳实践建议。","parent_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","order":3,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java,crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java,crm-file/src/main/java/com/crm/file/config/ScheduledTaskProperties.java","gmt_create":"2026-08-01T10:23:36+08:00","gmt_modified":"2026-08-06T08:43:59.3664927+08:00","raw_data":"WikiEncrypted:VyywLMbCKto41PC5aDsBo3QtOdTacjy++/nWpGcV6hovQHAU0vfug8Gi3WuStFCRAN9UBbJNeA5vkY2DpjePTjZ7e/Uoa/iCCiQJlziRrWNAXtU7gw3LOPP/YQfOmRFXWgTXJYd8HfOI6gd2hY0XzzGlb9m054SiGtNHx4P/14Weyg5jRpUTfn5dAA4xTqLaOVOegwp2742pCIxPPw5hcWl0QSs7m/vLnZemA1XeTlBNwLRUxxX1O7sG0zrm401aunJbMcRVdx2ZhVtcyY5yKP33xRkXE9uvQWmo7albIr6bNXbuPN0MkD31fdM1dsThILE1U4hlID9Iau0pCmZWajREzxnlFUodwUASrQm5ctseOfj3WfvDcuXyIj2XOsFWsM4WoCt2uqCP84I8a2LRHJkg9shQ/bm7aYdORCg35lOFhHb9ydjCBiviPDCzF2DswwuvvShTPoN3SFp8jJW6H9K4yOL/sG2Bh1unKPpIruBHULYh9+aY0YVifiBUkucNoe6+rUdT2LDlNIHCnv2Goc6ti5OR+sUtiNXGqTLuxyOhBfqJYXKqLE5BihWH5hFP34E6gUtLPFBd8hBLRkS/fCFmc3IFJUwwz9mrQIVpP0AwiD/lKu9QXOHO/jkFueZ1fFm7KSPIu4FXUEF9b28mko+DhwAk/D/7jsvihRCy4YlPOJ4u4nyYWN06Chl2iMt3Wk3UuDNg6joco7CAxqiBAQqXKxfry211ZFXWREW5pvUAcIVZ4cwUxujq1m1CQDtyGSEKVZszbgZ3X0KHKobaNj3qOLNCAHFJ7euY8A9XDEnDJnR/ARaIX6DnZkXAq4XwyDvtxBhP8n1Tmkr7TgAR71xnI8nmj7jiIM0f1baU25cFGqkHIEJPQszas3Yd7ptI5oPKlaygd+sLiV1N0wahadCqFUkL1N4WqRGFaqkc10ldKCw0BYYz6T+GJpGrh4N2SlVktWf5rqAqqBp69a7FwsYNLd5Fe7N1ZrP9QurxsZZdHpanaTmUDf28h3CJXP8ib4rGMxAfKdAYLka9nv0yIOsxV7ohZgVobhjclaloQMG+6fo4ZwCkCcgBMbi/h3TSctzyOL6OLyVctCXzUmIfsi02Ee8pujExpEMTrNW3ifZbW8M7nQ1rfysUi/f1AS5KoK2Wo5K4rSTpzbqnBGVYPkNDV2fOqfgnfCP4U9fDN96uvv2r+2PjP93ZOyGJtIG/yLYPnCin5EEXUhFwm8+2Cx/AMQj+ETfjXPiQlZvSSVs=","layer_level":1},{"id":"23dd7f77-e190-4852-b94d-17d2b127f16b","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全框架","description":"security-framework","prompt":"为安全框架创建全面文档。详细介绍数据所有权注解DataOwnership的使用方法,包括数据范围级别DataScopeLevel的配置和数据可见性上下文DataVisibilityContext的管理。说明LoginUser用户信息模型和SecurityUtils工具类的常用方法。解释数据权限控制的实现原理,包括拦截器机制、SQL过滤和用户权限验证。提供安全配置的最佳实践和自定义权限控制的扩展指导。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataOwnership.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/security/DataScopeLevel.java,crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java,crm-base/src/main/java/com/crm/base/security/LoginUser.java,crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:41:55+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9Mk5ENMwBNs8bYHsIou70cUtyXA87LqLVk2lGpimM9VNgS+fEdJfZ/zZ1OWWkz/rPdyL0faHgubND0uwMd6GI8VGXHmrhglDB5rLmS+JkST7exqp2W8LuD/qr6jQ36sKzALpHSJ48DMdNT/kwUequgbsylXkbav4zhJl5sHD7J1zJb8CUVFGJNOB4+J7NmAmzvyvWdaIoOMkph/TR5oP5wsRVaEHNtR1QyU5t3Mn2UJ6cwW6yvt5eMGXaTROxtUr3HOm2sf8rTIUtBbL2kpgam6Zi09O6KNWEY/grPeniuqzHp8xwHABjxJ5COz7x5HwO7Tb+GcjHqqyci2h0cUty9PcGKNgN+9B+ZkTzOaset3pSIQREIxENXemdDuYbOK3AJl5ul05sjG8hPvesu/7NtKLneB6fgDhk/5TjpfFvwKSA89q8ad7Yv+wuISjNrA3NUHn6aIqBAlpsbXS/HD/ZIbRqxXgkkeK1kpP2NTz3zJlPOsbHpv8fUndiEByhrYonNryJ9LGllN4OL6d1tTEp2a9tCk/qOcizsFeHY2XHIpebmZpsz2GE+xTROtJhmfxw8os6P+5+TWLSfrlIiv/VTmQv2qcu2XqLmRkSH6paXfwvbHIU1O2irBJd7lhvomfzTN6c+/IoCkFTxpwAuGGN298tm0ixlhWCQq421ogAL8ZIiyaVu7eQkVH5onKq/5mElaDSqTi5+5NLuaGBbOcQHqKL/0B5kIdOF+J37zKnehvSwQYnfrTxhLt0z4JgnNyYdWNQ1phO4JNKPiHNUoM22TtZRgjoxNrzuRXFd86qbyetOf6dcD5H4scCBR4b0G1XxencC4QGO/0TZSIS1QtztDTZ+6W/mMOqSdmMAXYOdwGJh198BRFuOwcwsOBrHE/kPF1yUv6Sz93JQ8ZRIXPNxdxFpsfgf7qIucIH8tgKYmbX+Mzgk3MeFPhsgWdu5pU7K9mV6sm4pBV7e5lDL3aI/Ywnoe0e6XMVANtDBEMQ2XvTrSFbAGZQznYkzhEG226JatRHd3EUhJ9A+RUB7y0oSMbvScdSS9TqE6X99Nx2TTH0gM94r//GTa2zxVpSTBd5gKq4fDM37niOZ7taz9fZWRzNnCbxTd2Y1p5pkk+gB2J+D1Ol9/sCEyv+T7CKFPgxbUvgRm3UT6dVOAmov43X2XbRO4xZMMYbU2xD5wFDm0YiO08XfiL2VrZ4t/NjhvXMX777uuMGybca5+I5o8VdyAPr2NS/gjskQFDKd0RMHydchmmrj4xTYrYNfevYkjb2Qjz1YnjIhoa8U9rr7WnW0ZjaXgfSuoX/90fetw+7MIIzkTDWmS4PIaQHC4ft5JoNqc9IcgmN/i/CGjfT4j0UtmhVplAPX0/Mx09i2+mAebqcKi8GViYbvDF3Ofg6BZ7HLUD7Ir1PhvfAEn+M1Qxz3+PTMbwrpSKVfGn9whvZa2JtO9lcdKssFk5balkjBOSeqQSKL/xU1dE3S3L4p+k2QLj4HQXKXyp3wIUpscxdL3yy16go+/cvcMk0N+PD7mS6iOw==","layer_level":1},{"id":"ebece36c-dab9-47b1-9a6d-806b3c1b1afe","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"基础实体模型","description":"base-models","prompt":"创建基础实体模型的全面文档。详细描述BaseEntity、OwnedEntity等基础实体的通用字段设计、继承关系、公共属性。说明状态枚举、值对象枚举的统一设计规范。包含审计字段(创建时间、更新时间、操作人)、数据所有权控制、软删除机制。提供基础实体的扩展模式、自定义字段添加方法、通用查询条件支持。包含实体基类的设计原则、ORM映射配置、性能优化建议。为所有业务实体开发提供标准化的基础模型参考。","parent_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/domain/entity/OwnedEntity.java,crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java,crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java","gmt_create":"2026-08-01T10:23:46+08:00","gmt_modified":"2026-08-01T10:41:36+08:00","raw_data":"WikiEncrypted:EHSVcmCAsQzmydGtOOwq3eXqisSzFG5zC6RV0+TxohJWtpFR++fWGbwd7RKkm7ijzlunxn8liSNolC+6qq7/2PfW+WiSzpVtfDaLa4+1QGJxYLjOy+5YTaGScR52NSC6Rt4C8H8aLPitoBXrUwik1P3Wly4GDFWbttXgZXfup6zM9ShjP8QQxAxHRwOLlYeNAXF7k/ohyXoGey0Q8TZjtM0kCumPWAZAlROL65wpA9ZkE98v3Ndjx6T6U/+q6ly4mAlY5U2m7tFaKaA/wPj2F3RKyqB+J8GJwMZCqzKSNHgS+uHR0IiTa6LtajP4Cm/Ly3XuxT7hYNbInhNEfOL9JBoS0RHlXGvkpBXsSLBQC32Od3fLT5KrE3/yVfPqOZwO/g26P2zaGq2QIHNkGiyIArCVVzhsmG07x91HuQea57XxxTO2GXVIoAwpmc0yR/yrXqqqDL1VWnwGo7Pw9hCkHhHRen/dpzRXhXN9u1TXJzwxQrN2Kkrku/KfupyMvnf8IdaFWY9W26aTHBjKaJIpEyRElBl3ik5VRYsXCkJEp7N4Ix4j074qGf86NgFuhnd5Wps6/XuplPY583YBahI7x6BNFT4qqLsIo+y6tRzxm5vpUNJSqJ3JXMR+sefLNdNdhHLefpinEmlzunBxd6y5J6eH3CuhcX102e3gLz3ayXbZ53ByZriLQvb8X5kMoY9sYjSNCaKX8GuhXjNNnxJx7uQSQb8qTtfMo4OSgadWqEvM7TSf3LETGth5CRrOENDurFz7blWD0RQdZVKA+S6l/73Fso9CAI7/DTBZMxvfGdugBaxOpqazgDnzkZFJoJf3HfubwQ4K6UTtQam29gzU8XCMTOOr+KXp9xeSvpaQV3ckQssHJTyPBrT5SGEEvL9LevQfd9f85jyAIDGqZDv195cWUGYCq1krQcTPu34JnYhoe49hWanpPtt4OXi/J86ivGtCZhj9/G1mJPvIBBPUDY1cHxOkoCYYM8veNgofz5KD69d+IRkPKcJYVZQ0AQg6xT7APMuAXS2ZDxzjjHNJUILDkE21tt+AG9J1AkWT+CihNHBiIKGTjgYp4olA7DfHMVVwiqJ0l+gITxX67TEBSxvjDkXre5ttpEOUZJkjLx4WNPuynO6zZIcZP4zIlnoAgw403FTOHYe5VMxV3trBmaKYfWzTPWfT+ps2q/zH0p4i6FbzkykDyQJ5hqkuNncmwDN0WbI4eOUIsF9/7HjlFqAZZuSo2kWaewmMp25kzixtnk5cIUrGbAqGmoa5bfPcdmKZ4PQyDe7iEQbIDFbQTm8Gwf48FrLpMwbYA4KkYS52+2Lh0C1+qqxcHbF+K6wT2fFglGUnKbe7Nk4Czc6tiDmtiYOlFznmvFFmumh5BceoSOXdLRCgZ94WY+ZVgaL2v+7dt8zajSmY+VwmtxMr+5feZznqiHfbEoKBJGxWd7CTv1o1OHt+IgRp5xqFQRwAWOelasqwfuXPlQ6w53YVOQ==","layer_level":1},{"id":"66713b0f-71b6-4081-94be-b02b5c149d04","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"测试指南","description":"测试指南","prompt":"创建完整的测试指南文档。介绍项目的测试策略和测试框架选择,包括单元测试、集成测试、端到端测试的实施方法。详细说明如何编写高质量的测试用例,包括Mock对象的创建、测试数据的准备、断言语句的编写。介绍测试覆盖率要求、持续集成中的测试执行、性能测试和安全测试的实施。提供测试最佳实践和常见问题解决方案,确保代码质量和系统稳定性。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java,crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java,crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T12:30:44+08:00","raw_data":"WikiEncrypted:Xd2Zu8BM8p49theGlFJHkP7LNymxc1WsyjHwG1uqjX391VdN34XQRqMsMMIeEcRBnJexODjh7WY2XETLvWBC2w32dDBBriNb5LTtMndVZQqYKqcJ3P2hnUEa2tjrvWHP3GdzBYTKs9XV7yf7Ut7k9ba1321WL0sKmNZOlIjuIvfCeAsk9pYF1QIQXOSJMDp7X78Cb+xgMSxz4RJBRL/vAlndV3bstugAxsKU5DNSXQLV5RGjMSvT7I7yx0TV5cnD3Rr8Kj9Tpc8HiEI2fKjeT6KQ9fYuEiW8YtgaeM1synpT868ccy0gKRe90dRIIrmEQq36gHsQqpAfXb6dz3C1K7OogYwDUXC0R8Oaktw+Dfzz4QwP7c9W9GRNkSgg605aQGSf4Vo6e+0ukufYN0OEah25snSuZQBjxe4/oB4o/4e02jKbnX/Fgsn2RV/s31Q1Vr+syNnJHgbWGqlnz5fPmQKYtl8DhyuWk1+BXFMorgQgv+XNM4PbDBKwYS05kjIcGdMCzgDPbbC8vrKNc4gFB1X0Ymp2ngqLd99Sy5gYbSy62YfRdL/s71LzOyqoIHMmvEfaRMKO2q2LRAosBWgtIeMHz+A1Qip+vrGvwrQxO0fVbJ7auhbgUkqYfltr8JMRLTal63ZEpv8JiXp5l14OA/tDreTsopC+9z7RGWE1uk7PEC4mMOdgVjCw2GeQijynxF49ZUH1IKu2Y3ij6S+J7USHtc1WgXOQmoybPfYCbPWxQmEJ9G1BFo94XilU8hH9lgKDuiX/oFEA66kTM6eG9Wr31iOtHAZJGf3FBNPEN7Q2y/TsCsH1PEpeww/n5LQK0RBntcwi7On2YSZTiWLuh1dy/WOVlBa262Sekc8YzY/OLM0a7XNxtmS8RsT8aaE8/5IK3ODSybkdf+7wxP8QZHtB9Tku7T2vqij+mtxGOcH1iyhvSnK6jHMUyd64asqsHVfUlu13YxwYVSNQAwi57XMTYu883+pOHDnwqm9AQgADMbbfvtNlsYfHsdYDcXsvxeqO9V2nhOB7o0My9D4q1N9MPguXrOT5vMiIIiZNCSvmiwkm8lYsN79b693x8OirU4IQul++/1qE00IUG5ns6s+Hm0v+Yj3FmFVXD4ykzSMWYBGlRdIMyN4O9rfgnUywV2hZqnsNReTuFUnj8sFVtFia+zX+VqmcK6Tpi7N/Sxpzpw5OzNHGYlDbs67Xj47QvGCxNx4xImxUHU4Z0VckxQh9edr0riQZ7udEXCszOps3Or33V7lsCkLKE/PRsnzV","layer_level":1},{"id":"b9f48f07-3a5f-4992-8336-1cc0b8827e46","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件存储配置","description":"file-storage-configuration","prompt":"创建文件存储配置详细文档。详细介绍MinIO配置、文件上传下载配置、分片上传配置、定时任务配置。包含MinIO服务器连接参数、存储空间管理、文件访问权限控制、大文件处理策略。提供文件清理任务配置、存储容量监控、备份恢复方案。包含不同存储后端的配置切换方法和性能调优建议。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":3,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/config/FileProperties.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/config/SchedulingConfig.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:42:50+08:00","raw_data":"WikiEncrypted:l1O7XWjgWHyLZEgkeZtuwUOQPm4W+sd7tyOysYiIH7RwKKrD6gp4cpsydfImXSG3RIq150CyvWc88LwRE84qJSuCKuJHTJIMsByQTzFYMpf2qhs64C/7/B3lqL9/jJe6Xkh1/SR/QQPlC4YJsWvGDL22JmVyQGIZi9nBIe3mPE60cjQadHXpM4VecTja/eT7plfPLfUlE2d7Z+7YOoksJMWIsyBkPLXAasA1c488Se2P8zRXzX+SlNoifMLvaScv7gqiUNsTAh3qZN6YEJ+PDcrYuo0QSAFfn8DlQuVUvqgK0vBGMdjCGYD/e93JuxhuOmu3eOBu9kd573VmCJUFcLGHPn5IDy/ep1O/4n8HnmSBdC0snbIvLPgiyx+MVQu5QrRh4UX7BFTBS8FaY41muuOhP9qJcVjz/MX2WKacn761sn3lA6QxUStFWetp0vPtc2YWPIvelM0sYHndQPnvmmf99zSBEFYCNJFvTJcnJ8Xr4jF9w/F6PxLaoPDKVNX2jXR3ffYp7kKLacq+G71U4nMyCXS8QwzDmVjpZgcFYHdARgRxfxPKmnJED4NiosE2Zl8wu8tPSm3hWV7un6Ro6/XPJBIk1B2gnNlv1jq2KamjYdgvrtmor4c/+Tje6/TSUOLNWEBLgMMdDF9+gIK3sfqZKkkRs4f8WU40u70f+niyRfBkqYoxAusucCDmEd6nRKqixZwaudVlFhjhGrQoTVlzADXMT4jLNgqL37oISmYFFeaSMBqqGwfbZq91nl0xS+0QX7Birny5PQ/890a+W+m+Et9wnfGLxk9/VFiyeIWCNso/4HdnIjQXLB2Oy6oyHQuo8bZNdlAZqdq6XTFyfomrTe/P1G9bUce61kT2afTukRP5ABgxSJD3bGaTx5TaCFL+T6zK1PQlXbKYg5bm/2FcK+802vjjomZ2fa8Xb3f1u+WRDlktdBryGjRH/t/4YxPWNVjYSZcLbxCew+xgLmMqut3fzkeEq28m+LwAjQMOu/+u4Mg43USmDTq0+cQgTB7k5AZo9V6FMVk0xJT+p2dtyNVmPKFkdWoY1Icbs85bBS1O8bAPaqTM1u3z6GMc8Zi0iV9OY2qEop5eqI5qDz9ZMKCdX5Og0AkWNiw9kH1QKelcsZ4d0FLXmLnCeQ6SHf/1FYguS0r3HrqKc0Y77/5GH9+ztqmOms5PezM6eGau4irHVc9Q42mYZqTCfiTu","layer_level":1},{"id":"1a9ab040-6d05-4a0d-b8ec-9ac2e9d605ba","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"应用入口模块(crm-app)","description":"app-module","prompt":"为应用入口模块创建文档。介绍Spring Boot应用的启动配置、模块依赖管理、环境配置、服务注册发现等。说明多模块项目的统一启动方式、配置文件结构、环境变量管理。包含部署配置、监控集成、日志配置等运维相关内容。提供开发环境搭建和生产环境部署指南。","parent_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","order":3,"progress_status":"completed","dependent_files":"crm-app/src/main/java/com/crm/app/CrmAppApplication.java,crm-app/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:51:56+08:00","raw_data":"WikiEncrypted:hzS1sFnZ5MBIsAwtUYPTW/MJIBMmFrn20vGr8pXYx9AN7NyTMGlVQspVkiN7j4hclm5bFtNd7Q9UotOs1MAn2mpu+dvC4EjY5DtYCDXSxhWC/EfHpFYG32nuh5B8s671LcuRN5+v4YUOW6u2LGXcOUxE9iq7h8NdrS79BkYLCE3FYz2jhVoT3k1DyNKyB8FHpqaI1gSgqIhbmZk2FSLjRySHRaR8dedMXnqY1gWGOmkBbu/76bF+9B8E2IWWTXlYiFaODXcwMFJHQwezsFv08EVUuayRk4JRr6Lws1ceAe9YiDXaQSXrQZlgI79hxIqtNK2D94satOULujOJyVYk5r+HQTLMNCFmfrD/8SgVUh+lI35fnQS9GylYqdRgEo791kLT/KSEYvTV+MR0bvg2NK/M7Wz7dC+D1UVYXuYXPPG/R+UEtyxzU7g+qAZRzBskf5CzZ3XmHI0SUjVtvQnGF5CGaK2boTxXdwR91h4oixZ98e27EHIw1iiV8YoPXw5x3YdW0mO9AQ25XWRT5rDtL3dJa3nIbxCrYcZTQu9jpdsYMaLGzcsnTNq9/v33ZuqzOofSWe/Tv8lBLAoK8FapIm3+gZ1alZX2NrbqUuHzqhXf8hdGHCq9WuNFJXB2pmXde29lWtnl5umcMpegzTS8igAIg/+TR90MRJQ92JlsGCqHLTmwtIFq24JP3D7DFdgbB6ntn0tc7MZ/R7fmv7Ie1geL6IDQVfn7zUTLPjvJ9ILH4qrEvUxugzNi2HUv+HQcZ6R8jLDx9UEpyRPwdLDLKyxzzdFMWglpeKgjxmiUX1F6ZMR3hg7KUEW8xdwwbF7yW62J5tmyzZ83sWEV9Yo5VsJ7zOGBI5k4xkVgza3VZfTaA2EW/bVsM5mupgKAvHsD6CUuGZwPO1SrS2/I1u70nFDRiwFy0xdBW+WkyNQj+A9Y2TwTR+c9x8mF6Q68iL3o","layer_level":2},{"id":"af24e12b-52f1-4672-83c5-c1d5108b1c06","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全配置","description":"security-configuration","prompt":"创建CRM系统安全配置的详细文档。深入解释SecurityConfig主配置类的各项设置,包括Spring Security过滤器链配置、自定义异常处理器、密码编码器配置。详细说明PermissionConfig权限配置的作用,如接口权限白名单、忽略路径配置。涵盖CorsConfig跨域配置的安全考虑、AuthProperties认证相关属性配置。解释安全相关的Bean注册、自定义过滤器添加、URL匹配规则配置。提供完整的配置文件示例和安全最佳实践建议。","parent_id":"65c8fce4-7186-4278-af29-31083933e088","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/config/PermissionConfig.java,crm-base/src/main/java/com/crm/base/config/CorsConfig.java,crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java","gmt_create":"2026-08-01T10:24:06+08:00","gmt_modified":"2026-08-01T10:52:26+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9Mk7qQ81FDOCGCw8cHtrGiL2HFp1W0YavTGKuiloEP1flrcpgCe7c85JCVnRP1ZYxMzmSnakgzLc0cKbxQ+7NvPGnh4L66j349N3o+EThYyqCzMhyF75Qd2kDqCGX30tX3pM9cMYwNTl8Kp+5qljPeyH5xvTGnnaoPEZPrEMAPX9pm/gbrNzW12amF8e23Rj1yE2m2is7OPxn5jk/199LkGWffzWWSW833cx2aJjs7Qacte9TYlpEOESocVQs4EQdgJDXMVndpPa/5eLVsWRS4zhuld2NfJ1HVJK9Pwtjb2I8zwhvwemnGIsH4JnHJnyOpRNoA0EUAitEbk9ppLEN4WnmIgTPfQhJg82p2vhdEShlnwljiAIy62hLwztodoo+7auY8Q4VRThQH1Do6EnVAgNuQh1Pv6VoWfma1m8XzZyLTWGAtjCZMPvkoH3SWT+f/4Sv2lVVovE32UenYkePeF0QlJ3LgxDu8hjAPKyv/a6wa20bfGTRiwcRuFkFIVlJjvy87mWemcjV7ZIWRqpn510UtkL2LxXbsb7Tl/8Ke/maG+oSmWiMboDL55kyQzNFHTYRnuusMA1l4m/9JlmFkQaDDeQxaoWOBT41hTSVKPYVw9GE75zs955LuI+rxiGydnhQHmgBvhgByA/iFXJMT2jsVlF7vaigdEGS3FnHKDGaKFGDrBRFJDBduHtIbceBsAWXwNDT0IidfoGKyvrqIBY6N9DLTr2Mvb8xDYp1ahy/y5a4UJeIDyZpw+t0X4dgus5h7Wy0vdJ0ftZuQOwETe+V1V2dKvg86MBVqWLiWPp+Khw/QzjJ0j+B5tHMHEirhbyVrDUsWMmZebrCqUG0xw+YtnlygSkrV2zOLoVA1HY5kZFw/3YNgR3eRNyNuuqpbGCNQKpOOshJ8Jwt4bUFzoNIK6d2bunx6Lq4AqEtUg/SFSIUOjRegu4T9pF6hTs36Iy1Rsz85p56UjlIMWGgoTg85OAMsCufsXIejfCNhqX7aJo2Zzii33hT9FkHCsFOY0CoNkBLsicS2+SB8OqPb0PLiajPb0hzH0JP67E0RFdVXgLfBlLk0EhxKerYGJ6eoFWM8fBew2kvRTafXOR6b/QEMRJxEgPWHt3iK2rElP31plVEDvLJ5cO7LZyi93ieo6FtDh1oMPbUYc2Ykr8GIRYwaRu1DKOUVnCexzpuTsJWsXttv1iy3sFBySXGXnIggjn3BYNyw2yu66pTpnnP7dzeGpDhBYRsQ5e+PigHpZNSPRaTI/NV/PRA1EksT+pVumTFelEWz78Jz7L7ZqAd4m+EVU7G0Pd+63/soHHJ/P1iT1Ab1kLhyKYYxtfUbky8/QBLnnVbjdkA7Ld7aZvVJBqdFAtPF01L0m5li+fFp2tuI","layer_level":2},{"id":"eed6a5a9-cc7a-42b0-9f2a-94cae476f2ab","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"Knife4j API文档配置","description":"knife4j-config","prompt":"为Knife4j API文档配置模块创建详细文档。说明Swagger集成配置、文档分组管理、认证鉴权集成等核心设置。详细介绍API文档的自定义美化、多环境配置和生产环境禁用策略。解释接口权限控制、参数校验提示和错误码说明的配置方法。提供文档导出、在线调试和版本管理的实用技巧。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:52:51+08:00","raw_data":"WikiEncrypted:YZrrN2KYcncaMsBjPEPO0XM5rnLi50ra1cTA6eYoPb3jeAGy2nA7/bMIA6tsXJNON3OT2KWJU73QJMILl9qghcyMa5iik4YXcT0Tb+ZJeBob4bFoALxdHv+YAsBcOjkIS2H6VWHwk4tNZ9y7FkNUrCiLLwQXHMMOEUC6fA0pXNiLtLjBVBNn65L4vb20oQqD9Bqth0D/waU+Lue2VVdZoze3tUX6+8ynuM1B1td/E/KRNxSm2ltoW7EQmgTLaUdOECLnOfM2tOB/hz789x/RN0rMzpfyTys/x/fZ96OICXPZt1HAc3p6cc0siu4qRFUgZwB9KBFrsZwn69chJ4nVK4SKKbT2kUHCEm11Tizfk/kYcdP/SKdYb+rgSUc7GdX5WGYrQlaPdUxEe3d3aoE7DzF+yOmYpNTCBPt6YwgHRI/4Hg7Po8KZZ2LuG3zMDuQH+u4zslkju74H1rn6FflGIU33uuCLHCDs0hWs41Lv0hBCOSsOsohBbujisc0N8uJ5GL7tt7VYwJTyviVDTMg/G5eoMxKrk5uCUQhgmiWi2q/6OXe4ACO6DOn3irUcp5sqfApp3K+1qUpCZWHpl0SJJazbh4NLf89USZmW8ba32BnqPpOtLpBex9T231P15jwh9mdoJdbX93mozEynijw9T4yWZpoRefRQjkOeMUc0Z9nW1q3PFxLBMiCb6v38gCktRaqul3gALuyNiJUBgKeKHwDEbv8ZZBrBtEhdl1b5p+7JsxFy9feAqOhw8RtaTeAM4QZSbiIqV74x4Q/LwsHb0nC4ElGTcyhW56NMtraYWKU0lCPV9cAuEtlTbSEQBhjmcztB6mJhWqX7wyQsHeqjEIJFiRmhh3fqoPg5Su9FMWqxDyVJ3HDy+vGxVaFVe2DdpumN/2lFMhucJ9mM7V3lRQuiV+HcmpXQGEadWoduVUk=","layer_level":2},{"id":"aa92acd4-8a14-498a-974b-5385add01858","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全配置与过滤器","description":"security-config","prompt":"为安全配置与过滤器创建详细文档。详细介绍Spring Security配置、自定义过滤器链、数据权限拦截器实现。说明SecurityConfig中的安全策略配置、DataScopeInterceptor中的数据权限过滤、DataScopeTables中的表权限映射。包含初始化数据配置、安全异常处理、跨域配置等安全相关设置的详细说明和使用示例。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","order":3,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/WebMvcConfig.java,crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/controller/SystemController.java,crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java,crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-04T17:44:30.7534707+08:00","raw_data":"WikiEncrypted:6g8iffgXzed698CsRven+aU5VvAGKe2X2jE2K2Xo6GDnQXTxlPDQ2BHPs/i9dHxLsbJ4FOIT6P8NOPSbpkaX0tBFVWPW2vxKgaSQYKTSStFfqitkZs9hLuzbJNjRfdawR5X/cE9ePDfrLS0JkYOOR2549C67QFkpMgsuSAzeO973PSKBg3L/PUqEzaKfmVDIJ9I4cDfvJJPbLJP4dr+OlZeSJJBQDSp953pfXWE04APnkp89KxRL1uXvJBI3wooQGaMtJjGDd4Cea7iqHLlJwcKpBrmzZ+JKk34/tCGaKM+MOX2VhLtpnTM6WoHnc8OEg+9s7IbIanQBFPmZzP+BQR8uRZHNZF4uRbKQNITF3d6QGByLrHWmXjeeiM//7W+YvTgKoGftTDx+DLER6cS9+ti32wQtVPRqyRSWrbcckyvWQBYLt64QF8aNZHukx0GmaYHRMhgp+25e02gFuwkfJlfhJDz1/0OTJZRS8TbUF46Ys8cBkfFiBjfFpdrO1SA0sItGtJBcSmPEBrSV7IDikvc+2ufFm/lCSSeeyAAdJFRZlDNasKcyqg3AxqNZ+FjTfc0fVezMEMwsJWfYH79Q6sBv79p8Z7hyG9k+NrRZpg/Uxc/ZTKkkKG3TNIE5uYd2w6X/BncVIDta1yBq9L49ffgvCrfEvpzBBTBh3ebsz5irpnrjTXW47cI5Rj0mzsmsH7PeIjRrJ4+vJPzD9VjeRKXqQvWKMrpMWTl2Y34EFfB7Jm8qFk6EJeccoFnNiPGWyMlarvCILUX4WRoY0Ck0uops3m2Iszuq/M9gDHMoym14hF+3qT8SMvx0e3nuG7VWrWtWGZW9QZv17QoINEegi/4f7pOXUAbtS4tZjNgUdEtRYXjZlEmPqRYJ9XAhEmFmUDI7/xlgFs9fKY/elOMLj7CoGtQjvKkIZQrvV4IskJYAn96SsmTasxk39wxGve19PNrMjXmS8ZN12nJQhJDOWoZXXVEKNwhGBrsrq77nX0puA3Sv4oCKkVoZpy1C2mWa/fSdTFnyMjFnHw4aJaeYJAPo3i9CkSSTl7NTFWA/2hUTV2TPkhm0Wkv97/hl4T1PS5rYczamyjTPfpTLIRFvdDXF5eB3ilYP7RljAtMnasnM6waA13aPh5815kXEBvPrKjoiziQgvALeHmZKzKLXn+4RkDmGcYIpoeDXFXVNHWGHRup8zDRfttdCH8MfSt7K8jTpP2Q0FeNiqdomBgEbKK25B0h8ZKOu3PESwp/EeHJkDkya7OwpGs9HOmDcM0a7YcRbO9g2K/tfJdVNNCBzszQkIhetJTXLRyeWuyUmNuhuBe8Zb1Wg2TDZlJsaONtlkOOVgIp+Ey2rBDk7mXoM/nMbPQcObeVmLc9QoS3aSew5kO2UcZoxWpSkv64lb+oKa+UWQepAbHizBnY7uZL10i2yb51NiaYnTQ0XfoHMrQrxlT4NJbeGq2flLg0nCa0WjufprwTO7QDJM8PyzZ/Q7m4cyaZ4rAMr1mtJwWZv1WipIxzJ/Phtd295tJb2bPK7y/5fZjJWxNq7utZlUodKJhiOcEUhkYWQP0pQtevxSPKFCsgCaFdv8NlNhSO6p97aEQMIMKPgPd942g8Oa5QJZ9X3DMR/7bqE1xeCcvY5mdbbY5R17taEvfgseHo1KPkj","layer_level":3},{"id":"857accdf-edf6-49c1-a7c3-e9906579f74b","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"缓存策略","description":"caching-strategies","prompt":"创建缓存策略的综合文档。详细介绍Redis缓存的配置和使用方法,包括连接池配置、序列化策略、集群模式等。说明缓存设计模式,如Cache-Aside、Read-Through、Write-Through等模式的适用场景和实现方式。以DeptTreeCache为例,展示树形结构数据的缓存优化方案。提供缓存一致性保证策略,包括更新删除、失效时间、分布式锁等机制。包含缓存监控、性能调优和故障恢复的最佳实践。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:52:44+08:00","raw_data":"WikiEncrypted:6+tjrG+VnXc4xk7AT6U/b3wE425EZOZ8mVIjjN7h7HL5uVCMRxp4BIYoIzhyg0sNblpfalvMOJsn/9QEeh0L1Khv7hMJrRrDtgrvOF2Q47UgVsmra/bosCafsjt3Mn/XfG91SUmsxHJJYmQyElEyGVGoXW4t5Nos3GEF/xZ/HnPA53Xw3Zw/QXo1sMh8PNwPF4sG/V0qA8Jpz/xHhnpoNnq1PmuUGg7j5CouJO6L/0rBFIPzIQFDjVKDmHzBdyOShGEdfoFeC1oLaz7qXhOSfAXXb9CWiiqPFBkdBuWv8RpZqSDnp0kMcSt6jYevNwtP3/NUnlk8zB7bA0+ACsJoZxB1lNXWIWo2xczjTzrmZZT44I+8/7d/zDiY1/sy5lv6uYqabXDRUxtBTC08YnP6xCQHuvt5AIQdBOLpxKTmHqO8R5m592FFH72usqulDj4FwDR//q9yjdJ1ryTOluWKri2gBQqcrDcNra5FVoWwKmZRu/h+Yo82QlrCJS0jpJfzBmF6QgxoBo7lfYdoVTHBh0X6hqtRrWF+C6fFKYwJZw/Fzji4fYPckP/rIm0Cpcjtms3p/SN/UD7vHB2qs96FiEP4SHunJRTJ6ZeeD4k3ns2F3DB7oPy3GpBiScmZoTs7vFC/eYyvDIO+WXXTWk8H21sCjphCS6QpzgmmIWk/UCVEZgfVQPveiGTsX9vJQM1/ywJnQ7eAIERNyp4SMpPvGuSXQyd5bvA/GLXTU+8rHhc4AZ17SkSRcqvsFXt56sEDw+KNAKT+iFsNXxZeglyHOGT6WXGu8jksR6uq2Tmoefq7IK+rohexhF4y817fnBM8CfTdC7vdCtLnwOV4xgNgSNwIoEEsr51xNmtGX+3OpQ2v/iMg/mC/osbOGieIa5cMvaT4oxgMFBdPb2gQXcEvlTHSeOivLDB+E9cZRwTP/ZpKP9EnF+5cEdjp/n4dFxxk8HcTpz4uf3SwAh1V/8fLQkXAcWFVyyce37JTbBgZaQnuqxlSuqQawjZokgpxma2tnm3DvHBu9MVBJ9Sbo36rbz+nnmIgJbK0YY/OVTEilMa/8bQ4vCbBshUWunwXMtwncjwxVyibqTxSjlXUcetuK+IDFu2GFJF9hnth4j2QFsRx4lVod978PUxxIGQuiOKHmk58Xa3O73+eA9zxCXl12I8BVcw+tkGoZ2aVSRxWfjXoc3iVMFJ4F+78epBTBW1sXknG1/b0xzmCySoqQ1uhiQ==","layer_level":2},{"id":"1ef5af61-7cd7-4cfc-bc01-f2892feefd07","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据访问层","description":"data-access","prompt":"创建数据访问层的详细文档。详细介绍CrmBaseMapper接口设计、MyBatis Plus配置、SQL注入器功能。说明数据库连接池配置、分页插件、乐观锁、逻辑删除等高级特性。包含数据访问性能优化、SQL监控、调试技巧。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":3,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/mapper/CrmBaseMapper.java,crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/CrmSqlInjector.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:56:55+08:00","raw_data":"WikiEncrypted:M8uljGDGJ//mcfRJly0hh3HHKuueOyyeUdP3Xapqf+A8U5VxNxrK86BxzHmxphcM5GIXlzNgzQ9WmGdGSKvMU6Zrqdz7ZgDcxot3TbhHbpPEfPANIZH2I5HRoTfeHiKAHZp0gs6eblG67d3xBkHg6XgDqQA9EtyQfYWFzVxFMSWg6obvWhU06MSgoIxEUN9mYtmKQZxwBQ0gXt2VoLu789RdzajKkPCfAY6Ds8P3RmljGmjUFfWpTf9eoo1jQIzJeSsnKeQDuR4KbV6lWTjFsqb1Vy4JFAA1f4I6T5OWXnNDwJ6gCj6Qmn3yvzgPTEDZtoVgAD8In0zAs1ZL1b/+eQoHVEYU4zlorB0KsINAX3nr+qI5opyseqTC+3vzFconi9QxsH/4tykKvm3bP4CQC3NN6DAZHyKP/lsQWptT2jPL7J41OecqkCVCfxjcx/DtviEooXmN3MHmxWdxkUwIzx48SVbxJUHhS5JqsSqitX+W8Rq8k4RooIeJWKcLTaalWl/yh1QYC+2Ti7U78YENa5B2PeOWMY92xo7GENr6fcodSMKnMfOxWDbftetI4zeYsyc/VpdNatdKiP+xwv/4A0xLGmUYVCtRMuGLQkggnnQb7hUn7bUEVnW6zLnUGJieVwbu/K070GtLAgJ49PMWHjxFFm/ml01edF3Q9Pmvv+EHpxE+20e3X+Bq91diYKQkFgLWrHfYqE8nJcm70YAffkBzX2MvvgK3yCb8uC2kkMjrgXoBSKfECShk4HtlO1MaxDCYG5db3VXXgfFaY6pSRb9WaHxFOTpbvQyUHzJcgRFmdjstKceIFm31OuSVlBytJtUts+NS1F8VBYbDj/rKHWox8YsXry4+VZ5/plIAUOjosCZ0HFYDJuFMXcakFmQRkx+d4M4TeenfcA9bB6A3klJFt1O5K6M1w6jO/SBm6HY=","layer_level":3},{"id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"基础框架","description":"base-framework","prompt":"为基础框架模块创建全面的技术文档。详细介绍通用实体类、基础服务接口、全局异常处理、分页工具、Bean转换工具等核心组件。说明自定义注解、拦截器、AOP切面、数据可见性控制等高级特性。包含数据库配置、Redis缓存、雪花算法ID生成、MyBatis Plus扩展等基础设施的用法和配置。提供扩展点和自定义化的指导,帮助开发者基于此框架快速构建业务模块。","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:26:52+08:00","raw_data":"WikiEncrypted:JxorT1jC34SCdtkR7d1dUhEq+8G3+Is82K3f3jk66FRPfTFt54livQbYOO2qjZK/7aNtqOHYL64alrCYhbYSMDQA7UyP4kJGFDrIYPOAyq0ogXZpvfSVQGI76AHOidc3zMRcUK98CMOUr57TNfD6S4JCGaYVmBo0Wk+Kq8RRP9qrJc7c66X1Rl/o1Ii0RzN0DVqQi9ckc4rMFoQ07T8w8CSCI7E8If0NfwcHZN+eXrzV1SI+MBRTWyT/kJCthkpZWj3OffhTXabaIridsmlxZxxL1/2ZXS02sdnnntxHrwg2LnYysHb6bsT5wY5vJpA4aL3ETGk24HMVFiLVsfCUaHjuV0n7hBy9kRiVGo5vDZWgPwgkKdx449jBu2GbeHSSdVhVhVWt3zGscBjmE7x7LRLS9hg8SWwqz54CWlLej4X+5D0bMXTpEw+E7bTTiXle7vrEr07DPTAq0w2N4+kovV+V9pBHuo4+q09C245fI5/8BjTQXxhNZfGDWWbIXeDtR9KrIx/RUeq3UVI2nzbqHkjOD83YDcHvDcBqr8OgGElFH+YQtcTPnqUoSZLFOEDfi1M60p29qPLd6/DwjD0HoMzRn95pwvP+tzU+0gntigCm99eOITGIroWFczNB/v9tJQLfCQ0AnaPrSW/kiD7HJyZyH4hB2LCJSXGKzqGmLZhiJRbb9JQ21zNkAr0W8buillvr/pRTNIo5dlGZl/a4sI0UTE1pkvGJvChy7ummhQVPEH/NJdppUDpJ+OxqvybZPaoH/vNmgWZ0FJTME9Rqf/0zlt1aSlju3VLCxzcPt4BhL6z8NCjBpmfzd8Y3t8B1hcli+gKywvepvmk34uaq+BLbhBQpWJgdSLQmK67v8KI09qi8/iOnJ5CT2GL8wCkDLM6XW3+eJ6u0ST2pVQAeHR8iqDBboR8yCpcAG8FT0QlSWhCnK1n+VDriOkR9kZ+gSwJZ8fTzn8HqM8KzwDDcz5GwkQDeL6pchYNwV0qmr1bMfDdu4yd+F+tdGxGnNqWVoFt4QTqVGTmzNSjOT64NwyrNstZSh8uW714gFYXZVpOFrf7ke7oLUdc244QsFbX8YYITFKGUpT/vRLKclReoA3CB52zhiGlFkhC/zNm9HsAozbOV1DtLxv/3ZLM8+MgdLAQasonJjBtWfLCjKZt/Deo/5mY+fU8kLlx/3JPUk0Jo/Ktvs0rHnTZ6+ui/UzxmFsH9l6AknCbeqExHgpIwuVFuMZLK4h0mSrZSXaBIgNWhk7/P4CdQzgOUnfoxSPOCqtv8P73shlEP9R7wrQHYM3E7n924G5o4vu9Ni1toD5IXQlUc7FFx131rGD7jajLinSuVv17BHDdc+vOrFLi9q85mPK32PuyyfRnD1uUO7kG0K6+S2afv7R6K3lwfBMg4bGSvRAHspR//fId5dyMUYmHes1ATa24l2ykCAV94SLk="},{"id":"eb945786-ac59-425b-811c-b0227a46a7a9","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"存储架构设计","description":"storage-architecture","prompt":"创建CRM系统的存储架构设计文档。详细描述基于MinIO的对象存储服务集成、文件分片上传机制、在线预览功能实现。解释MinioConfig的配置参数、KkFileView客户端的文件预览服务、FileInfo实体的元数据管理。说明大文件上传的分片策略、断点续传实现、文件去重机制。包含存储架构图、文件生命周期管理流程。涵盖文件安全访问控制、存储空间监控、备份恢复策略。为文件服务开发者和运维人员提供存储解决方案的完整技术参考。","parent_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","order":4,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/service/KkFileViewClient.java,crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-01T10:23:24+08:00","gmt_modified":"2026-08-01T10:42:52+08:00","raw_data":"WikiEncrypted:9FtCQC0DeAGG21+hIR4h+KgPex6XUvknMAdSCL+H5hpB/yITA32zeUW39W5MZKKfTt01Y5o6QRMNYEa7cXfVTx8xiSOoL3Lol8tfZ6q1bAF748h9npWQVOilMKq9pRDa8UTfyQHe/0NtkQhUgWdnVLKUa49nQQv0DFmy+xx0ELApoW2PNHf+fbIPlQOAAekbsI0veeyaozQBOmFBvn6VbNwgFX6GiXsO0fMh8jBOoDgXYiCcdQoy7eX1Xt4nNjNNAaGcZfeRSa6Ti/ZvrO4PIij7/PwLpcDFM4Xa/OwsBwtLSXVdPm0jer662LIlsyaiMQbNQ+4IY7Oua9fFSs/XCjmtc0PbxVFbdttmVA21/VDc2uso1r3nmKWV4zNYOH/MnXPzenm6Cscz/gDh25x5/h8rDKIm0/eBCiImopw1nkLS5kK1oriCpCCd96kta5fda7sEOe+JlqSD6e8IArOanAIQygWo4MuxlJdG64S6mUHun74qfQyt34T2RZBZks+SzxWkdjNTTrvYeuxBXI/MFsOYrRrJEtzttVAHovuGPex0YKt3JaLh9CVDj4sc03z0jmoNn1NXzxUVOx6TtcUhkdI8rDfdQ75rrdxiH+3i7g1R50MIkpG2c0rNIRUnCKA6GbbL53D6Mz5m0kdJl0cRoQlKypnyeAeEGjzl8e5+wIGY+8IjQ+urlU/9sTPJLZDD1XWjTD6jXKw8HqEpUialx58JNJdr3ExNERCqMEGV5JDOXuFYHHBk6Fx9gsc6oPsCyt3oH8/TDhydb1/he1LjwQfN6US6V66+JHRS7/qTWfOnp5tKkOpyoRWW2oaKvlaa7owchQcU0m76rMfkcko+cYkGxoSr1EB+po1bhYSb5p/QhokhlDI5SCj2lhRJ0H1UVRe8EA7kuYmnMzSFz+xtjH6kXT/aYUhU03/BjCsOtXlF7PcvrneZmPViDKGmaxs83rmVDy/S+UeC1PvRQMc+hBdxL3IWK5y5iDMCUFpM0AKDaYm9hQEeX5sm6jowXK5wFb1pZFm1XSnZmR4roF0cDR9bvQ2OMcG2PK0ANcdgEEFeILS77S3avLNncDbc9nUHUFMCWRu4jzo3Cx/FkXUq+91b/X8ylMdsRkEVHaWDbU3DM62XgYxXdAZjmmDxW4wdVEy+QgN7pdVeRLtKHucXgwoLuMS3jFbipaPEGGccxuEUmLiR05i2yOGuwB2mWPvxrbULmqPs27EP3UHEwmAMUzg/eJR4Njiyf1GNaiA2W3E2LTG+KCmRSK87TgQHcVyYWtLOQk8A82L1OmkzLY0LCsCo7AN2VtPeqiuN1C2J1Ripy8V3dJI0kxi68BZ60fryyr967i4Xx9OR2BFrdhlo+cc4QrwrUNFTTJE5WRrZaCpskUGs833DaoHVewuEv4mSA3q0vAOM4XNYwBNpGlfX+Q==","layer_level":1},{"id":"bae93960-0541-44a3-aa2a-bc7310c656f9","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"部门管理","description":"department-management","prompt":"为部门管理模块创建详细的技术文档。深入介绍部门树形结构的设计与实现,详细说明部门的CRUD操作、部门树构建、层级关系管理等核心功能。阐述部门缓存机制的设计原理和性能优化策略。包含部门数据的初始化、数据同步、异常处理等特性。提供部门管理的API接口文档和实际使用案例。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":4,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/ISysDeptService.java,crm-auth/src/main/java/com/crm/auth/service/impl/SysDeptServiceImpl.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java,crm-auth/src/main/java/com/crm/auth/service/DeptTreeCache.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-01T10:42:53+08:00","raw_data":"WikiEncrypted:lLFh2V412Okc0QNIrkQ9TOgwbMp8G4swpF4b/k9v9GSnpeb067NK4e16P+8f8w4YS2vkJWy7DTBa0Et5EXhuKWENnETpRRWaGgKvg6JIMBeKT68GEBBfLmnysYa1S/tGcm78vOKJH3R6sJbMqWlbtJtRhb/LR1Gr2NmmtzwQqSnqIkrcfcKKwCmWb+vlAklXQGiLqN328Ruau1CTRzdILr9zghdb5IW/ZZZHDGtgDfIXq+0RYVDEbE9yiKLEvMBVPkqYmKWhHTQ3R6JXqvee6QRIy1OR5II5pQSvQJvWXDsw1ISNNMJFa6gOItD3uUt7bRJHvD2Lhfp/JdyzM5QLNh0t3H10kj5gKa4ONLalS24GHI8ISZBJb8+AQ5olZPb/dqBpjPhUyyt5aer0N7+69urLRtmTAGf1frFzIwx+/fGwHE+AoNGc0pDPrr7zDKk3mEd+7foP1DBDKd8JTTtmUW1sg+sF4Ocu4kaEO1hRet39QJX7lrUlcDfaKtFoZo/uFtegILyV2H4fJ5hwVvKn7CEo78ehnSmmrvlBWdPeMS4XXUaKcKA+nGAhKKH/CHT4CMgNLJZDKOPTkDAqCfiVGUlLmhAn2MS+WADNF/tQtqyNhBAdLRGQTf3iFLgAxWjyRRNJmdP03otyh4k5Wr7mngx1jlavoCSHOEijM9stvATVuo7QNybJDgORq99u5G8Wz1wYuYbQ7vFNPJ3HKshw5kHmnukwNItvG0BRaMC0DbL2kQ/jjt8HS4kL9TNw4X1JibMoG/rAnSEivtfa9ZC4wBFR1roQVpGluk1P4oaPTwgLLLj/iMb0kE4P7DmfETvUuM+R5G1I/zqHVPI8n0BVYdT362qy/S+SIwjummTJK1Cto4YgykaxSiEgDRf2CWWFv+FXXbljVz6SUuf6ddwwWzmAblnjPUOcHr96gfsj6W1Z3he5l8P0j/tk858HV9cQxO+l+4UIAhyZW2LA56lE+4H4vXMij/6FLmXXt5gJcJSRb/tWSgDN8AJY4yLnDlzKGzyI6e/2U0aw5pEvV9Zwll7pXBrpt91IviitDtmkyTiSeh6i1iyr5npS6TSERwdqtYoPb8fE/Q3z6u+8eWVE6waCS6F1TORjXIxQzlzJCcjcn32D5y++ekjhN+zT3RCJDT3iyMHQ3Uv+P7q9qDDQFzCq+8CmdFQjdGxCRcu1wNJDQvWLVY+ju0zFx6Nd0PtGMRChLUlVecEbfXm9JEXw/Q==","layer_level":1},{"id":"8650f717-ee3a-4115-8333-d4743c840781","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"核心配置","description":"configuration","prompt":"为核心配置模块创建详细文档。说明MyBatis Plus配置、Redis缓存配置、Jackson序列化配置、Knife4j API文档配置等关键设置。详细介绍雪花算法ID生成器的配置和使用。解释跨域配置、元对象填充处理器、自定义ID生成器等高级配置选项。提供各配置的参数说明、默认值和自定义扩展方法。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java,crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-base/src/main/java/com/crm/base/config/JacksonConfig.java,crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java,crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:43:54+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllB9TGvdYeEh4zcG1OGQGWJRtxgk5wPt3e962KZz9C3tgTeC6mQ9k8RGokYExY5/jBXrUaLMIMEvxw0uBbmWvziylsD4Jg/RLaDTM1YSgpDj/ZfMwE2xLgSym+NVOAqQhOuewIoSrlCtsbJaZo72B2l/E4/SxSJwHqJwN80/sAO9595toCQTg+2vZmWcLjin5IqmzsCPRBmurM4ne4ZYjzEGhBEDg7S/GZBmoTGPkpdeav1shujIKpGYdN5/gO1SVJz86rSF6PqEctCsd3pELxb9gspMLNHpYEk8wB+k0zUxEV/KVTR64OnkYfsS9zTde9da6uB+N1BcGdaSWYHCXkKSwtVwFShXSoN4bMpx8zTh0o9DeYtlHUL+gN3SI0M7mQa7j0qzCoqoHW0JDJSva6JlXR55Gu3Bdady+CItz0y5StiJzKJSZVQkeM8/v+Yvf9GkEGkR7nnL0I8KoJ0B5CJSEXIiK4m8StlbtdP4pTw2i6RxPCJVVfcX+7az2KfM5ljC6S3QAGzXLQKwgN/GmWFV4H1XY9ct6j7j9R22Umodzs4ZxIES4h19bY/wb4GJRS4nYclkCRzczRpNIGbAySG6nyjuK5vhwmDPxwEm7ALmWDT75/VRZ1wg7rBZ51dvkHwDbzFM6eCRvD9UBpy7bcipHWIKYuVBaYKV3949lv0A/0H9i8rmendIxsTP1XnlJZ85NW7hw6Jd+KwekURLRZFTZnTDqQM7VOw6LHd69CE0SRAVcVKpadBw1V+ogiFlURUzyDnopj+2dKC6r9GgKzeL17O+btDV0RU60T8EhnRovkUGLl7l56zJ72fI/mKjvO88XxANjntNbybXSfRjFZOsr0cfJzVswj2VGBZVIrDsfoNWcTI2Rfjl+K/Reb9J68p4LuPHX29FzORphrTD8AMM2bsjOBAii8Kh/mNzjvkJxDhqZBRCVLrr2D+Z5PK1XoTl1vsj1Jez7Crs1Ssp0uiim/GWaA8U4nCyFU5i/pxYGfvwCFk1fCGEYK8KM8MYe2TtGlWxCMYlqyeToA6fOvHRmkFFcOE2j3wQwJxPNH7csGEsBrqgD0/ZlgJhRSGx2IApBi0IgWhAfCPVlII90RqxtW1rDDdPbKKNABTmeAtbAmxpHa8vr5uAJXBSnkAib4wM6vaKKh0yA0huHsvcE0rNF5mw4sb3iIJmJs3dw1WCiMfSwA6d5VlF7X7lVu6uHNPMUfmAlxqA3izIIP/ryt1wRNGQpNOrlaD6Zj1QE6wR6tm955oNQ3/qycuDet25zuGEWk4HiJWrij4//9+ecO3gWxl9k4wX5CP0OdcaNKd9mwlqO94WMRZA2XEnJQwJKfQ==","layer_level":1},{"id":"a07393e1-3adc-45c2-9fab-ff9568539c8d","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"调试与故障排查","description":"debugging-troubleshooting","prompt":"创建调试与故障排查指南。介绍常用的调试技巧和工具使用方法,包括IDE调试配置、日志分析、性能分析工具的使用。说明常见问题的诊断方法和解决方案,如数据库连接问题、权限认证失败、文件上传异常等。介绍TraceId追踪机制的使用方法,便于定位跨服务调用问题。提供错误码对照表、性能瓶颈分析方法、内存泄漏检测技巧。帮助开发者快速定位和解决开发过程中遇到的各种问题。","parent_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java,crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-01T10:23:52+08:00","gmt_modified":"2026-08-01T10:44:04+08:00","raw_data":"WikiEncrypted:IGJnZREY6KPscHFIFvSUZIsXIj/pjQNlJAdMDQk/yeU/0ZgNOXxKpRa75nB17G8dRoP05rp/BfGkgQtWKJwlLmheWiYjPTELAY836g5zCI220WeqxpcKNV2o/RLktYU+Q7+4Vx/03nNfqoK13Qf/A8JlUihDhYtIg1uhprz24VCeqr69VrDimtQJ4K6F9oc03rW/TWDOK1LVWuRZER1sn28SPNOxcvpaOTtcMCE+6ec1UAasmPRFzsdH1pdaWHU9uZJj9f1mOP9rDscVONqXh6VU0Hq4oU0srvFBVqa/8HTmbpwtwqRBy8WO3jAIAwkU36LexM51HX1911oI62NlNAPIFIJHPbh0zXFXpjvIE0f8YHMFoxKMSdSUEa2G+LtjL/n0bzzSoD3hY99q97zEg+uHd2f9GfhGH+AhzIurBNjmdBTyVSeCRT5RwtZ452JwqlBtOrp7HtwIVwwZj04E4ai84J7O0TAoazaFticvbWWvtKGvp5XM3u8LPTRqTtafu1mRiq2Z/IAr+kXoQ6EMXIrZj9TG0wXTEkAUCltnwcO9RBJ+KexmKQL+pHCz2NdBzUWg1einRwI94NKVldyEkdGUKS2CRtJd6LcDqE71MksFgW48dS+uDD1V6QMmIyTTm97QHHtcXX7l/4gtsP0p/vnq20akmkvoSFI9ji3FqVS3vtk982iCxNjg8pbr2G4nAlaHBxGqbFbs2R/5fW6dbu6f2Ox4xxJZSCkIPktMYupOrjdC6aieIyDlDdRSJMJLmbcuy0Sn/7FUvmHABD2cvkgBKg1mY53P9u9aaMJiSEDuMrlmJOaizq+O4d0b43ZpMNbZFGz2MRT2iIZs71GFSaTMMgXqspxmABLC+SgYUqihFPGBEpklRWvXPTNtxmPiXvZUWSqnfdm6BW7tf+tJEzKvy7fc2w5WnjMrzEl443hCHXkpf1t2XnHkxXy0DXKyRTzOe635XgHFnH/dgi1N8ksAf9cYudk7o5cScZE2+WGPsnsSnuOqL/O/VAt/w+pxuRDLAfYMP1ewGlyYqzleVqII1YGPdN1aoC3tXRHQKwQukMZHT4xHgMqm16DZ7H9UFCW9pc+g8dHjDJUb55SWJ3AG8emzj6Xkg7jpyao8OOaVoPx/2nIIKN37xXOeH4qy98z3+5qvLcvAZp6jRdZlM5kYptpHrrjR7xVVGjQpfmakCFc3FeGS+1V+59sF7PzgNEwI22Jsa+3SbANBPbqeDADaRrZIS8HJzKHxhyHmJ+ikJ5FMmS4CArF3NhyB/hL1iHMWQqcSsuMsxuyatd2w9MchQ/SL0QHd4TcqNkbswpC4ojykb/ORvF+O7Sy5nskn","layer_level":1},{"id":"55a27b34-d92d-4f16-b9c2-00952e271280","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全配置","description":"security-configuration","prompt":"创建安全配置详细文档。详细介绍JWT认证配置、用户权限配置、跨域配置、安全过滤器链配置。包含JWT令牌生成和验证、用户登录流程、权限拦截机制、第三方登录集成。提供安全策略配置、密码加密规则、会话管理、CSRF防护。包含安全审计日志、异常处理、安全漏洞防护措施。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":4,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java,crm-auth/src/main/java/com/crm/auth/config/AuthProperties.java,crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java,crm-auth/src/main/java/com/crm/auth/security/TokenService.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:43:52+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9Mk7qQ81FDOCGCw8cHtrGiL2HFp1W0YavTGKuiloEP1flrcpgCe7c85JCVnRP1ZYxMzmSnakgzLc0cKbxQ+7NvPGnh4L66j349N3o+EThYyqCzMhyF75Qd2kDqCGX30tX3pM9cMYwNTl8Kp+5qljPeyH5xvTGnnaoPEZPrEMAPX9pm/gbrNzW12amF8e23Rj1yE2m2is7OPxn5jk/199LkGWdW00aupbwWLZoXdfNc8B76lJW904ziQbSbfT972+Hk7E/6EZN+pWZuSXcbgcs9fu9W7AIu7klfRQE0b76eA+LeXKDbN4e/lu5Dcz7Ynz2+WhsFhjorgiojVXbGm8JS/pjbxSRKLgh6YKR2tXjitwZrKRXRIC1kuwzGdj3HqoCC/y/AgLhUZm7+Nbzfbb6gmh15Y2LFMiBZ3bslWBIwdMsHAkZmPXXlu2Gf0HU9/AU694uOpo/p8J4SyFTjyew/fbubzVMiAfGBr+L6ptr2srw8kjzMfGm8XsEMkfI/7RYuVLVANjzqyUPj7CLw/wuxZKXHs2t3l39A4KkKyQQ+ip+E5Cf804QRGjGiR6shcSHvj/OWCzU4ZFfOn8OjdpY36YjVh53xq5bD6qEWBKJrn+ehB+6waA0sUo6f3EWuErRRQ25+SELUGmV7hyPOSGDpQFEexA+YDzqnAMgH8lLn8SmBh8frrXF9fDE7i1lN5ueYO2xI15CxOcmCMYgtgs0SnBNnvK/wtANWePTvEeLk9CasMb9Evb8oauSyx3H5XnOaDyP1Gugtpek9flifea/FdczuOJ7Jy5ZvabPnQ+Iw0kt7/QHNSVGQjzI7qilB1CRWkHRRmTiOUDKY5A6IodVu4YgV8B9mFRZ1TqaYpRi6MR0IhKTrBt9WlWMdqjIvhW3gZKLiVSpApeG/vkAIl6Ro4KOhIopQh+qFZlXB/5UkpZS9Xid7tiKgz1jN0yhOmv+MH93V8UDChjNQDE1GrPQn6nAbL8xLJH/EVP05zeXYu0jYu/qWZjbDUd0ms0L5EIZATJXQ+mMoKkP8EvusZ4CQbDZRywhx3Wcf/cMh9xdwNitBC4WtkLpw6BQk9i0KYooKBCay53osY1PRShf86NO08JIlEbWYkmpwI0Rz0emZmMu21EkdGuyDFm2PPCIzvkEhZAWhL88i50vGezbjIkAV510Kb8d7QDHYEgYFKWdhmGQxUENkCPnMDZmJfffeKqtPHqddewLEfr2dEgpo0cAzcdtSvbhiv0A0sEWakWgiHemL","layer_level":1},{"id":"9b094a30-1649-4ef5-a16f-1b2fc5734fdd","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"雪花算法ID配置","description":"snowflake-config","prompt":"为雪花算法ID配置模块创建详细文档。说明分布式ID生成器的配置参数、机器ID分配策略和时间戳同步机制。详细介绍SnowflakeIdWorker的实现原理,包括位分配、时钟回拨处理和并发安全保证。解释自定义ID生成器的扩展方法和与MyBatis Plus的集成方式。提供ID冲突检测、性能监控和故障恢复的最佳实践。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:53:14+08:00","raw_data":"WikiEncrypted:+MDtuQf/CrU+GPGCmJIlUAWatFugmTR1Q/9qKAnK0F9npsBq76uWSQ+z0qjFN/qbmgzx/IPAksjVEBxxk4cRucLYJJDc2AMNWW0GU6gWMFFbUm+uysku4mjXKTuDrGV1AQlC2bC1wpt/kcSmg021gKDXxo1xxbtXFEtjP3vG1kt2dhkO5xHQZIRE+0Y7faOi91JpewjmQ/s3WYn5FAY+9Fw76q0EcZbGcyvrjPxQ6uKyEZYLBPj+KY6SL+MSx0uHcGjyP3vjzv/ttnMHp/G+DLCmWkCpOcPKBFzdTL8/mE0f7FaC4WPzNspkJ+lAHIuugxqhW4u50g4v55Rqcnu9JkhUlQDE4js5EdMgRDaIQf7TKlZ1uH4zof/UGairWE/8YYX5fCSdCl3qSkEzF1ByJODpdZcFpZBfpt03wK1t1naE1dDvCla/p//np43VsASp+h4kAM+LQeXhcrCvhU8MxsYyENCOGOdEb0Q6gPqiKmfRHY7WLFDBXvJnlFNR1P169n9X8Vrm/MmOV+qpbfLeCkM9jTINkNDKj6DzfrFr+L6GLyppdO8gVU23rcjLZMlPSDiPM33VwExe/3stcsbYiB9LNAQqHwLvn5kfzC8soOOwcV+20gpM0gYfkUhA7Kh/0/CkL5tLjmC/g2/v7H8o7dd2ckIINXhNCBhGeiUnYaXSO5dZ8uXt1f6WudyGc3+gc5G7XWWkMAG1LoB3HCl/hHUhVaTBVfFrNpp+XyJhw2yA8swxypp6g28nVdtBoXjYbaPgZDP+jhSXhr4InWh0n1B2tp/gMOajHECcca5uRv8OV+qsuL/dxcU99RwKZOs37ZAoIy+BCXC021y0UMsGuteQJY4rvv+2J3fpVjOW/8xBpJHEAYLfOKCim4M2Blz0iwlVu6D+bI9Hz6ew7WAKcaGuaYprvx9qO1MqHDxBcQWIDcreh6+Tr9zNbISJXEP4jzMHRcXLCWTYEbJB8CqPT6k95xXrkx9SpOGMpF9p4X4X5st+mjH1LWblXq4O1f1Jcvw357ykauJkUhxsDUAaVYSCvMBq9hBD8aeMEsuy9529EN7PD47nR94lYnzOZ+tz4RIB9UxRB8u4SXpQ+GujXi7lChSJn0oIdqhjXKREb8TpOkRSWsSjqJiXAoKn3LuwhREXjgqA+/soPFQ1O8a6zs6VgO4PrLjSntN/xnbdrk8=","layer_level":2},{"id":"80790bc7-c82c-4060-9f65-95c81558f979","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"领域模型与实体","description":"领域模型与实体","prompt":"为领域模型与实体创建详细文档。详细介绍认证相关的核心实体设计,包括AuthUser用户实体、AuthIdentity身份标识、SysDept部门实体、SysUserRole用户角色关联等。说明实体关系映射、枚举类型定义、数据验证规则。包含数据库表结构设计、字段含义说明、业务约束条件的详细解释和使用示例。","parent_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","order":4,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysDept.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysUserRole.java,crm-auth/src/main/java/com/crm/auth/domain/enums/IdentityTypeEnum.java","gmt_create":"2026-08-01T10:24:19+08:00","gmt_modified":"2026-08-01T12:29:28+08:00","raw_data":"WikiEncrypted:9fTixMuSRA59yaGkTVjDLwXmxZ5pLjJHkd87f0z/mqaHvrOGu/mKvZR64NS6uTe882/nC251szyK6cLg+iIfVM59fHrlqTarRweQkeCVqm3YKveJnfFNfJvDFkYLmsVPCpaZgpYBjhpl0kMBSgx21SefOtNjHsCDUuIxTw45cX4fNEb60dgo08957Lfqrx5ZIhTyY+dqbsQ7y+8LVu469ZNzf1ySzRhKTamGEKb0dGf9puyUk/PKQX6bhn5hKUl/uPVl7pJ9Q43N4fk9D0HY+Rye90SSQcOQc8voWSODwNTqWcEwUKQMLDmLPVorsnuXH4Qidvvw+pyQZ2Y8FixfFQtwkdy6zyoZ3xBYoPSXFMq3Rwro0O5n/AzlMHGuP7ZWt4C5Z2hfMZRk7Ne39sm41/C7SW3eB0qxNBmRQg2mtfXYhBpO0iceuzno/SeKdo4YQupDGvglly3UUhnDms/vuUWBsqofSQGB+eBw5zdRIZZddsTYJgrgQAkQrCuS7zdJH5mD/WH21b2YlqDnz9095LelelkO7+IH+egeeTmzeUAR5LWpxGtTaRF06wHva/2/urmOXxJgJ7hBm7p0FBP9kgUneKO0PbDVZvKp8n3uc9Anc5w/rITgsyi9dvOO1ADbTfDD4HG322jkwj5N8rs6iDagdjuDc2n4s5JuGu0/q2fuQKXbOipM7LzJk6U+We4vcZ4LEcCDKNVaz/qUSKOFpJSDTcZF0ahsmas0jHvhKpp5H4gg+O5CYztYuDtlgnEF6xMp0iSpXGyIx9o08PmLvORBi3vdm6BhzutoeU/GWmNhBgbd4vLlIg/+qYJcp2kReisVJ7x8gEBYQBYNCTKAhHNCU4uXTR8MbqbScoSPfY7fn6uZ/Z8HJruyMHBOahAuEXVX7JHamKtaU+Nv5t1KwuOUNkQSWFdOlVIR8HmdIPYzGWF3VlO4LP4gge8au9Mf0nkgNBhEQp+AqSKHiccZRu3+03ViVs9QKF3cZ83ES/HI8KgA3Gf3TGhNFgCi3FNVv1StPY3LRbHXOj0uYWlGt0sSLmRm9h49ng10BZzMy7EsRIO31zPc6yYNL9B6qLErGQ2+AtRtv2f6BVOMk2PaC/5zGLwmkgssO/Gqy4Gl+1mqYPRYO4+G3tnWNeSSugy97VYyuKkUcLovoII7w0aOh38ZX3zrrMKJQgoAtAcXw7T1DfZabvVnS1IUUdBI+GX/xEsfoSsAlrHjsq5BhOt/OABacBss27KgZIwjX4/Qt9j19na+BQgmGgM+6PX0HYaAzXsHcjByO06159fuk4LVSRLbxFvYNcNR0lCHkFIZqMUgSywlofsPOuZuLopYLJ9fqFzvQwtacPwJWueNjVxK8w==","layer_level":3},{"id":"081c1898-c9eb-41e0-93ab-411a05ead961","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"定时任务","description":"scheduled-tasks","prompt":"创建定时任务的开发指南。详细介绍Spring Schedule的使用方法,包括@Scheduled注解、Cron表达式、任务调度器等核心概念。以OrphanChunkCleanupTask为例,展示文件清理任务的实现模式,包括任务执行、异常处理、日志记录等最佳实践。说明分布式环境下的任务调度方案,包括任务分片、负载均衡、故障转移等机制。提供任务监控和运维指南,包括执行状态查看、性能分析、问题排查等方法。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":4,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java,crm-base/src/main/java/com/crm/base/config/ScheduledTaskProperties.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:53:29+08:00","raw_data":"WikiEncrypted:Ixm4kI/Z7v0V3JxitGlz9bFyqW2cr1LVt5A7ucLAmvwkvuWQQzphG84jLlm910MQnUT7BYeP1ROlSBRDJ+UdL9g7qxbiIEEV6YW6fcLhsHEgiLsZHPkF/r449s3+mp9Y9Pzf0ZLgk2BtJcM8jT2F8LFjHum7Rkk1uTNIseNh5oLSj+Sdlns0zvTLHlU2FL8dvYLT1k8NsFfGoQjnFrr06eUnUOZmVEtp/UHb8YNnv9x47vASVIOEfrjHxt9iAHJHzSFXUftlxhi2J2tmtRgE0RQQqk24vQJy9YRWQSLkHHnFxv1mGIrRzmpo5m3k6ysuCrxhc16hRXJhT8D0/C3dVBTp/Dx6PxvmO9qrsSR0dczWCxjZHea9bj/Lf1EyE+mlWGOlKrQ7LyIMqrmCK3JHKyHu3YpXNDVOb347/sgB/9zb34eWx3nDxCQP/97VovRyEkpVZYU/89soVk6EsjLpmrDWIfhJXp7gTf8QCo8IF1bvNLDzQSOmioqvERA6NWbeKA6ZU6oiZo0lUbeIIBmlbMHxWwM9dGePnVFhkUXiiY/5j61Fz2UtRv4Hyk3YZXMFLbcfDnpnbTU1CKNXBzrV2xbsBcwXWO/IFqLcJmpNBGHzbJYGVnDd1vybASQVdcIrIl/wPTZzCxSWzl3xuMJbrKIWGwLDfndtusQ9aRvldw/KNeahM0D8M4eSQTMt28Wviw+a8mo0W6bfjJGe0h9ytT/oPYaFiSBI6eyzE3/z2xDSfRGm2O4gBDkK+0twQEqIfaGcfonXWTlDklg2WU45gR/GN96KvtAiEbo9xhxCfXi23b1cnIlGWM6FlSy89qfFpHOvZiqSaUl8Ehb05JO0A8Ga2l1X/JlYoDX7oBjLsamHQXvj9ACc60Qi2dx1NadJ6hZ/1B4kANx5zLvsVea8t1pLXiDDeexugwQhSwnzxhkn7KMF5XX/nh/5sMfRXf6J/Nr4GXj0v09RaMKiUPhKjdhBsN05jS3rW50Bi1UNgwQ3xfjNtqG2JJqzlHy3vf3v5P1M8CZclc6VmvUcthBPUlLw5+dya2u+8K11KOFK5F5+29uMUENNbnVgAvyTZOiNL6aV+03z4plxCqsONMmYCJrvshZsYBwsfD3KiupZdf9kXv6cH3trzLsUOhKa4lbg9r+SDT0aLJejjLeHZbfW5jVtdMzpXq3wcNt53gK4dTSLNtfW4S0d4eLTl5HmqEyc7LFr8jflZKaE7jxKjDgvRA==","layer_level":2},{"id":"dac0c399-2b11-42d0-af10-3e537fbfd80f","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"安全与权限控制","description":"security-permission","prompt":"创建安全与权限控制的详细文档。详细介绍数据权限注解@DataScope、数据范围助手DataScopeHelper、可见性上下文DataVisibilityContext的设计和使用。说明登录用户信息LoginUser、安全工具类SecurityUtils的功能。包含权限验证流程、数据隔离机制、安全最佳实践。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":4,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/security/DataScope.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java,crm-base/src/main/java/com/crm/base/security/DataVisibilityContext.java,crm-base/src/main/java/com/crm/base/security/LoginUser.java,crm-base/src/main/java/com/crm/base/security/SecurityUtils.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:57:37+08:00","raw_data":"WikiEncrypted:JNhY5K+GVMrcGagKRy9MkwBI59Ej+3gMDt2j1xeU/NCPBzDWzQeUrspM29zhKrqBqKH3sflVg9BLi+WB1IQIYW0pLoGJmCXO3+ICBxJrJ2AzQ6/Dxi4Cjvg1IukCLfrrWrjkWYr+eAQ/tQu6aQzR6T6uUxN97u6Oh81xwYS0pfQK1a+LJzbfxGLQvFB/JttDFFUYdLGSBxURQGp4w5y39QY0kND6RK2PzySdAz3vShFipcusxGska4rP9gG4n/NPizRIGc3KuTZqrwXo+/6jsi9XW9pkKixxxSIjsKwLDOlGwVtP4EdGcpyfgs+9E24GJLFOdPS6S/87itw4/KgoFm/dKsw9lzFrqIdl5MFFV9ObJH+zyH+6dxo98vVlgSdU6IqD0bfWamsrC8dXWAfyKhnwvXF0eFXAQMVdYVD52S28ATNsmow+gqXYfeoO4l9Wv923fnkfaj7CavrXOGf/U5lpTYKa//39HZMw324fhXM8hoh79qd/OQ1kdX0Esq4FlSVFG70M8B1ZvPo0ca/LjaqeHyV7+JnmJ/5GyJAWm/IqifreGC1QdGn2/WuLr6U0fhQnci2jTSW88X8wTaGE3bzT7jS8DnpWWpmiZXQ4hzInUIvuc54gPSnstH7hopMKKOSMXF6NNhO+MorxiyS6HG1V06X0PLK4C4UhY4k1ZugRY9tHaBIWyqMhhT1VyVXfj0cBmQpbuPjHLNgHey6Aep3th6V9PtSSG9UVCe5RRFyCeHdUs9n0ShYAFlzF/E7XOxF6+aulmKNLAo11UGQhBfVt3MbgnexeayhBWr5qz4xUvGFqxwqTikOgVvMJikkTwg6LO8u2dkLOzQ+OH2fx2QGp7iqFN2dp2fJfmLx7vELR5Kb5Cf7EkcKvY1uRHdiF3xyjFPgwKlQKxH0C518juXsgdkXXVZ+sUdwGulkmCMQEyCY8Fgxi4QHd27IwDrZKT0GxjLylZSgzTfU3KklWEXO+e2QSSbP6lAqfPtpzqoK1B/avhi2Wx45CAGu8XkiXylOqGA7ZYSfJPvyuZCTAbdEKZrqJMzLUJC51YFFhvrq0BeDOjzT4oJNiZswe3kzGAe52P+o9XvbzQiuf8kfzo/PASbhcUzJ0IP5T5uZII7ZEjpwueJxk94FK/JQ1nMzcb3nXbTaMfzYuIVyl0iXto83JtJma1bUN504G36J/Yi2fSKTxt24ykT6UgemSY9Xq8p+nC5Ocy7IrIZNOAAgoCg==","layer_level":3},{"id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"文件服务","description":"file-service","prompt":"为文件服务创建详细的技术文档。全面介绍文件上传下载、分片上传、断点续传、文件预览、批量操作等功能。详细说明MinIO对象存储集成、文件元数据管理、异步任务处理、清理任务调度等核心技术。包含文件API接口规范、错误处理机制、性能优化策略。提供完整的配置指南、客户端集成示例和最佳实践建议。解释文件生命周期管理和存储空间优化方案。","order":5,"progress_status":"completed","dependent_files":"crm-file/src/main/java/com/crm/file/controller/FileController.java,crm-file/src/main/java/com/crm/file/service/IFileInfoService.java,crm-file/src/main/java/com/crm/file/config/MinioConfig.java,crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-06T08:45:06.6686703+08:00","raw_data":"WikiEncrypted:YY0OWFh8RMOtWS0p5fnjpOQItwWPtN0S+TR4Keyef46CZ2hfUJupzDbEdFdzUDNvdvK9T5XshFkGz/95nz+CVOZVsmlth6x5tMRq+2QKegK3VSwjnOl08RqnbYGdTRpF/emi81VDkpTsXP6M7ioxDnBVyr/Sj3O64WMSaVaPcp7dvhBkzhjSeL87CgvGU5b6ZXvDU9DPrU81NybvhufBSdrUPeogAuFJjFqLRu4rtZhmm9RImj5eeLLMPaIuPNZjGN18X/UiOaqeC2OQzyZIjcTyTMWdlqJBm9opgx79m+5ySWMmg6wrPzSc0dTV/qTlxdj2K43YQTY4cK+7t2jin7A6sUvaQQZ+tH1+OiP7PYgxG1znm+dmUZ3lT+C66oYTqLuZ4h5qcM2qm4MYG7JBdibxjnzEJe0STi4Z6A0GJnKW0Ay98jtJ180yehpl+1i/s0oYn+yR320xw1xojREQDxo4OVpLzhPL5FH8mFOLfWo07hNcLTE3Pp4sgvIQbOF+Eka2pWXUhyvozXEDODf+xdFA0jJwLPuyA2P3h8C4n+fjdFXHz//690N2/ZP8vMeZs5C7DTGHFAZsUJDobgjc5/36hRK6Jg9Voex+lt3/3mI2lqc05E0FMNn39DbI9EfJn5zByE6ZjSa+fxDWIRuBmiEAzKRsOvQwwRsXG6viF/siJztmBFQMKbjDepo4sxtO+398WAG8lVv30L4b23dawe9NFNhz9Ce9VBXevHv+YsVdrvkDeeS9MoImmnrajc4y/tPzB3uJPZV1BZ3UpNwywUFmUhMccZkWRKcc/tZctzKVF4XMQLRhAa87AsnLHC5amBWiveUOUvExSVsv9wQQkgL/ChB4bO1jzsbtCIwxRqhFh8/EuG9C9R9OMy9rnSzBmHIHBWZIgd9Wj2Un/cyHB0eU4kyAnAZ7Pg7I+4RZ7WVI+8hUmldApeOmMJWYf1Ojddhulr5tcbXDK172/URYNBq+XqpvQjVTwJ1eQvv6cJd4bmBgy+a9gkqApAUV3cfAesAHgrEP4aSjzwrxxAOxHHoKHg8xM76W5uaueRbLSxjV5KQNs2JnmleER0eLDv63d8fLKzFtlTKazoi9HPULbguw3hO9s5MBa0mqZ9DEAl3cJAA7Y8m5bNWlLV89SJ9JhZj+OAZcFjC8968HlDqcir0mBzKiArUO2yguYj9JFRNx57j8anik6IpIhVK6wZTDvwCcOTn6SVVGHCRWgPoWUkiCjVDMUxcABnmbqQ1XrXAibcPz+uyEDdeXoSOt6bK7OmsyoMdUo1ZMVuOOICJtcYOE7xV0xg380dkbUOVdpcYhiZQSOOr8QUCY4melH92UvI0kvSsP8UQt8KKhIkgstsixNOSk3hMcQDjCL3kcJD2ucpKbv8MFSHE2jYndAfPZZBhkXhneaEJIPfqUCdfBxQ=="},{"id":"55f54320-f631-4d95-96d8-e7b9f17024ad","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据权限控制","description":"data-scope","prompt":"为数据权限控制模块创建详细的技术文档。全面介绍数据权限的设计理念,详细说明@DataScope注解的使用方法、数据范围级别的定义、SQL自动注入机制等核心功能。阐述数据权限拦截器的工作原理、表名映射规则、权限计算逻辑。包含自定义数据权限规则的实现方法和性能优化建议。提供完整的数据权限配置示例和调试技巧。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":5,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/security/DataScopeInterceptor.java,crm-auth/src/main/java/com/crm/auth/security/DataScopeTables.java,crm-base/src/main/java/com/crm/base/annotation/DataScope.java,crm-base/src/main/java/com/crm/base/security/DataScopeHelper.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-01T10:45:02+08:00","raw_data":"WikiEncrypted:yP6vl3GzzNMVOI7+ToNUFVJjo06Xm/aTFjbW0TM80KJ+D9r8XALOXJTPQ1TlWlLnd85arTMDczZkTayhK8ZAskIMy5rgB0bLSKIqNCWW1hTKmpez+IW/fLbI1YpIqsoFsi1GUMjN+gCfj5+B4DpJz7PmkyDR+UAatHymr3qRPWcuJLBLI+Ls6KNsv1d7oG69Cuy3ftQ37xu7CWhcnUO6ZGzTBgS0MmOB6wt/9L4RXb+8BFUnBszCa9ScibqLcrpj1GiUeljePBa1YThQK9V1J7VJ+lyRatqsMFFu08CIagaHW7jrTnd7enAy8j5sd1BQ8oe9SziDzJ31p5tkfFPPf230bzKyJYL4ArjMNgDGVivIvJJafU+nZEKWhnnkogblHQa84JLhe4O/vMiaiQlbo7AGZGZUN4SqflOEaGBAHd6es+GkUle59zcVyayNUmcpIalFYhCJ8NqLnWDp8ivcUrYM/1qNDHkeQVpchVwh2jV6pLn4giPBwPxUAmQc+OB5wX2RU9t2sZKpQId3QO/vNohI4KxSbi5dQLX4uQqsdCDVLXksZw1dRbyH2JmQgfW9krtBZBEY/LKdvZkNYXaW/FBwlDRMyRjv60hW2EwJFPw6jwAwS0Jbb8aplmFRJ87FnBW0PlOu0KsviI2JsonjuEITtZmVN3sYPT7zI+wIllkaO7jbPiT6v6Z3ocpbmpt5w2gS5+fKgAX2k8p3yxEk/hDkhSL9W0tmj6j9mkNB3CiJkFx06+d09Q/CUJeGzS/JdukYY6aa3W0gJvfsVifNoJNFW6VzY+U6wg7Mq/UPUGJhGdKMM3AAbeI8W6kAccvUrtjNr98KzrBGt+om1AqUG+cduLrp9N+0bfOHHR1cFjOvqTgYG/Xon2GdqmlniKPaZdcNYO28tz3fRw5nMX1az405TK15/3pCw2+NkituCGv/IrzZT7AgucYgA0MJHp7ujawd+9JJhffaCbqFxVNhJxVTKt/Y8Of/EpzJKU7YjfAYJiohDsvD+eKl/zESfTZzSXeCP513YLXQymUETea56yrxRkRF8UKcGcY2W5oDXoQcTIMZwfTpqFLCJjdT1xHiz6Mrote9vkrqvqJEIrKJ/RhpqUnHZnLH/tq63kG2/2R+t6YEoiOjvBlXaMw3beXYxKRHBMcl7ZWPiEWErPMFAz4ksTHupJRb8lnT51Lii4I9x60u+lq+gH9lY2URywLVcckwCwnoUSw6GBaHp2NppMaM2VCD5d0a9OWHtITw+CxUk6/W4Iu2ajwXNMSkHwH9io1z0aqTSLUNI4gYs6XlsvVa1mavY7u5CH5IVngEFzRQi8xR5332OIRz3IqrbRlm","layer_level":1},{"id":"c599c1ec-9ed0-4ff2-ab5e-0d5a0461ae11","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"工具类库","description":"utils-tools","prompt":"为工具类库创建全面文档。详细介绍PageConverter分页转换工具、BeanCopyUtils对象拷贝工具、EnumUtils枚举工具、ExcelUtil Excel文件处理工具等常用工具类。说明TreeUtils树形结构处理、AssertUtils断言工具、ServletUtils Servlet工具等的功能和使用方法。提供各工具类的API参考、使用示例和性能优化建议。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/utils/PageConverter.java,crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java,crm-base/src/main/java/com/crm/base/utils/EnumUtils.java,crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java,crm-base/src/main/java/com/crm/base/utils/TreeUtils.java,crm-base/src/main/java/com/crm/base/utils/AssertUtils.java,crm-base/src/main/java/com/crm/base/utils/ServletUtils.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:44:52+08:00","raw_data":"WikiEncrypted:xMGPTkeCxttYfKYvvBbBOQfnyF1TdBFJd2iZiksLsdkpqAKWf0QguRDQ0vJGAISAfebMm9j2B+kSr1VfHowO7vxt+ODSAvtZ6Ry7e+5MIAkS6ZCftj/EMtYDuR2evN9jbDJcV1vUbuWZQNf79XTEuELUtbkceHso042+O+jAeTlIxMA4AjlJftgpqW99eowad3JhYuk3iALeBxAmuDasVF2KwyineOTHYPq+k6/0IXfngZi4VpBAh73dMr50OcezSkwzd2Z+RfLJJ7V5RovZEUUhkR3UoFBM0CsoeT2NbOMl/fnhVcp9oGCdVBwNJkwnDsElnLDcnR9aMIiWJj3Olu+qHtjcCsHshe4vWWWfhiXis4bD6bmNR4JgG1N1iKkxtU9Xp3Ca8WYPQ8BzHtkOJ0EG1dsWRBSb1ydCd64Wf6sb3WPXBVPNJuz0fUrAHZ8sQ01USVRSicCHmtqAvDm4bosZHS98FX3sPI3/PEeqFIfHz+gLu4GOMxc32ueo6nduO0eGSvqxtDhbbL3YU4rgNA6nZPgtuZVNBRZsEnBrx3q5KY4VfDDm75Tz3zKIgYcvxcC0yGK57fJT8yuo0FWWCJW8Rb5G9Vc+5pMNhnO77Nlw197a9a0crXdsi7df6y+cBnuUe1mkwUzu4gCP0NWiTKgnIe9FbHpqWP+HsNe0+S5YdjYd8xe4N/aX3/FViqNL8hR8VXVkpKgvU7qlranAmyb7OpsiirG2Qtj/NY3QCmojo7ZhjpbtAWlhE3FJTLxy4CF7tSo4THRhwj/m3Pq5ME1h5cNuUgIgcN5omRnRl1APw+x7YQMf6wYIT6Ga0ODg/slKeT9LF6vU5LXU3q4sMiRXdmjiloJm7BlVgsEXqgXjEUuhk+Pe23uCkJ7wve4VbCA/duuyXZiQgXWYT1xSbYrRnqcXpfin+Q5MU+Rj4htQlvs3mawZI4lGsZky98uM1TVkd0j9GrMHVMFeh4BoKyjt75Z5wxmgEuaOZdjOqc4zLJVSlsNtOrqW7rDDR2qrQdwPhue6tye+a6DY0/wiEnV121/6gfzJxxQGV1P5BTyeyFLZxl719jXHvcDU8HAfTMhukWQ1dwpZNq6dnTy+vRS6HHwZVwLs25GLiagsniRvusbrBpxh8/xfljCLx3d1r8K95M3K5GdYZz7VpCMYv60rbfsigzfqABGOsAznlteL9RkxOxtirVjCzVVm8/hdBmwRIAcp6gpvvxv1xIXe7KIPMzAG/+bJbXKEmSyjGFnFkXR233LywVpMpa5QypK8t7HDB58K9Sn625T00bx/lDh2tS/k3gVWhPMaI21IdT6bprYEAiyBy5wJ0fT3KX2FbwBtCpSVDN36dU045Lw93ArBnBQgeVOc9NZR23PSq0hm2yz7X7T2nWWHYT/SwD/J/SyPWGDZx98pGrqoL7aJnBHUldETzQcycPv8iTZiSFk=","layer_level":1},{"id":"33f9a0d7-aea6-4324-ad3e-39d4ce558625","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"雪花算法配置","description":"snowflake-configuration","prompt":"创建雪花算法配置详细文档。详细介绍分布式ID生成器的配置和使用,包括机器ID配置、数据中心ID配置、序列号配置、时钟回拨处理。包含自定义ID生成器实现、ID生成策略选择、ID格式规范。提供高可用配置、性能优化、故障恢复方案。包含ID冲突检测和处理机制。","parent_id":"b7f614a8-4610-40ff-8572-1f023c369200","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-base/src/main/java/com/crm/base/config/CustomIdGenerator.java","gmt_create":"2026-08-01T10:23:56+08:00","gmt_modified":"2026-08-01T10:45:02+08:00","raw_data":"WikiEncrypted:+MDtuQf/CrU+GPGCmJIlUESC35GEIbHn67UjAE1THeTaUnXxJ6FYWxUA4AG09efqXkhP3cVN1GqEfw8w1Zss8p27k5E2RkNeI8kkJocxTAm5T8X7odwZ6dn2HGcgwOIH4rjB1IPeebMjDXakysJfJ/Meicww3qdkF5ul4XAQ0oUengPG9oudGIiJgnrYnomg4cLLzd+g/bigkM2Cf/AdZYnScZNRyXCEZMwWNE35DURMO8SIMSJUPHE3aQujyUQy2DenBy7cIluRKXSxztFeuO6iXaG4I/JTP5yHSuGxPwQzAQtpeQkxrcor8jvmnVs14wwI24wwOS09HKlbZj6Ybc1iKa4qCUJDZBXjSfWKVVtRM/2YWIE7ea3qi3BEsR3awvP9hujdmrsI5kjyoT9Rcw7XM/w5SSEfv7XEmJusbxH5ZfjgmbWJiRWosrF38VumtAEdVImjBtCaB7YOiYQWfkEOK5A6qwFesb1hX/C98kb7om9v7k2wvbm3kA55Gahb6HnD1O80QeLryNAYEj4l4BW+h1jUYGYzWmvYynaJMdqaghkJOg21mN5fxggyUFzZUC0RTctcPBWUMoS2hNaM8Bs1nZ3LWRl7YQA8wgPw83FEYdvW7czxcLQRkCz/RDNY1JolOFHaaWfqZ8MQv7MA1kEHSRNjzdDOXUGsuLhBrJlTnleTJG0UOVluDZkphJ0uW+W8OeOdv05fS8BqZh9H8eUTb4etyY7n7PbRQjEVgyjWMoYBPu9edCJ0k8mYySw3G637pDv1OrytVz7SwU/IZQ1UFx32ux6sEcDM2Brj52hbW4FauArgp11CKVCPrikfeO2BpGnc22Q40TagMIV1RaBWihIOcDxIHccCQcOxyZBxh38NaS5LIAnUB/6lNWLh39ZiZ4p1ofMOyis9sYDwKTLoW3kjH87kdao9MLrLZjgbFQxII7ho4XLRGDMCk8YfcttOVVOY1MCKyd4mUVNGmSpWyrGwOh98uHTkpMtQxtWAPhco8GxuEm3l2GAX5YT1IXuDmQ+521x/yauCZ5A+T/TDpr/ms/oVsnzJKLEFfxlp6tVsi6g6fOw8PYyv/xTf","layer_level":1},{"id":"3343ea4e-b085-4bc9-b7be-62003913a5fe","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"跨域配置","description":"cors-config","prompt":"为跨域配置模块创建详细文档。说明CORS策略配置、允许的域名和方法集合、凭证处理等核心设置。详细介绍动态跨域配置、条件性跨域启用和安全最佳实践。解释预检请求处理、响应头定制和性能优化技巧。提供开发环境和生产环境的差异化配置方案和常见问题排查方法。","parent_id":"8650f717-ee3a-4115-8333-d4743c840781","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/CorsConfig.java","gmt_create":"2026-08-01T10:24:08+08:00","gmt_modified":"2026-08-01T10:53:35+08:00","raw_data":"WikiEncrypted:4VOItIqKRX1STtVxuD5VPZWrRiX2WBsf9WnN4j7+lO3KVtWP9pAct6+Hn6eH+6oE6k/sWcYQ9yPPuEAMfNMlaA//OGKD8E6VGIjcrcFPBd3VXoCwiIiMwmghcu0Svvu97FzOLd8/iz39b0l2FdW7WAOiqK4A8msDUcczmXtAx/g/k7K/gPCGjwYSGPyOYgd8dUneUDSCLFWkx1CMctFBTCOITk8sMFHPaV3g1eWcxdZ7ISwzHAL/KQV6XyPRVq5Q5XTU5kHTVmsJaqZ/xiyFWa2fwIUqe6nNdB/baKppTxlJ1rDa4ObE+O9FOqPk+wkvRgTPUD1Mdtg8a2rySVe1o6Z759O2qQNY3rur8x74O+QioK7hkKpjG+9BjQhAW9jYpWqJvvr9xNvQ2DJrmB5TlxrQjMqV7XTbOyyLN32qY1Fn+gNnL46ACMQs2fm5NhDhqBwlgLW1iJQW4VyVXYkt0H4gMxl9HkFidevB1cXpHJYZYnnsDXEwrerldR8hWkpcnhb6W3rz/yznmbLC6YS+dn1LGYDj7a3q/384DNeaTD0SHKaPABsZixQhiq/SWZ9tCQxbw2NA3MC6+066WFBHejc1IL3nkmK8rgBz5kv7VE7On7pw9mLSt5vyFcynvH+HAvveFBxaAUCYDEq8NWVvVuDBKvgxmJtLkMIr3zdTKk+TiJJ7S5UxVJENTgVKjlm2NNleqdBPTEL8eEj+UN/kkSOBkT5/WEqujRRysHTVfAZ4kw4qE00ct8Zgw96uLyLDFN90IzaCG0WsohWKuIGVfxy3W22BOy/aWsAiB64OkcPOMfIC9KC06Hn0uUVOd7wzE+ZYub6c87QvIUD0vQDsokYBJ9t/k/8ei82YKkmH3B8hVHqMKk9FCstqIJVzQLBW","layer_level":2},{"id":"245dcfcb-140a-499f-a377-5d6e6b1ba003","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"性能优化","description":"performance-optimization","prompt":"创建性能优化的综合指南。详细介绍应用层面的优化策略,包括数据库查询优化、内存管理、线程池配置等。说明HTTP层面的优化技术,包括响应压缩、缓存策略、连接池配置等。以PageConverter为例,展示分页查询的性能优化方法。提供JVM调优建议,包括堆内存配置、GC策略、监控指标等。包含性能测试工具的使用方法和性能瓶颈定位技巧。","parent_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/CorsConfig.java,crm-base/src/main/java/com/crm/base/config/JacksonConfig.java,crm-base/src/main/java/com/crm/base/utils/PageConverter.java","gmt_create":"2026-08-01T10:24:20+08:00","gmt_modified":"2026-08-01T10:54:07+08:00","raw_data":"WikiEncrypted:9uOBpMbLX4DyZqW4us3Wm3Q7klXxmeD+JMMoGiSO2oNryWBo1gw9kLkawvxQIW9CASZSiyAjiA/zeT5DwD4S8MWCvsWhjZOFxN3sfhf3ZPmmaEtvRuT1+/0U4XurSrWkAqX+/o/dPiV0SlMszxbF45VqOojnRNagFyTVX1QEpErDHjK6d4mPViP3CiRzhfFnRA3tXUzWAjsZBr0+CzN/k7C/oqvIgc6kWeccf3HiUYr68TMmZ3d7ksuA86f3kP5BlrKMpxsi+TWUzb45r2cw2J6VFHCyRfxrVSGBefd+vdKXbN0McBZe/7KrbBnjHLZ8CrYAU5ufcIMY3yCD6b+M+S1k9kSgu4WfLhQ+3Yxs5LpwrWKuYmuLE7WPHHYee71Mxli3mmOWCAS7nYMHltVlChJOoDjtScdS6peFIIopMkAieXxrHUN+1Uwzz9DsDe5Qd1ZQrd16B6sfS6/3QtcX7mxgAqpaa88QkduZKUshDtWgKRWSe6onTOCmKrGJi99Ptx2FhcPtdRPRvM592v2yd9xXJTB9pM3HOv6tkjSgi3YfiOLZzvKQl/MwLsJm3T+bH1LOCjuf9YPWzp0a2J+60d5waeE4OthwSL02I3iQkP3YDFBATB8t/sMBY7zt/WnAt6O5hFNlrw3MiR/n5cWC3RyqLOxcYpSGhC/fPDbC/suJ5sJXZsAX03uSf1nWtk88SitlseTyEQ1NkaiVyD7g+xQgkI2WKbjN1SAp1+MlJ+7SnI2LFZK55owK/97koZUvjQhiLLOk6gkVOUElB5i+WgKUHuX4iuV8C1LvLRvPhVnQ4AwDfberPSatk1rrQXCBtlTXMbd5iwhWXsldLMD8SYNSG4sMMZYCWnh5xt+if/HoTp8b3d3zvmJw9zEXf/Ng2GqaM9FgQtiIG8v8V6LDcvOVOUobt6YSfDfthJ2JgOOZpjKS4MX+EgTjlUKVHjP9rMO1Cf75CyO3FTK54+lzWh7iBap4a+fv9cMIoG3taPgRoxDdUSA2q88sFNTSol7cW/IXZMWaOBWPNHjg3nzWy5FMrAS2OcB6OKq9XHHZnUg4r3ds4ds/RJBct36BMwx4hb4qHnA9Uq9QLTbaC5we9YHub3xlkKNY5jqzFZlmNdVPRnp5WOG3PQ0DU1ui6Y5uqM+xyqC9WApqrckjWRYnkUGcbT1R40iVSNn3VTwdH/krmfDA9SgOmLSB4xtZT8L1XFJX4oGVdq9yvh0JlSxQ+kxm2VG4DHATafXD1jdPIIg=","layer_level":2},{"id":"293dd98f-e9a9-431a-a01c-8630354c01ae","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"框架配置","description":"configuration","prompt":"创建框架配置的详细文档。详细介绍Jackson序列化配置、Redis缓存配置、雪花ID生成器SnowflakeIdWorker、元对象填充处理器MetaObjectFillHandler的配置和使用。说明各配置项的作用、默认值、自定义方式。包含配置优化建议和故障排查指南。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":5,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/config/JacksonConfig.java,crm-base/src/main/java/com/crm/base/config/RedisConfig.java,crm-base/src/main/java/com/crm/base/config/SnowflakeIdWorker.java,crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java,crm-base/src/main/java/com/crm/base/config/MetaObjectFillHandler.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:57:54+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllB9TGvdYeEh4zcG1OGQGWJQxUKpAVjQcne4MtA+PKI8uZuGbHVvF7w8BB2jl/OBwHwKhczc/MJpPZdmTND1ox+fP7MxlhMDbjYZZy8/sdEQfVPthxuJgJnObUYc1upxOWEnwdAvI+gjZk516FZkpWDVm2FvcaIonw1AgDgpac2j4vboEH6ei6zwQdiuES40m99ZE+uatqzcI9DJWZ3OsGEq8zhu8Gb8+wBZE49mqIPGI0gmPjKyxa+HlVjMiLDd54ZWG5ZV59WSfbpDh8mmAgBaP3tuJ/J62bp4FrFhODpUBa4ocVA1WaDxZRBuRYTypb3UQTjCDmfIqalQaijnyCNCSINtBC9nY5j4tr6SwdUlVXRu+0jUiS23pgXg5G+PQLAqGr+IAVs0zSeld+sdwmkccAgdmNzdzQ6loO45M5j++HF2oN4LVjZ/Z9gNOuq3ZWK+zeD1tr2UFJm9G4Lt2zCT/h/UdbZ2+c1EgYmfR0ipK6a0osTgDW44Knnbm68yMqRj4ajCD1mcc60HwHHpUpQnvrlmOCCZICGRKSgkZ8KT77ZhH6tU+qkRRQDWK2PQmPqPPD8OaK+lCDHzHTjhrS/eo026Rb1ig8PKmd5b3EDxeaUwDLdpMuitfUnr3m81TU0z/jzxwUsKm+DKhX6ZPRD0jwM/VNpYgqyOM7K0t1FOHJJ/BpVcU5FOzbaRuH4OSmovf5G8Qp/Qxpdegz1Gl74XlvU0Q8dehInFQ1UXu2PJ02T4NSg1t2DBfv8yyRCUyG5V3EYyH5HOyNRI3nZ0e51LXYuL1GP/yd92n1e8RMoTyF3+pNvjuqD7X7K8Bfg4BIK0J+01W0vWvGz+EGKFKx+Ux+4A2VsaQfgYfGtUFRntTgWOCpQJfnwz59+kf5ZAZzokGHYaIZZ7EPC11+AXGeUWzvuiLR6bcT2LL6JqbkuXf6TwMtcRDWbVzOFt+XlSY8CkZurIvdq5f7KxCtx2dGHr3VQfPo8attqxxnMyE124KMAfk1ImjYW1bid1I+97P9EIEw0bXV6KWb0Pe6Xm2nBvzBiDixNmjVLQ+JaYFLAjKxsGLUKj+/umktfLYYHMfJOBkkuy687lEPIBWeiZuJ1nh+TOxWYEK6EIBfQxHRr2FetpdxmLrLUhP8g1TohcuCQ==","layer_level":3},{"id":"6e92351d-04cb-46df-89a9-1e2f43b46552","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"API参考文档","description":"api-reference","prompt":"创建完整的API参考文档。详细记录所有RESTful API接口的HTTP方法、URL路径、请求参数、响应格式、状态码和错误信息。包含认证接口的鉴权方式、文件上传接口的多部分表单格式、系统管理接口的权限要求。提供完整的请求响应示例、参数验证规则、业务约束条件。按功能模块组织API文档,包含接口测试用例和常见问题解答。确保前端开发者能够快速集成和理解所有接口规范。","order":6,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/controller/SystemController.java,crm-file/src/main/java/com/crm/file/controller/FileController.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-06T19:44:39.2818347+08:00","raw_data":"WikiEncrypted:KXqw35sX/PlafDN8zSekegOMViE/Sh6fZ6j16St2hIuirztq7D7b/JcZ3RdULPDz8rl8u3LzUeOHCCK2Ry0NSlzo5DmTAITZFPc8opvimcGcPdTb1GpvIV+cDcb87MirT2zg0TPnQk5HSkEEgYIY8eNH9/AMBhQuo+H7Mi08xLsSUbBoxcAGnsZjynzUAGBixzdefTDMPa26jGtLLRv4Dhgx+NUVEDK6ez1sa0UXYsqR1x7Ard/7BOu1oYmDkYREtCFwDDCSCT1g0nnn8/1WhhfhdWAcexRSSgtTm7m0GADjUrRvX2/Hww7jGfaKvaBtb47qoAMp8v0hVoDSh3UOKlxmjdAQOwfPSMRH79MX2WZgywy+zU/DHN2Cc5rpbAHkjC4dCIvo6gETi4CHWgKo88KxxXwwlW4VW5mHTb/aFD3JTkJkuksxv94uenQfv41BGuk6g5mlgSCLg5aDMF00k6kFrl6zxISdgCE1KKiKINbbJ+tvI7qDF3C/ADcRdonILMqmWC8pNiZgajIwdamy5rn5R3YOmOmnGfl7UQr/hCkKBJYEnzukF3wXVxuW1PQzmMb1rlZKABTOkEjmcTKOmb9DZfLzT5bFOKvQmJTku8nUtAjE/H2c+PDxWl/7rA56fEKhpSq8mhUJxqcDoVYCvLseU+yAh+f+/zE+W76XSyD7ii6mKvihyKcz1Gd0LhP2CDdah2GgV5mLlWBFRLzAkiKAtdxutDRi9yAjxsQmYWIZt5FC+27SZmEJafYQC5AI32+84XwfPgGQRRsS8Svnmv1wn10SIAtS7LqnGa9eWew2psOfYalmgcKkYZ8tzKHZslY+QChbYJf/ZLKjo9MnjfoRdnfIrv6ScznoUqQgjDuEPby5qw5ggN6QLYEn3WIzbK/EJyoSKKPmSyz9edhfH2mM9isr52xxOKreVMBtzV7gLYGAM9Y7i0ge84OKSjxRS+sTmjxcdGccWeQyaZ6hjO+zn8H9IJhd4Xi5tykAI/Zg+pIIiIUAGAuSKHZFwxRFU0Rfx/qrJPkTfzUOANt6qkHbGQz+zmutTc/zotRBabr+DOUz3cNgu+oamGe9O4vfylwb6HgyBWELEglizg/BOohaPtv2Dp69kmKAZ1hsErNpBxfO27ydS64h4k2atQGJca9Rw7oKQM29O0m1xmt6jHTb+i7wQ4dFR7qAVcdNa7p/YDg7XK7sep1L1KvJkwU5aWynlkOykZJOcgd9vvF909Okhjn3/fyrmeCZC374b5pC6iJy1Z8KQhLDuYvzC9QPCrV+ljHRrtrknBsLkOgY8sEfP8u7liWK3r+37LD+XmXyza7Zkzk9xPzDTSbe+W+EiX4honGB7K1doYWW/WYe5pj18pLI1NbGn9XvywC6a44="},{"id":"9c1038a1-5ae8-45a4-9c08-2004a4595503","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"第三方登录集成","description":"third-party-auth","prompt":"为第三方登录集成模块创建详细的技术文档。深入介绍第三方登录的架构设计,详细说明OAuth2.0协议实现、客户端工厂模式、钉钉登录集成等核心功能。阐述用户身份绑定机制、跨平台用户映射、会话同步策略。包含第三方登录的配置方法、错误处理、安全考虑。提供扩展新第三方平台的开发指南和最佳实践。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":6,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyAuthClientFactory.java,crm-auth/src/main/java/com/crm/auth/service/client/DingTalkAuthClient.java,crm-auth/src/main/java/com/crm/auth/service/client/ThirdPartyUserInfo.java,crm-auth/src/main/java/com/crm/auth/domain/entity/AuthIdentity.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-03T19:26:44+08:00","raw_data":"WikiEncrypted:TNVQwQ2JITC++477rMKpIYsFZiNzaeHbR4XKRlu9bDqA0R0zXfIcIYfpXXtG9hrlEtg0OfKAWNYmVbZXRbjTRFmRxuMbmpB/AJxVRYLkY/D9stQO4KD/zK2j95aDnQNLnsOpw07J4B5iPtj05vLibfe6k6OUeucgx8k7dKwia5RvBiIOBJY4GAq0oWOfjjYhqA+ldgeHgCGehWxAZxvrmA2PC2Bdw5MT8+I2m+onbaPRmpVZ4J6djinf292KJVB9llwbknyKoG5rxHRoae9Ef3eJpMpYHVUQ/W7zzj8iJLM0myvqHL6qjSkVGbE7Zl3tLEnScBlq2p2OgfhWzV67jMmfcBEnkDZDaSdDB0+dDEzYNfdIx+E0ErkLgJzobx0tZB11W9VCg0K/2fE1H/Pvt31pTMbsxvkBXTRS2KAGAA/Vft4xIlIoJKyAF7t3KR8kNZiGlleMxjUw/w0hZrzPox5ANxg1Ih2N1b0/5QdXw3mQYZlbepTx6ljm/sHsNFc5e+oL+XxXWMhUpK7/eu6pxYaLs4gPUBvhP/zMoh2KWcR+azMblFIe7FbkXjshPJqp+C0J/tEV4dolT/dfFzv0K18RIyv2XOM7ZBV9L7vNFtCSJa8LtXOi9nneOKUGDzzEP4Ikg5Pg4X88pkSWz9k4/CGbQ1seRcEGelBmDPZbUnC1AVezftlc78pBQz1UFBr6DLB+f0c5hDiZqHbZ78joVIiIKZXslisGMSDdyTaofcTXcBMbJO3zoK8kqnEEWiNtoCpjBFeLCildJxs6sugI6P38lD1Ldl4A0pwmnS3cEUnKQVK07zemV9/CyEVlNVk1Lzk1Bj56TjyGDADSGV1nqk4Tmc0PURsho3LF0+sRHI8csdc1iu6lSUrKiBn0z00zSKIGoFBxNzia8CVyIMCKwt7tPdH+SMS0vdSCZ1kqGf7NQuCYGgDuU3RqWvKWITXlaLhWcShK9AKZ1eQJEjPmd9aIevmdTDtTHPLQVeybaFbQoOMt7TPes+pc8kAxhpfUaphKKgPGVwgMHqJUqeRbmDxL6v/5rKYwvrHg5GTd9/guySqM7iwBRhVYf1bKSsY9ijferucYiQERV5e+brwMKgxnw7V2sc9cquxazQ6/zogGxbkJQk3yFOnFj6am82E4xr2ouAiunSuWVOff57yNbowKVntdxhcFwzvMcs0M8oTfLj9xgcf0jMXEldJNHU8F9RwXYzOr2XGArVKm5XUMeFMR9kUirLT0VuJYd2eDN8Cy5AC57UJMsRNQ+Gnj57tzyRtf2NA4Z0dL58vVtmke0nyl7Dch1XfFW/R/8A7uDfa8/jZsMairggSpcfaeani//66g/C3C4zPSfEPyUplG2Q==","layer_level":1},{"id":"fd993603-f6ad-4a29-be89-80399ccc2352","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"通用常量与枚举","description":"common-constants","prompt":"为通用常量和枚举创建详细文档。说明CommonConstants中的系统常量定义,包括HTTP状态码、请求头、数据库常量等。详细介绍HasValueEnum和StatusEnum等通用枚举的使用方法和扩展方式。解释ResultCodeEnum中定义的响应码规范和错误码体系。提供常量使用的最佳实践和自定义枚举的创建指导。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":6,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/constant/CommonConstants.java,crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java,crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java,crm-base/src/main/java/com/crm/base/domain/result/ResultCodeEnum.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-01T10:45:59+08:00","raw_data":"WikiEncrypted:xN69xsyfHUnwfU68aQhW4QQXyrvPvU/0YTBz6MOQ4G247s+ZXzrvvrYJmbAFqIz7P7rjuwZG3PaXho3P1cAk81EpA00euQoEZPtprdeHf9ipZy+R+9jGSWh332RwkQOC9xsVbvmVlZLpEcaCtXXKMBRsSM0ZWaZXP5grLxrroBGZCzpnO5dmIW4ZDzpn/XoYDFVffu2dwzRU8DJHIHdL1XfGdNpa695ysm44jAxrMCChnZhZzageFEZtfZihjPD0N7pBofxl8u+84vyk26Zg0+i3GMz2C/lQCiXdpFSs3x5d2kPTmodFqCti86v8RVvuOuaDDKYkhWtUBK2K8qFbqnRmmwvx4OHPLc6LcyC9Yoi83xplba9xvNmd0l60ipG8zJO9cVKnsXseX4S7ZAxwOWqNgPrb0REej9Q455ibGOnx89lcLg8jEzKBGgF8OFtC5w0ck8SYKwwwt7LacoZrpSt/FbnmTRnaAPbbVqH41u361xoix4pXgg4wk5kGsRpALUz3X4uXdUM71uMjh/pCZ3yP9WGcVH4kR/PNl4q4RsKzfkClOmQPnlhImnAIll5feFLtSCzIj/lThJ1OTb1HAC7LOrNALNz8NPvqleziAjEev9yjxX9+9d2v+Fg7szrOy69wOmqIFaEPNliZXI172adY2jmuZlD8qPPc39eV1v355fvHqg1Kio5hRpQS+ywO4a8B9ZkZwbna0rV9niwRPnN4Se/Qto+B2G/9z6AA/RylhUdClNVc8pGmFavJJtSlul3ZhijbDj0qQGl0DfKe/czsZBDORlMETv8W6N3fQGIYCUzh7ILQdSZO9L9k7//I1WIcpX0tZRitwz/rXQDDAMQvkrw3uXqnxofxM6Ab9xG3ym21JdNlUqAWHImEcW1ERbT8YUrKwaq3lXctLBlMjogo7xVHDnofulOgjIjFmqVPMNTSV3TMV2lge4lAJKcA9eK5MFRgG1FarfYY5SietZdK0ya3ra4oYTEuoko5fizE+GaeN6AHpUG86O+FOCtzViFuWXejYuhz5bd9uiWyDfrXb6OfWqfY9iRQ2piEEetq44VWCFhCvjvok1z7BMgZBhI0RaCxPQ924Rntou4vxrJOJWPod8rLC3haQcmXhgCHkiW9oLvfct9Li07+e7ZoW4fqjdYYHsGpDVdthk75LDioybE3rJmAu9Q/8qklcmE=","layer_level":1},{"id":"043bdfe3-f703-4d1b-928d-5f5665cadefc","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"工具类库","description":"utilities","prompt":"创建工具类库的详细文档。详细介绍PageConverter分页转换器、BeanCopyUtils对象拷贝、EnumUtils枚举工具、ExcelUtil Excel处理、TreeUtils树结构处理、AssertUtils断言工具等常用工具类的使用方法。包含每个工具类的API说明、使用示例、性能考虑。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":6,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/utils/PageConverter.java,crm-base/src/main/java/com/crm/base/utils/BeanCopyUtils.java,crm-base/src/main/java/com/crm/base/utils/EnumUtils.java,crm-base/src/main/java/com/crm/base/utils/ExcelUtil.java,crm-base/src/main/java/com/crm/base/utils/TreeUtils.java,crm-base/src/main/java/com/crm/base/utils/AssertUtils.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:58:25+08:00","raw_data":"WikiEncrypted:SvMc2PRoWqDcMfdzcPf97N9k/X3CAmdrcNtJiMgJv834CzQEkJYyXrO/i1eDfnSnlf7FCmatxpEM7YYSNAEB8X06Y2JFWDl50mrOFli+0s7biUaabgrp4e7bknyExu/f8c0oi93f+Y5g40W6CChHMXq2dxM4NoC5oaTMvMWutWwixsbIfuf7rpuUkKWINcEkP/7zNVVsMCAYeZRyQ4oiGIjkACeyu16xMCfU0zCmghsYT78cOD1HzZWiOnWcLiWliN02KvK7cdIhGrxEnj8CHxhPerPLXlzqsdJqae1I/trTv8k1JO56qJRNy0IuOiO0FA47PDZDnFwJezpUwGrmA5BB8g4/JKklk/1VOkkTnNbso1JDsAzXwVm1TshtNeRO8O1vldWdV3tltEkB4gBPYwHotex1ShitSrsBE7OCNxg4TsLRB/RvTZn573t/LKyASmw2Uj6fYB06ZW88Ntvq8Uj0RteWC+CgwmHMOVTCJCWffcfDadLT0ptfLytLp6JjQGYm5hUPwfwwYJUvnYfsbKc0e489iy+vQgaUpPpuf73Ud6LeI4I1pf0hcNFfY2G4y5qMn/S8p+TWdUN60qeRf5kZIf73WBSiVIk9Tev1ztiUe+J7+bi2Bx+WmbSGfWYHWH7j6/m/kBznKPnnjGI1+ZschegVHf1smfM8T7FC1ECj45qXBiIOucXAUW5uODbI3oY2vowhoNZpFcn59psQoWRlwDtUeyVsxprm0KjN5BrcYilcM86QhOuEJX09is9pBs/cfLci7JIKGNJGKCDhVM3eknLSx4216P68QtqhKDM4AZkED1t+8nHunpa1sdrGuuzdemNEtKzMVsorbuiwJ2gl+RWO4qqW9xuvauPdUUGH2h7u/ujkHbajOA3gXYiNORw6i8BujbsVTZ16tuMdJGILQb33S1632GMQrjyT1Kb8Gupj/u/J2szEIaJAlmlF2hY+W9ReGUnCDf24e0ibrbZWAHwJGkKVZQfrxyc2ormDjOeABtzaX2iS/E6Jgh9OQLd9OYg0W/YBJDZ85qu0VWw2PhfuMrTCQOsGsAFagUJIqLLgr1F/CYW2bNF1gMjGNSvttZvzIVb1yTxvqEipKe9QHU04rSqLvvSpP+8xIhKVeeAnv5kWNAikPiChcTqUVX4nwlF+n7gZr9HKnxwtgbq4e8aoV2CjlRh/DkigFzL//UYR1/eJ+ZEOGLw5N5SE","layer_level":3},{"id":"656bb585-a75e-4cc9-9935-1539b3c1a524","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"数据模型","description":"data-model","prompt":"创建全面的数据模型文档。详细描述所有实体类的字段定义、数据类型、约束条件和业务含义。包含用户、角色、菜单、部门、文件等核心实体的关系图和ER图。说明主键策略、外键关联、索引设计、数据完整性约束。提供数据字典、枚举值定义、默认值设置。包含数据迁移策略、版本兼容性、备份恢复方案。为数据库管理员和后端开发者提供完整的数据结构设计参考。","order":7,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/entity/AuthUser.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysRole.java,crm-auth/src/main/java/com/crm/auth/domain/entity/SysMenu.java,crm-file/src/main/java/com/crm/file/domain/entity/FileInfo.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-06T19:45:07.7671857+08:00","raw_data":"WikiEncrypted:Zb5TNaG1u/mRrgPr+sDyCr47uD+4y/GruMCqF9C9nxStxKZi2OWvk4ViC2NJmWUO/Jxugi7iel+AeINiHAz9cy3+U++ZP4sS/3UJ8ssvnVLZQWdpVUmN69o5t2AeDgxHIGDQDKYMBaOIKxWl4bzuneKi0TXUCwVehJAzyTvhZC8LdEYeannMeeMxyDoLt4GxNhZfGSd02sMYiceuTUksKgf6kEsI3sZ79Vp8uYwk0Uu87hkpBxlzzxdnaur8dnc3nfsyzSAQRdx9X3Tt2WlWZs+bMmaBr0jvYLmJ8xaayKi1bqb9+8wNAziEZwHkIUH5guRw5bsHB8qm/djLASlziLnknIeGWERgwfJDlALEvcJ9bvVsVigLR3outRmiYIVohtcpgcZ4eLzgKAdY/9K5kjJ+7pWGYAzTbMeiAndI1DqeQ0fgWP6PIPm0j0dmpKuzzLZkgQFulsjwT6iNoDO3Wi8BwbwYXEfVMgdMWUeHE1dp0ZTZdOxSXeAQOzwa8Kdxxg3qBfR4Kpbo3WkKv4ZYsGRE+z0XpQuwKO7312OR2Eg7o0DRP+iiUW3Dt3X8tC3o0hjvCHcmmpJEoiG+eDMaHP2Y94RWabD3xfKWR1o8rIxusXxYmLEAdbt+GIn/W4fe0OTsday2bwVYLYiOJDd/sPr1kenqYy59ak0zNKv51R7+OhoLRZViVcn3r3c42pyOOCHRq439EZ4RKiJLqhzgMjtKeaKGXdDgQ08mrEDeu00OKoNtXDoNRGs+16EO/4BatZqhV9kynRngMsyA9IC19Frux44QzEUlYhQhEVRHTkoVq3e9jLOkIN5R7gK2DXk8iDihYIBX8UT2kLbywKe9NubfeGOnRUNEkLSmqeS6FVIaWguy0kGVBXneZLKns7snbFyl7NwMF0tjMf1QnZbgkDKShLKgNf/xwzeMR/GxRdcG+gTLmRdckFyjDoxg4ihgJkaM2dryDhqmIC9/iqQOZ5y/u8/22qCnnotS6Y8aM/rScRyDQcL7Wan6ozPOMb+LwOGHTE0bpXnMV3DNZY5pi4Fo99O+QBB4y6BJEmVZBqryo19ulCFbuQf8PKQWZPN6Laigf+Y8kps4bgJYI0OZ/AK+8rt4WUILeYZieO4zLw+Rxd2ta89f0F3tFf2/lwb760GzTeXvqzNlQ4oIFn1n1vDYpUS19508D1NKEJkYlXXWhH2+cRsSUTochnegERlr/ekZBmrYcg7Qqqis+cdvZr+hWjavrCmz1ONpGTHFHgePtLJjOws3KUTpVGd+Pi3YbCyOS0dB794paeg/8RPtv5DJqjdXcC/8wVBlFfKA6HXNk7+pIUFJ54aCIYpag5R7/ME2CdOktwLt3DGzVdqUJiSi8lIsgHktErcdPycIcDAFjQCC7ZMvXmxs/7IcFFr/uVJlCNnIOQKJz+PNf9KQuggI3CSbC4Ct1c/GC1U36Ns="},{"id":"2e45bcd4-f474-4d34-9e28-98d74da5d24a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"认证API接口","description":"认证API接口","prompt":"为认证API接口创建详细的API文档。全面介绍所有认证相关的RESTful API接口,包括用户登录、登出、令牌刷新、用户信息查询等端点。详细说明每个接口的HTTP方法、URL路径、请求参数、响应格式、错误码。包含完整的请求响应示例、鉴权方式、调用频率限制。提供API调用的最佳实践和常见问题解决方案。","parent_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","order":7,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/controller/AuthController.java,crm-auth/src/main/java/com/crm/auth/controller/SystemController.java,crm-auth/src/main/java/com/crm/auth/domain/dto/LoginResultDTO.java,crm-auth/src/main/java/com/crm/auth/domain/param/LoginParam.java","gmt_create":"2026-08-01T10:23:32+08:00","gmt_modified":"2026-08-01T12:28:52+08:00","raw_data":"WikiEncrypted:1O68LCvyq1zgacF3KZk5YU57bnnRylQ+AqeY9X6/raLJYq57d/8iyLp3ZCX53ZchDFoCCtFKGz+DmEdPWQG8Bg/NQ0FEmWDA3o1JSnAeYprHTApDEFLhYn0vPE/a0R1oQkQ2zCSMCJUk6JPWi3Ff/OFFClo3o1EMwMKhKkfT+6XPFJ7TeLKQ2KKCLLgGE4vQHuQGWh1e/rkYMOELz8HuvCH/NV/VjPP7FeP1Y78NNRNMLW/f+XLHcbtSll8HoXb2RH38XPQaSzcPT2J8Z2ajeAG0pR1PfjcxaWXGHxGx7Kw6dAWqdwANqydIJrAEhqviz8M08fSdggwG7AZBMw2HKvfwBl5wS406W2a7/mzS7aZsdT00/Kpn5G33Fq/lHPdoA+KrjMUvbopouGns+SZi2R+MW7VpHR6ine5MKF9/TSy2+BTyjOP8X2CzGDn2DZ6QcuaBNC50pdXLy5gYpnjv5r4zY5W4A+xFWyWlwBWD2IAhQjTNOU3u/PLtCVAlP3Z4yu7CgI3PRymSw984b7FLbS3FwUz4Dq6uXU4O96B4yVp8JIxAMLfd+RuMJy/KhBPemeSNSR7Z9fci6T8xozwzEoanc0ISwHrlPI5GtE0zhsmXwGgrpDLSc8ubvWcFiiE76aWyipL15ArETnqukk1v3DyjCP2bTdrGrmYUCq2uv8biUofj5HJau2F1XXDyHKc9FmuybIa2sHlsnNKk1DgROrl+l65ZAsM9vji4LiKyhjw6/davM+BcrxtGSS1Lu7NzsynoOncSjQ5DHRBlnN5QQOLV/JMJXzmIxl+g3fpif2HSgP2FricdfjaDpGj+8QZhB94lZcaOMlCid33EMrqi2HAtiKP+vLUdwJazzO6+Y1obSQjiRujJZED9/8Wo9Ge9/PwNF6KVywnF6oPXgLYeACwthY3YCGcJFEiLs2FRzaUbaT5VQZc1k4SCAfcU6CVri9Gx+PZgnY6BewKjzoOrSOwov7+Q4Sddj8SPsBfrPVIt8axLjs6pElw+mcGl77DefHZlLx7WON+SOhNBN9IAbrfWF0wle8/mVIdIHxgMGnYHnTmZm1iF/po1b9ONmAW8V6sDO661/7jdZDu6TsPzeEjnSYfqhhUVS4JIaMfNmE8w5HZfydXgy48l0uGCaSXuxeSrST9o0ckx+2Uayz8r3DqllQ1QCMELm5wejX8ub80oi7r42AUTes8Y3n1Q/mgXUabME8tnGlu2+9dpB/kdkpyERdQeVnt7C8hn33HhTqLyKOIRlJGNgUPDi8yZZym3","layer_level":1},{"id":"0e2ada19-25e1-4d39-8cde-a5d9ea0ab4c8","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"领域模型","description":"domain-models","prompt":"为领域模型创建全面文档。详细说明BaseDTO数据传输对象、BaseParam参数对象的基类设计和继承关系。介绍Result统一响应结果封装和PageResult分页结果封装的结构和使用方法。解释DTO和Param的设计原则、字段验证规则和转换策略。提供领域模型的扩展指导和自定义数据对象的创建规范。","parent_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","order":7,"progress_status":"completed","dependent_files":"crm-auth/src/main/java/com/crm/auth/domain/enums/MenuType.java,crm-base/src/main/java/com/crm/base/domain/dto/BaseDTO.java,crm-base/src/main/java/com/crm/base/domain/param/BaseParam.java,crm-base/src/main/java/com/crm/base/domain/result/Result.java,crm-base/src/main/java/com/crm/base/domain/result/PageResult.java","gmt_create":"2026-08-01T10:23:41+08:00","gmt_modified":"2026-08-04T17:45:24.5985513+08:00","raw_data":"WikiEncrypted:9fTixMuSRA59yaGkTVjDL5sEpI90fm9hiuBLZeHNGEvlxds7GbSeEHtRLvuOWApbjFLfUR4GebcDu7msjKRqzWyMyGLnGGvOzTl+SNmgny/soMp4kJYjaAMHQQi2yF8IX8dWFHD4pe6Ikx6XfPt8ifrRaSCS7My/s6fb5jzo4RcVsx2Lapt66YPM7/O0pXRFFX6cVv2yoJIi5vlN1Jg0ajs5i93lxiJiA8ydTwzAbHrFZ9lkei8GKcPAhCxuVMwTuRKVQNZZW2GAp6dGpfB2cu7c63iNHWMaAnETWrXcjl+FRKvNwlHJkyDhB9jpqUuuKF7aVbIJFQ7+j3z7QC86w48JFXsjLEI3TAFlzUkpdaVU478x9vvmFG+546RJ5aDspj6zfN8NuKFfmnMqJl87Brza6wp8PDIGlsn0ahy+QtGLdZXuNgOSG9qU61DbXgw6DpLU40v79hN+/7H4vi+9oWfulKenaZLWs76YLYkKvpVeq5URmXckpFTAhj0QLx8by1k16wRMGcB4nWDbbcGL3G7812MW6nUZt6s1wkzbG3S7d/BGtojqwr5Cx143d3hJRUMdaO1N7OUM2vOxrjU7U3Z5ThPLNNafIeJc0W+jZ6dsMy8f17dFh0LGNzVv6X2ntMR6bsSDa7JVgy9ur5yqBDwcmRxo0UB1qpHbRO876QhaQwv5+GF8e2fJwbLTur3b3V6Dzo0DqODIEJYjIMB16javrw9bnew2CedR2iGpRZKSo29vkWbTNRezc/4OETCGruFov+Im+kNJ8eGZ8rgC6JTtmzbIbwGx17gPVxE/Nx06UhmQ8WTxqhOQavUL+4iwDx2GDIMpA74CcEJ+j2xtqBJMaoumgjpCL6B+ldsGyHIAEHLtSdje+nmO9l2XLBA9cS4Gk2Ir1KUa6Oh7EF7/xd488lo5q3eMB4QKpZBrp+I52n6dCRtr+BvdswsAmtTWgtAkINb5drGGz2ibSLkPwf0i4qNzuuqXNGCo+cSNDKB5ISqqJg9AyHCCvyExE6XN4Fk8pd95pGQtxx3PgDu7AdcXXvKVYVrZVarHQbqPQ0YOrCzOi6q/xsqOkadd+ZSnxL5cg206t90TySl/pPc1WLU50bFC28JMeOpbcBTPEJ2T8qpuNZSZ5DN7sLesuzAzni9c/QNc2fOPfgwKtt5smF4W/GJWLo/ujqcpu9xFJTCXAopwNTEUnamTuprccZWLBf19VJ+zKhmZfNWQnXMh5KvCZFdhUxIar3pIwC1yuhqki1jM+HC39+2Rfuh3qDlr","layer_level":1},{"id":"41528186-7dda-49f1-8cd7-6bd4c5f9d31e","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"公共常量与枚举","description":"common-constants","prompt":"创建公共常量与枚举的详细文档。详细介绍CommonConstants中的系统常量定义、HasValueEnum和StatusEnum等枚举类型的含义和使用场景。说明常量的命名规范、枚举的设计原则。包含扩展新常量和枚举的指南。","parent_id":"08498174-3340-4779-a2a5-a6806284023d","order":7,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/constant/CommonConstants.java,crm-base/src/main/java/com/crm/base/domain/enums/HasValueEnum.java,crm-base/src/main/java/com/crm/base/domain/enums/StatusEnum.java","gmt_create":"2026-08-01T10:24:24+08:00","gmt_modified":"2026-08-01T10:58:43+08:00","raw_data":"WikiEncrypted:xN69xsyfHUnwfU68aQhW4QQXyrvPvU/0YTBz6MOQ4G3xyWzVl1VXJbNy8i3N/qL4OK9+zQJo8nt/jYtfMWHulNvNEET/2yRcXTXhmieXEMTmEwW4UMObsbAKAqtAqJg+6eHJxxXmkB1VelU65BM6AgeK4dzi7c1EEJaxkjSgYULUKzvcS3FWOBhMzFq4f/dNmgKHklFBud4J2uh7ZvfSTs15sdlaeb6+KbzW28YwwojBGYBQCAuRBB54/eDC2YfHOXcVruf+0gxCQnb0OKpeobuUf6nATMrSzyWDvkZE0IWW4WZYxcHOzWBnfeYG6aB6pv0FgP7mB4rHRbd2ewp3p65Ak4s6p2ZJbmHQfyew4nBmzeYs98xK7o0nmMNbvqIkfygfILFSpAWWReOXjriRTuCy37R/Ndu2bb0wQqtlXB6D8GUb3hTDwlhlD3Ui8KP7nPh+m698dZwn15NFw3WYWPOMUphKdMdyUCaK5HOtDVzLNRrhwdSdAfiTb2TT1fbUmwsvgPx164aVP+PKDv3JFOv86MieQJcPDNgsC/EWgHE5+3CzOv3z2g+1/zRW7KhkFateGQ3/OhCY4JRxXUljp62alTFSneiL9oKrroxlbpwFZcWuN23AoSC+AMgpiaDpOnHCg+AbHbTtaJ6GhVL8Y8sXX/MkfJ0wslJwymgJsV6oz06p1NkbgfjfIPmcvR10wicblq7/g+eUumWVk8wE2jPr5n3zr+au09a5rhpGMGrSFHcvL/UB6P870sS0uo0RdTaq3/MOga7YlW9BPfdPP5df3a9l4k3orvKjbH8eeg0BpUj/z+ISE3Ec6FSwUky/uYPTzk2WsU0Im2NMOjK3lZNsQt/YiMMoDWEPf18/8D4QyMkBjzFVttJq29TAhZyCDW/hYn/hKtSFN/H/vFZ14Axlxegq/+Vk/euSEK67HvI=","layer_level":3},{"id":"b7f614a8-4610-40ff-8572-1f023c369200","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"配置指南","description":"configuration-guide","prompt":"创建详细的配置指南文档。全面介绍所有配置文件项的含义、默认值、环境变量覆盖、动态配置更新等特性。包含数据库连接配置、Redis缓存配置、MinIO文件存储配置、JWT安全配置、日志级别配置等关键配置项。提供不同环境的配置模板(开发、测试、生产)、配置验证规则、配置热更新机制。包含配置最佳实践、性能调优参数、故障排查指南。为运维人员和开发人员提供完整的配置管理参考。","order":8,"progress_status":"completed","dependent_files":"crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml,crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-06T19:46:05.1691768+08:00","raw_data":"WikiEncrypted:RBrn7d+ZMPYonqIfc+eC6KJaFn6uWvGE2B6Gp+XJgtS/7uXuffOtlTp1k88l2k+fBKV+zLf1zAiXSERkPnYez5y1vHsPycTa17MyeioQ0+xcTmpp+NiyzsgwQeA4NRpeMYt7sIb9XjWOITDtysn06jcIOz2Yv1hSwYWngQgoHus0voo1d3tFZBIJC+hn/bOYFBCPZ7dKaFN0LHh5ANreq5kc6Y2xbvhBPGnc1vhrLuCUjq1V3aaIEoBF//gM+ir4YUUQka3PfyJJ+XATXmflnQ/A/0VuLMjWj/USzHItvvmK7eIH8jEaTs5SQmPHy+OE1I1LB/ecEerXWeA18qUTuT04fumDmuvGxUc7ljUndHEQLJAIMB4+lRsg3wPPTw6CsrrZbW685JZQUrinYGzEgtE0HM5EhvZRBQOWj2MQXzll03NItjjveH36FHPz7BvjvQAMjuhL6LHZcw8S45Q1B97JT0NiWMlt5AODf1UJmsjgNvfRHI3Q46IhkDwBHa7dp7PJo/zrqUY89vHyGJ72UGxa7ai7jlh0FbHO0sGR7TRE1sURrC0XU/gDJukcbCUFJNYetcm6RD+wTQ8GpXY7sOEsPjLVX58o8ljc72I1l85XEln4tkV53UafWffaKwP1W66sD+L5lvRlzn9nWOmUBdGmHMXbOFLjyX67ln5tP+wXLyplhKlc5uMjpwEc+ppxS7sLL/7KHSi/e/NVLieP1XG9bg0rYriZipnfyYJp2tK8LgtchVuDzmC4EyY2EQc3YZKc8rtdO4dlJXJvUf3uD4LWUG5N6aQN2sj/OfdAlNmmgP3pF1vuuKVj2W6WoXmxY9wARUE4bn84G4e81yKJF79+fQmbyx/uq96H37UWIfNgtbTgKhvboU/6NtMTyH+bUdHR8zo+5PBCSSsNQ/Gbs898xCMdcl3FcE8KjanzuftEEqd2UW6uJ4LHXGzFKCWBIp42ZBhnAeVyb1tXBNN+P1yUhUoH9pI9xDS0kYsEkKoGStacKQ+VhWNxKNH3QyNa3U476tlmVTXfLzNasRCPPgAs7l+nKyea3kkBb92ezSUiCKPUfdHxJroh5hNk3r/9s1ILTNoqv9VsbOgxngcLszGKgYmsbYUVpM1lLDHywRxJytDVHttp3NQIg46wUBQUSIHhMxRiqNBIVzOcp6/RWaPuOQTIagEoNWs8xSnZ8eERuYSOU+xuzK0muekkPNvq16dqKRH8cdZDuW3RN8bucDm8oLIFa3FyNOmdj/f8oAgAkYoZvIK6wtLzwke8eM+uojrFWPYBxSd0WtpGlgU5lHJDUji1lvkRZ0Tuhp8hWvslWaiF/PQPgo7iw9QHiwq7Ixtz8v3dkbewoaBIJccRUp27qpytAJANKCudJCkV7pzLDun7KLelodbhnF21nwEoq5wVBFDA5VQKtiqP+Likww=="},{"id":"b5692f33-9863-49b4-bea9-f7cd8bfb0f27","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"测试指南","description":"testing-guide","prompt":"创建全面的测试指南文档。详细介绍单元测试、集成测试、端到端测试的编写规范和最佳实践。包含Mock策略、测试数据准备、测试环境搭建、测试覆盖率要求。说明如何测试认证逻辑、权限控制、文件操作、异常处理等核心功能。提供测试工具类使用指南、测试配置、持续集成配置。包含性能测试、压力测试、安全测试的方法和工具推荐。帮助开发者建立完善的测试体系和质量保证流程。","order":9,"progress_status":"completed","dependent_files":"crm-auth/src/test/java/com/crm/auth/service/impl/UserListIntegrationTest.java,crm-auth/src/test/java/com/crm/auth/security/scope/DataScopeIntegrationTest.java,crm-auth/src/test/java/com/crm/auth/service/impl/AuthServiceImplTest.java,crm-file/src/test/java/com/crm/file/service/impl/FileApiImplTest.java,crm-base/src/test/java/com/crm/base/security/DataVisibilityTest.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T11:58:56+08:00","raw_data":"WikiEncrypted:Xd2Zu8BM8p49theGlFJHkP7LNymxc1WsyjHwG1uqjX391VdN34XQRqMsMMIeEcRBnJexODjh7WY2XETLvWBC2w32dDBBriNb5LTtMndVZQqYKqcJ3P2hnUEa2tjrvWHP3GdzBYTKs9XV7yf7Ut7k9QgsgXLSF1tvKttfSyT3Cj6fuz64OADT4SmwLQNNUu6PunqQFy+oYJ3BKAJjnnQtQ1xd9ZSFRw8rQH4g5irCZL1ISQJcD6exsPcrHiR3hn2hzZlqz2Nl8FL90M+AIvC6wnof/6vW6YZ/q28m3f1lrWbKQQfgmca/JWNgIMRlu3XIKtUurCn4FNwd/X9jW958v1uyXLNM+71LEuHGPRXdOqmuVKwm9xgiy8WAku6FbSJnsP9XR79PCngiSRJw1Cqh+r037SfBpV9xICE4EQKv3dkKGwwrz//k9m4TBlKHYnSAFBgJCBpkKdLtjz2aYKTpDCXvXCfL+49aYmcJDMLv/4d1BL3vj1oRJ7SMdBjfzqdBQ4H8twZDXEev9SfY26du6GevyNqhReJqaGetw11QgpZw39hu3vUaWPijpx0EKXe3AxdadyGg5kgyc2Bzc3eegJv2RrM9/3xt6Ni4LvygXDazz4IXFBlEf+CyvN5Bl6TumlrgCX2LubszP+cR/xIyLkb8hGkQ0q6OGdvoJ2ru/ew1eY298C63+dyP1GYStotXOZFPc1EthRPR3iQXUWJom2X+xcpZZROQXgcR5olRhH4YLI6LC4Xnqhrpr8seQomGv8C5WfpyjUDcBj2IyepDzUbfD2sMxqwDlfeQplPRibtEohuz8+X5YvTTG080LdbuRsBqm4EFE3vaVzdtmwa/HAc7NQtn5xx0iYWrrKbLGI2MGjsXaoRoqtPKzTd0yitEbpYxqNmNb+n0q6OLVdjqrWKOTYJSa00MDNBOOdeUDkT6Sy8ChMSNyhduSHxEQA5SMwyPxSz5ileMvuP1iy0xr76wwddbtMzNh+lC/MlCunMXwZohF1oEZQK8A/U2IDF6MU+SpvCUciHhRtt0/2Nn7GHzOuT4UA9I4vtBQt4afRGnI1XWOocBYqTSkwrQj+J1qTalYAXf3jNEgHj9OBrF0p30a3zPfOLoIwnH2TKT7FmLhfB5UkJyMFqxlTqqRfMl+FiWwoXyTjGByi5rfrstgi6/UoZWUunAkV8H5+qdBpHcVhmsOrHAxFCystNL2XZpdYmb9Qw9CesRN8YpKfdu6U8ZGXzP93sFfByhLZ4svnu5sW+LonZ3uZcxN8mX34C1mMFEbY+S5TkuyV7vlxUe1TXYituIFpWvwQe3u6R9+qEGYAWxm9NdWsjBYBBJ2VBU8kTLjqUr+4fNrydHL2xHBkm5u1oYddnesSZXseJCzQhj39YpOR7LgpPTl8dMXYuhsyb1tEKUlxEgS3c7Ec8YCKnBgqlT8q3nWf7Y2TijHxhQF2/Jie9xkhPzuqHrjyb7EuclRewrglTXRYTQKBp0PVc/g9YgSOhjO5Hj4PwMSheE3W41I0bhzu9/k8lv7B+dF29YKHh+qFx4HRGHhfIkZLsq4r+Q86VooRxlnG8D1y9JrPVWW/Trr56nvZFUneT/7+5q1PzN6QHY725G7Xk1Dg=="},{"id":"41e2eacc-469d-48ae-abf2-a4ae1ea5fe7e","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"部署指南","description":"deployment-guide","prompt":"创建详细的部署指南文档。介绍Docker容器化部署、Kubernetes集群部署、传统服务器部署等多种部署方式。包含环境准备、依赖服务安装、配置文件管理、数据库初始化、服务启动顺序。提供生产环境优化配置、监控告警设置、日志收集方案、备份恢复策略。包含负载均衡配置、SSL证书配置、域名绑定等运维相关内容。为运维团队提供完整的部署和运维手册,确保系统稳定可靠运行。","order":10,"progress_status":"completed","dependent_files":"pom.xml,crm-app/src/main/resources/application.yml,crm-auth/src/main/resources/application.yml,crm-file/src/main/resources/application.yml","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-06T19:44:26.8116455+08:00","raw_data":"WikiEncrypted:XJiAh4Py4zdOGBbpygpFvD9tFWRXhE8ByO2bese1C7/hiSyDP63Hi4lNolBptuDi0rkufCwmSEKqlDrvAKJJ0HoGkmcMjpjGIayIIj4PngIWVrnxlv7WIGkCqZGIVIammPFQEHl36q0tr0b4zL8zMHbbMs5yf6iIY/XA4jXNbuzT9OEHSJBokHp0KMtWIRQQs5MD13nUGxVJFs9yAGtXFu1YvYHGoRhDgsXGcKBQbzC1HMjmiE/8sL5gEBVeMQvEDNXE7Vb05eH96JyrDmbnmtyz3IjDbImthUHfPdSS1ykC7TDOIHeitx31YpKptXhRVSmBOaajWBA7Oyf1i3kP7DNDiJPpBNOvbD/hvA3pKeJQbbRMZFi5eLoMlCfmtxRy/sS/7KRKkYTiP7ExErohUy8OJMmdbO+HxpuJ3XCBniuWbwsQR0Jz48UwmT5FQpnxjJts75PiBZV/SWaFAQHGoFNt+XY9rPkhFegSsz2FAP3YCiUXGcSCW/UrY4EIIyUC8RIGCs+7Ybewa5R3cstFA2uDnsXuaBOcA9RjtrC6LpNGcHcRF9L3fNwTqBqs31bLoyVPGjazB8vkDncBKRScPtP2ptaoHFI/UBZj8EnMV18VymrkO6DniQQeFGAY7Dhk/K4zpzf+RH3lH+xrcCyZ3BYdbsioRUS4+XHW6u6faSfatcxabl+yPdJn3qVzu0kVP0CYcJYKASdCJIE/JTFgo5D/68DfOFWx4+jcDLX7Qf13sUpMhgaw00Du5KL4mp7n0hUbaBgw4m4Ys8wuuLADTyAWkrEziL4wU3DEkF5qpBfGT2mv3FoHbI08cm6gkVmz+HvoVYn+FOXF3yNkf9tTi24mwgEH2RI3B3b1yPXhVtgti8xFPJ5wsACESgIs0Gl6w0XAD8rwm4T8/TltHJ/npt1He/k8GkXA3hylVMWgS0KaCBvNw17JVh7pDSPxu5+4rz9ceL3cgzBMIjsrtlH7+AgYm7u7JDCPoLGtejiW8eYB1GkQxlsFdw9f+Mm21jSiv80VkFXLhnZd1h5fkqMaBMSG9z5vI/NSvueZ75MFlZ6jnTvunok9dosoDtpejIVBmme5DHRRw7H+92cDQzeu89RKmxqHPr6hcInRpvcM+Y7uV/rBv8roO/fYBooZiScGxdBcTN0C+zu8pvu6MxGYSQjSOyb76HWhS+kNfdm9roAIVBXB6HeBYcrJ/Apw25zWwnq48HL+QkGOR96Jwyz+eb4XXFd/WvU3kxacOg25AwQf0en6wHw+Hkfjuz2X1Jek9iHHxqZNrWrqguWNaJi7vA=="},{"id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"开发指南","description":"development-guide","prompt":"创建全面的开发指南文档。详细介绍项目开发规范、代码风格、命名约定、Git工作流。说明如何使用基础框架快速开发业务模块,包括实体类创建、Service层开发、Controller接口编写、数据访问层实现。包含自定义注解使用、AOP切面开发、消息队列集成、定时任务开发等高级特性。提供代码审查清单、性能优化建议、安全编码规范。为新加入的开发者提供快速上手的完整指导,确保代码质量和团队协作效率。","order":11,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/domain/entity/BaseEntity.java,crm-base/src/main/java/com/crm/base/service/IBaseService.java,crm-base/src/main/java/com/crm/base/annotation/DataScope.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:29:22+08:00","raw_data":"WikiEncrypted:F3QgleoEfoy16cQggYe9C/ucQxiwh0okVA48AmODs5RKNS8ZgNngqmnHSFcG/1UaJxx+3dUn+EkMTpYUsOg40rL22hMnvmVAYyZuFSVJGOdkTZGYqMmtuVOBgvosMCJMBUhMuSqPW1JNhmnJrK+r/EahVZyS6RLU2o1sE8vOtilgPcAzRyJjJUHENRWOLpJsLNpGVdO9ieUOF4AAgDoa9RZkCYyXeP2oI8r0j5mDkRr9lS+uNxYQl9W3vcS87521SK/GdqCveS7u9RNn47V9eBdXRtsSVcLaz44enDFM71L3lP7E9S8tQEcfWUlHB/ysvKejvZ0EARolWf066vCPuHCObhxanmxCgQk2OGjTZc1qAw++emB+ddyYoS+0uNc9ctajroimADZJ5zxBBJI4sYf66QjiDEfCynMBrwz3+oqj3s//CnN1yWneVDJ2II3X6uZYUYCZTynCOHXpwWUv/grPadeVTbEpesCUJ+CFuv4J67FmkeAXWrxDfiptMbxKkE1C8sNHTXl2KAMJbXA+Zb21cG0EzgtlXvBGtW6TYKCbUwBMMuxfouP17SuuSjnAKUQF0Oq+/mPzFXLOqsojj02FLSdAsw0YqFGvKEwH8ngzN99B/HzgF9P6gRhVeV+X2qmkXtnyzqLD0u/E3Z6A8WYeYChxux+mMYAN2HDgjNMb2cOc5aknCzPlfY8iulLXd/QQdECS/3RELbfwHppdQlfipTzjE4/ldIObkYl6iQXi8mi/99gKOeB90pdTe2hKhT/UJQs4PRJWoDpdK25KIrZ0nO0G1pXhVHwNvZpkmgHxnhnD7hqAbroRqFG9cjsLBRuciGsk6noS9rjjlWbJ25mslDnY9r1u08rVfsUeLcqAMZ0oOL8ICpZ8/fioirhIxGpQ+4GjkuC9VUdaVrwZmWQeBp2p6lgpEfocykT+CA72P5T4pbF5eNw8E5XYZ+vmP/h1pdBAZV+wjKJOoCnY3QOl2HbxlgEsLSfNdXdoz5f6aBT+ru/JuCklRg3H04M/X0d9PI8rnrjNIsgedGajsUGBBhdvkgeATOzASSl16IrNJ13RiNQkno48dD5GU++urE6NTfEKJOc9oP625h696miexNcFTV+6dX6JQ9OD9Dtk+YjenQiWIiaQ4uNMIivJv986dTU6f46holmicTxFADR/v9qOxffu6wvNnKyeXrNK4qIkY2cB3yIBgwxEPEoOyL63MzN5Vi+ag+IhLStilkM5BqDZSuQ+E2TomaLhmql16HnPJJkEO9PcFC3FlcXuUHp+hvX3NqCSzq23O+e5CpzHJ0wVJnaieIh477xNO/VL+CFbol1NOk7lkWX65Zb0zZXNd5dzDmylRnJrhxoeesWWKSMJfAwad2ypYvY++kkDcwPoqB3liNovX9hK2plBXNE7T/foc1/eiXU1wlnBmg=="},{"id":"8fd250df-a358-4483-be79-1c4a2b69ed9a","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"故障排查","description":"troubleshooting","prompt":"创建详细的故障排查文档。收集和整理常见的系统问题、错误信息和解决方案。包含认证失败、权限拒绝、文件上传失败、数据库连接异常等典型问题的诊断方法和修复步骤。提供日志分析技巧、性能监控指标、内存泄漏检测、线程死锁排查等高级调试技能。包含常用命令、监控工具、日志查询语句。为运维人员和开发人员提供快速定位和解决问题的实用指南,减少系统停机时间。","order":12,"progress_status":"completed","dependent_files":"crm-base/src/main/java/com/crm/base/advice/GlobalExceptionHandlerAdvice.java,crm-auth/src/main/java/com/crm/auth/security/SecurityExceptionHandlers.java,crm-base/src/main/java/com/crm/base/filter/TraceIdFilter.java","gmt_create":"2026-08-01T10:23:12+08:00","gmt_modified":"2026-08-01T10:30:13+08:00","raw_data":"WikiEncrypted:CaKOW8OSSWs4aEYk06Hu0hGGy7zXJE5t3XZJK+9x87X6q4zHAytjLlmcpwH9PAb9okQW7m6Z5SF5zgqYCgJVTWUM+OBP/CzepXICjLz5iwHNgtkxVgNWamHmYCSftZme59WDnY4bkZogrO+aPJ0m7Hn2m0u2FEZCwjlmuqcBXaGpg8OFCIgK0L0olZWb7hl78WX2ICHtVHhxInubVOoctMtYp3tPc0AKqtjdFEvBBFVPadSSbGUdJqz9oQc4PZfITl4AQDdbOB4n0tTI60H4PR4G95kmjpEfU6PdReQYC1a34zu0XOTpZb4Xk8ACnCbOQRYYQAqcXz5Lk8Oh4edYBjO8iDskiJVNFi0aXYONNbxJjtDyIzUgAwkqo8MYYc7F5I7q3UdPRcbvcr7cr5rrdZ94yadlxTT/E4cyI51TbDj/uyG0M8TXmmdHAxXk2N2TUXVohS94OXfTNiW4Y7Br2Vj1pxXsUxMdFs5NfhQzTvSTG9e6Ta+a5u6PWDN5qBN9z8enUpzAxVPeQne47VHu00diX+kMUGOfblrICCO0c7AyemjYd8beNf3ibUHKluWr8CnsMOp1NzkIY3LuQieFv/Dt97Ea7+jccD4+qa/iR3uTam3cwUqppGx8NphDF0iw8YNsd22jHebo6TifS8COrcmQZnnOCeoqYQed0Z1Iy85gyA6yMt6+DtOQnRRMIcWRim0uPrKDo1nCfl+8BhIRHGJu2ESZFelAUYwiimmQ9ZArGQSXG05xkxvu4yqkKT/5MKxOQQgdlfAWAsAC7Etb030uDubHfvrEsqNR+B5zvLeNZWNAdABm0Evnt0j5B2KMByju5RQ5E4grV4VAIKhcixV257UPCg8Z/X2WfE79np/Jll+7J/0PoHN9avsLsJUQQPElaTokmX8BFUD45w+P8ggH7d4rYBmWfVEhDEH4/Z+J5497CvMIrz8RJ5faVk3x6kOP1QpLqE6MukHYD6Xamla1jBrKOAuJG97q5C9Vpfh5qjvo2Z+1IEgv1hU8XOsSCigRGRGBPHRC/WwbZos2E4/jGdOz1VTPyUFO4KznBkTAMoZSPLAq5De0c3Jyc2bPuYSI2lEvUdrk5sn/drz7f364Js/d0GWtqcvIHvLlfZ5PwhG8zmRwvMKaCAJ0y3d81XP9I2cx+GaGTBZNMStUB3JpxKZanaJEYSmpEkItXDqCXRAmdiQVOnwp636Kj+Qp+m6jfIGsEvEnCwutgPvL6HvbG7Z/HGS/7yUWBHHIE6oS/Xm3zXT0KMk9p9b3dIoDV8ZKo+cp4xPeuMga775ly5CYy6OGzrSALY0cknSYrFU9bi6PL+WCzuxtuBke5y+YuYF2Df36cgru3MfSQ9ti9A=="}],"wiki_items":[{"catalog_id":"673ed306-0e91-4381-a45f-07865c6c3582","title":"项目概览","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6d8082c2-bade-49fb-b470-995db7466303","gmt_create":"2026-08-01T10:25:31+08:00","gmt_modified":"2026-08-01T10:25:32+08:00"},{"catalog_id":"5f6ff167-f16e-4f8f-8266-00548ce0f9b6","title":"快速开始","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"733d25f7-9f61-4c40-bd05-7b6bcfb1dc52","gmt_create":"2026-08-01T10:25:35+08:00","gmt_modified":"2026-08-01T10:25:35+08:00"},{"catalog_id":"6185fed1-d9b4-4455-b998-7973faf0fd03","title":"架构设计","description":"architecture-design","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0aa950fd-b5e9-4ca4-9d4c-37db0ddbebf0","gmt_create":"2026-08-01T10:25:40+08:00","gmt_modified":"2026-08-03T19:27:26+08:00"},{"catalog_id":"0308a80e-6d7c-46e4-b2ff-2ac58cb9dbe0","title":"文件服务","description":"file-service","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"30a25b67-b398-4ae7-bd7f-f3d91055c76d","gmt_create":"2026-08-01T10:26:52+08:00","gmt_modified":"2026-08-06T08:45:06.6686703+08:00"},{"catalog_id":"9c8063f9-5e3c-4e07-9f7e-9bb5fa2886cb","title":"基础框架","description":"base-framework","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"8fe6d28f-484c-4d9e-aab9-2ff716cdd083","gmt_create":"2026-08-01T10:26:52+08:00","gmt_modified":"2026-08-01T10:26:52+08:00"},{"catalog_id":"125c4951-f8f1-4472-a65d-2e4d8a5963d5","title":"认证服务","description":"auth-service","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"dac07694-6782-4f77-bf00-00708c5e78c7","gmt_create":"2026-08-01T10:27:24+08:00","gmt_modified":"2026-08-06T19:46:47.164529+08:00"},{"catalog_id":"6e92351d-04cb-46df-89a9-1e2f43b46552","title":"API参考文档","description":"api-reference","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c16d495e-28fe-40ad-acd3-302f8922fc8d","gmt_create":"2026-08-01T10:28:01+08:00","gmt_modified":"2026-08-06T19:44:39.2818347+08:00"},{"catalog_id":"656bb585-a75e-4cc9-9935-1539b3c1a524","title":"数据模型","description":"data-model","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0071dc3e-4020-43d2-b126-1d18e74ed40d","gmt_create":"2026-08-01T10:28:12+08:00","gmt_modified":"2026-08-06T19:45:07.7671857+08:00"},{"catalog_id":"b7f614a8-4610-40ff-8572-1f023c369200","title":"配置指南","description":"configuration-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"abc60a22-9f40-4270-9660-d1ff6a380f2f","gmt_create":"2026-08-01T10:28:23+08:00","gmt_modified":"2026-08-06T19:46:05.1691768+08:00"},{"catalog_id":"41e2eacc-469d-48ae-abf2-a4ae1ea5fe7e","title":"部署指南","description":"deployment-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"679892b9-0f46-4aff-a899-ecc5bae086f6","gmt_create":"2026-08-01T10:29:17+08:00","gmt_modified":"2026-08-06T19:44:26.8116455+08:00"},{"catalog_id":"6fe61aed-8af4-4302-a969-9cff0685b5cb","title":"开发指南","description":"development-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"294a8990-8858-40c4-b8c7-ff37d91d6d31","gmt_create":"2026-08-01T10:29:22+08:00","gmt_modified":"2026-08-01T10:29:22+08:00"},{"catalog_id":"b5692f33-9863-49b4-bea9-f7cd8bfb0f27","title":"测试指南","description":"testing-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"4003f5dd-1dda-4c9e-8eb5-edd57d53be58","gmt_create":"2026-08-01T10:29:30+08:00","gmt_modified":"2026-08-01T11:58:56+08:00"},{"catalog_id":"8fd250df-a358-4483-be79-1c4a2b69ed9a","title":"故障排查","description":"troubleshooting","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"a3aef903-17a7-4375-954f-ebb4995efdab","gmt_create":"2026-08-01T10:30:13+08:00","gmt_modified":"2026-08-01T10:30:13+08:00"},{"catalog_id":"c72fcb57-495e-4c32-b5c2-159484464f6b","title":"整体架构模式","description":"overall-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ce03262b-4baa-4304-84b5-4f936862ebac","gmt_create":"2026-08-01T10:30:23+08:00","gmt_modified":"2026-08-01T10:30:23+08:00"},{"catalog_id":"d882e07a-3f3b-4d7b-86f3-fa46c56cc817","title":"架构设计","description":"architecture-design","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ec96e8c3-c43c-463b-b4ba-7a9019ee0aff","gmt_create":"2026-08-01T10:30:47+08:00","gmt_modified":"2026-08-01T10:30:47+08:00"},{"catalog_id":"75cf3e71-a859-4739-ae6f-bdeacbcde63a","title":"认证核心机制","description":"auth-core","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"88f667ab-0f58-4a85-82cc-d33915ce4c7a","gmt_create":"2026-08-01T10:31:02+08:00","gmt_modified":"2026-08-04T17:44:06.5491123+08:00"},{"catalog_id":"63b8b110-d9ea-4a5d-9eb6-0cd4aeec7c8a","title":"文件上传下载","description":"file-upload-download","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"db63226d-3f30-498a-9bd7-2de0049e1d73","gmt_create":"2026-08-01T10:31:18+08:00","gmt_modified":"2026-08-01T10:31:18+08:00"},{"catalog_id":"3c375076-c8fb-460b-95a8-f4c6eb60af94","title":"认证API","description":"auth-api","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"176adc32-f844-4e47-91a5-ec14bd5dca47","gmt_create":"2026-08-01T10:31:57+08:00","gmt_modified":"2026-08-05T14:14:28.2401317+08:00"},{"catalog_id":"99d97aac-8777-4bb6-aec7-edc5e57ac411","title":"通用实体类","description":"base-entities","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d3d1fc96-5f27-423b-a3de-43c5c5ce122a","gmt_create":"2026-08-01T10:32:06+08:00","gmt_modified":"2026-08-01T10:32:06+08:00"},{"catalog_id":"e722ef25-3c92-43fe-8ec5-3f18ed7dec11","title":"用户认证模型","description":"user-auth-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"da156be4-8933-4ba5-99cb-63907914b9ad","gmt_create":"2026-08-01T10:32:27+08:00","gmt_modified":"2026-08-01T10:32:27+08:00"},{"catalog_id":"31af04df-8cd2-4a05-ba13-06b468b471bc","title":"应用配置","description":"application-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"2d8b5954-a700-4519-9fef-d0f5c3c842e6","gmt_create":"2026-08-01T10:32:56+08:00","gmt_modified":"2026-08-03T19:55:41+08:00"},{"catalog_id":"03573e0e-c8f9-4d34-aa69-f15601d7e542","title":"开发规范","description":"development-standards","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"1fa63bbc-cfb1-4c5b-92ce-4da06a03df1a","gmt_create":"2026-08-01T10:33:13+08:00","gmt_modified":"2026-08-07T17:24:18.4785132+08:00"},{"catalog_id":"44c82594-e392-4a1e-8517-2c526989faa2","title":"技术栈","description":"technology-stack","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"918c82b4-acd2-47d1-9eb3-656deeb62e27","gmt_create":"2026-08-01T10:33:18+08:00","gmt_modified":"2026-08-01T10:33:18+08:00"},{"catalog_id":"65c8fce4-7186-4278-af29-31083933e088","title":"安全架构设计","description":"security-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0c060e95-d7b3-4f91-90c0-3540a440cb1c","gmt_create":"2026-08-01T10:34:01+08:00","gmt_modified":"2026-08-07T15:23:51.9013073+08:00"},{"catalog_id":"6d5b5dd3-2110-4c67-91ab-a4af568b1fcf","title":"文件预览","description":"file-preview","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"36b15a35-52f9-4e29-ad05-6dac66f00c14","gmt_create":"2026-08-01T10:34:15+08:00","gmt_modified":"2026-08-01T10:34:15+08:00"},{"catalog_id":"10fe110b-0599-47e5-aca7-ce0be9725463","title":"用户管理","description":"user-management","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"1058e349-f116-4c95-af6a-eebc7a32cc25","gmt_create":"2026-08-01T10:34:45+08:00","gmt_modified":"2026-08-01T11:59:25+08:00"},{"catalog_id":"944b8007-7a9d-4625-b67a-994c17444047","title":"系统管理API","description":"system-api","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"36e9f3c1-b81c-4a57-bb99-3b15b6569af7","gmt_create":"2026-08-01T10:35:11+08:00","gmt_modified":"2026-08-01T10:35:11+08:00"},{"catalog_id":"36b2b0a8-2baf-4ee8-8bd6-9a92f4799c8a","title":"基础服务层","description":"base-service","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"be5bf550-c68c-431d-ba89-9836d61bfdf1","gmt_create":"2026-08-01T10:35:16+08:00","gmt_modified":"2026-08-01T10:35:16+08:00"},{"catalog_id":"93798792-5525-4a76-96d6-4cfffc0b6918","title":"权限体系模型","description":"permission-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"883d8163-419b-460d-a558-eb118e4a06c9","gmt_create":"2026-08-01T10:36:03+08:00","gmt_modified":"2026-08-01T10:36:03+08:00"},{"catalog_id":"5c0faa41-8ed8-4869-bd14-7c05941d011b","title":"数据库配置","description":"database-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"57308b29-b058-46d1-ae1a-cab06e6e3e51","gmt_create":"2026-08-01T10:36:11+08:00","gmt_modified":"2026-08-01T10:36:11+08:00"},{"catalog_id":"f361d96e-498e-4429-aeb9-97176536e9f4","title":"框架使用","description":"framework-usage","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"2c71e522-4140-46f9-9edb-90ec500c07e8","gmt_create":"2026-08-01T10:36:12+08:00","gmt_modified":"2026-08-01T10:36:12+08:00"},{"catalog_id":"84d1852f-5d73-48d9-8e67-51c02f002f84","title":"数据访问架构","description":"data-access-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6a3ce482-07a4-416a-98d2-110c5877bf11","gmt_create":"2026-08-01T10:37:08+08:00","gmt_modified":"2026-08-01T10:37:08+08:00"},{"catalog_id":"206132d0-398e-47da-b31a-d5a00714ef04","title":"角色权限管理","description":"role-permission","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"34ea7d69-8030-495d-8782-3aa087c80de9","gmt_create":"2026-08-01T10:37:38+08:00","gmt_modified":"2026-08-05T14:15:15.2241292+08:00"},{"catalog_id":"e8ef49e5-d359-46a7-8c7b-6239e00f1b7a","title":"模块说明","description":"module-overview","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0870c57d-c63c-477f-b69e-7799461cae3a","gmt_create":"2026-08-01T10:37:45+08:00","gmt_modified":"2026-08-07T17:25:08.99353+08:00"},{"catalog_id":"be63d49c-2198-47cd-a738-469331301903","title":"存储管理","description":"storage-management","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c20b2e4f-5904-4ba8-ba7e-7e73b1874278","gmt_create":"2026-08-01T10:38:08+08:00","gmt_modified":"2026-08-01T10:38:08+08:00"},{"catalog_id":"94ba65d8-c0c8-4b05-ac7a-b2fc2bea1ab3","title":"全局异常处理","description":"exception-handling","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"5a19aa15-dc0a-4794-a39b-582db554acf0","gmt_create":"2026-08-01T10:38:36+08:00","gmt_modified":"2026-08-01T10:38:36+08:00"},{"catalog_id":"b7dceb3f-2af0-4478-a20b-90dfb2844564","title":"文件API","description":"file-api","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b445dcd0-583c-4864-b2e8-18cc9660ced3","gmt_create":"2026-08-01T10:38:56+08:00","gmt_modified":"2026-08-06T08:43:51.3339554+08:00"},{"catalog_id":"ab8b3963-2438-4d59-8c5f-4a99380ab5a9","title":"文件管理模型","description":"file-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f41f75b2-5d32-41eb-9c7e-db2d987ddfd0","gmt_create":"2026-08-01T10:39:18+08:00","gmt_modified":"2026-08-01T10:39:18+08:00"},{"catalog_id":"efca4d87-f0a0-46f2-a4f8-67caa3f933a2","title":"缓存配置","description":"cache-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ad6bec26-b938-4424-9ee2-741deba5fcb5","gmt_create":"2026-08-01T10:39:34+08:00","gmt_modified":"2026-08-03T19:55:33+08:00"},{"catalog_id":"475bbe36-0b28-467a-a99b-2cc4135e64d0","title":"高级特性","description":"advanced-features","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b04efc93-7ddd-4987-a71f-d5001040edcc","gmt_create":"2026-08-01T10:39:39+08:00","gmt_modified":"2026-08-01T10:39:39+08:00"},{"catalog_id":"a131dbed-4290-4582-bef8-49b15054143d","title":"快速开始","description":"quick-start","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b574348c-289c-42ef-bbe5-f18434e0f9bf","gmt_create":"2026-08-01T10:40:06+08:00","gmt_modified":"2026-08-01T10:40:06+08:00"},{"catalog_id":"903509ec-841f-47d8-b6ee-ee2e202b6d4c","title":"缓存架构设计","description":"caching-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f34d9fa4-1ba0-428e-a8bf-dc560bb5c61c","gmt_create":"2026-08-01T10:40:30+08:00","gmt_modified":"2026-08-01T10:40:30+08:00"},{"catalog_id":"e8319196-8371-4fce-8507-3ce68e0fd862","title":"菜单权限控制","description":"menu-access-control","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b5320c7c-d3ea-4e78-844a-d0b334deb03b","gmt_create":"2026-08-01T10:40:34+08:00","gmt_modified":"2026-08-04T09:27:03+08:00"},{"catalog_id":"45d01f64-96b6-4edc-8c0c-d25d7f250025","title":"任务调度","description":"task-scheduling","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"9c64cc91-56af-4905-b362-8808cd7fdad9","gmt_create":"2026-08-01T10:41:00+08:00","gmt_modified":"2026-08-06T08:43:59.3664927+08:00"},{"catalog_id":"ebece36c-dab9-47b1-9a6d-806b3c1b1afe","title":"基础实体模型","description":"base-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"bd0bea22-698c-4a21-9e56-4e8d3a475ba7","gmt_create":"2026-08-01T10:41:36+08:00","gmt_modified":"2026-08-01T10:41:36+08:00"},{"catalog_id":"66713b0f-71b6-4081-94be-b02b5c149d04","title":"测试指南","description":"testing-guide","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"7ef884a5-5749-405d-9da2-6cc20683c050","gmt_create":"2026-08-01T10:41:42+08:00","gmt_modified":"2026-08-01T12:30:44+08:00"},{"catalog_id":"23dd7f77-e190-4852-b94d-17d2b127f16b","title":"安全框架","description":"security-framework","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"068fc96f-bb8c-4ce6-b079-72c01ba04bae","gmt_create":"2026-08-01T10:41:55+08:00","gmt_modified":"2026-08-01T10:41:55+08:00"},{"catalog_id":"b9f48f07-3a5f-4992-8336-1cc0b8827e46","title":"文件存储配置","description":"file-storage-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6082a318-56e5-478f-bfac-17723c2bd127","gmt_create":"2026-08-01T10:42:50+08:00","gmt_modified":"2026-08-01T10:42:50+08:00"},{"catalog_id":"eb945786-ac59-425b-811c-b0227a46a7a9","title":"存储架构设计","description":"storage-architecture","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"5a282910-9cce-41af-8c7a-7fb5d0d295dd","gmt_create":"2026-08-01T10:42:52+08:00","gmt_modified":"2026-08-01T10:42:52+08:00"},{"catalog_id":"bae93960-0541-44a3-aa2a-bc7310c656f9","title":"部门管理","description":"department-management","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"a92b51f6-5cdb-4a85-b3e3-12a18d707ab5","gmt_create":"2026-08-01T10:42:53+08:00","gmt_modified":"2026-08-01T10:42:53+08:00"},{"catalog_id":"55a27b34-d92d-4f16-b9c2-00952e271280","title":"安全配置","description":"security-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d4105695-2094-4939-be9d-cf30437aada0","gmt_create":"2026-08-01T10:43:52+08:00","gmt_modified":"2026-08-01T10:43:52+08:00"},{"catalog_id":"8650f717-ee3a-4115-8333-d4743c840781","title":"核心配置","description":"configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f5db08f6-ba6c-48f9-a61d-1d476a52234e","gmt_create":"2026-08-01T10:43:54+08:00","gmt_modified":"2026-08-01T10:43:54+08:00"},{"catalog_id":"a07393e1-3adc-45c2-9fab-ff9568539c8d","title":"调试与故障排查","description":"debugging-troubleshooting","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"47dc438d-d49c-4082-84d6-779660f0d768","gmt_create":"2026-08-01T10:44:04+08:00","gmt_modified":"2026-08-01T10:44:04+08:00"},{"catalog_id":"c599c1ec-9ed0-4ff2-ab5e-0d5a0461ae11","title":"工具类库","description":"utils-tools","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b50c7b86-b029-4352-a2e6-60c5e592e789","gmt_create":"2026-08-01T10:44:52+08:00","gmt_modified":"2026-08-01T10:44:52+08:00"},{"catalog_id":"33f9a0d7-aea6-4324-ad3e-39d4ce558625","title":"雪花算法配置","description":"snowflake-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d408e95a-13b7-4ad0-9fbf-2191ed2bfa16","gmt_create":"2026-08-01T10:45:02+08:00","gmt_modified":"2026-08-01T10:45:02+08:00"},{"catalog_id":"55f54320-f631-4d95-96d8-e7b9f17024ad","title":"数据权限控制","description":"data-scope","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"85fd498e-ba52-470f-b25d-ae190d07e1ac","gmt_create":"2026-08-01T10:45:02+08:00","gmt_modified":"2026-08-01T10:45:02+08:00"},{"catalog_id":"2e45bcd4-f474-4d34-9e28-98d74da5d24a","title":"认证API接口","description":"auth-api","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ea83a6dc-68e3-478e-8f71-72edf5ee8975","gmt_create":"2026-08-01T10:45:53+08:00","gmt_modified":"2026-08-01T12:28:52+08:00"},{"catalog_id":"9c1038a1-5ae8-45a4-9c08-2004a4595503","title":"第三方登录集成","description":"third-party-auth","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"158e8a6f-5d98-42cf-8e12-c89d7b319118","gmt_create":"2026-08-01T10:45:56+08:00","gmt_modified":"2026-08-03T19:26:44+08:00"},{"catalog_id":"fd993603-f6ad-4a29-be89-80399ccc2352","title":"通用常量与枚举","description":"common-constants","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"745079a2-2d3e-4e07-8e12-2b0c77a1aa4a","gmt_create":"2026-08-01T10:45:59+08:00","gmt_modified":"2026-08-01T10:45:59+08:00"},{"catalog_id":"0e2ada19-25e1-4d39-8cde-a5d9ea0ab4c8","title":"领域模型","description":"domain-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"aac0b656-e390-412c-a1a3-16b77a280875","gmt_create":"2026-08-01T10:46:48+08:00","gmt_modified":"2026-08-04T17:45:24.5985603+08:00"},{"catalog_id":"fa36460c-e07c-429a-bed6-e6c66f7f39dc","title":"认证机制","description":"authentication-mechanism","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"e5687cb7-c956-4dde-b6fc-3972ea916e5e","gmt_create":"2026-08-01T10:46:49+08:00","gmt_modified":"2026-08-01T10:46:49+08:00"},{"catalog_id":"d3ee67fa-928d-4cca-9a20-dbe37eab7d54","title":"认证服务模块(crm-auth)","description":"auth-module","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"8ddf5f0a-856b-4ad6-a0c7-566ed6f4283b","gmt_create":"2026-08-01T10:47:32+08:00","gmt_modified":"2026-08-05T12:14:49.6781106+08:00"},{"catalog_id":"2c7b95d3-56df-45e4-be0b-d647bcd02b52","title":"MyBatis Plus配置","description":"mybatis-plus-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"291b69f4-e014-4afa-b35d-55cfbc845b23","gmt_create":"2026-08-01T10:47:44+08:00","gmt_modified":"2026-08-01T10:47:44+08:00"},{"catalog_id":"cfda0d47-7134-4fb1-b1ae-fe5bc943bcb7","title":"数据所有权控制","description":"data-ownership","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"3fb2d355-11e4-4d85-9b53-cec9e9330b0b","gmt_create":"2026-08-01T10:47:46+08:00","gmt_modified":"2026-08-01T10:47:46+08:00"},{"catalog_id":"2d853bfb-7cd3-44ba-9bf7-a683edb4c2ad","title":"自定义注解开发","description":"custom-annotations","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6789c32b-de31-4bf0-8ec9-7ea000a6266e","gmt_create":"2026-08-01T10:48:34+08:00","gmt_modified":"2026-08-01T10:48:34+08:00"},{"catalog_id":"d2b828a6-c055-401e-aa37-67d9c9fbc9fc","title":"授权模型","description":"authorization-model","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"8b17b02c-4868-4324-af4f-dcc98fbfed64","gmt_create":"2026-08-01T10:48:57+08:00","gmt_modified":"2026-08-01T10:48:57+08:00"},{"catalog_id":"08498174-3340-4779-a2a5-a6806284023d","title":"基础框架模块(crm-base)","description":"base-module","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"301311ec-fa49-441d-8f69-bec64740fdd8","gmt_create":"2026-08-01T10:49:11+08:00","gmt_modified":"2026-08-07T17:24:48.48147+08:00"},{"catalog_id":"f30568dd-ee5f-4b57-adef-92341e4f08f8","title":"数据范围助手","description":"data-scope-helper","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"0fc4f1d1-eb6f-4cfb-86f9-60b389db6b6e","gmt_create":"2026-08-01T10:49:36+08:00","gmt_modified":"2026-08-01T10:49:36+08:00"},{"catalog_id":"205f602e-3460-496d-8aee-f9959ae1d4b1","title":"Redis缓存配置","description":"redis-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"48cadf57-f1d9-4cff-8455-1f96e33b15ec","gmt_create":"2026-08-01T10:49:45+08:00","gmt_modified":"2026-08-03T19:55:26+08:00"},{"catalog_id":"d016da08-6253-4c3f-8900-7211fdd0f593","title":"分布式ID生成","description":"distributed-id-generation","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c4dd0228-d971-4375-a846-d7e0296721b4","gmt_create":"2026-08-01T10:50:03+08:00","gmt_modified":"2026-08-01T10:50:03+08:00"},{"catalog_id":"3cc4b9eb-c8bf-4cf2-ad89-79086f5cf862","title":"文件服务模块(crm-file)","description":"file-module","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"9ae0059a-05ad-4318-857f-ce3b539fd9d5","gmt_create":"2026-08-01T10:50:36+08:00","gmt_modified":"2026-08-06T19:46:09.9684366+08:00"},{"catalog_id":"2d22b0d3-cb51-4b9c-8ee0-b4e26edb675f","title":"数据权限控制","description":"data-scope-control","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"dff99746-62fb-4c4b-ae86-768430ff2aed","gmt_create":"2026-08-01T10:51:08+08:00","gmt_modified":"2026-08-04T17:15:13.3140489+08:00"},{"catalog_id":"a1ee2722-ca15-44e9-b4c5-f8dd54e74819","title":"用户安全信息","description":"user-security","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"8ca9c912-4c7b-4540-b09d-66b362eb6629","gmt_create":"2026-08-01T10:51:10+08:00","gmt_modified":"2026-08-01T10:51:10+08:00"},{"catalog_id":"ca56f7cf-bcf1-472d-80d2-6e0b42d8e0f3","title":"Jackson序列化配置","description":"jackson-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"eec19a8f-6c17-4486-96ce-0a09474cf521","gmt_create":"2026-08-01T10:51:32+08:00","gmt_modified":"2026-08-01T10:51:32+08:00"},{"catalog_id":"1a9ab040-6d05-4a0d-b8ec-9ac2e9d605ba","title":"应用入口模块(crm-app)","description":"app-module","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"5185347d-edff-48f1-a87e-bd08f91b7939","gmt_create":"2026-08-01T10:51:56+08:00","gmt_modified":"2026-08-01T10:51:56+08:00"},{"catalog_id":"158c9c2b-ea3f-4e40-9c9f-a26a2316416c","title":"JWT认证机制","description":"jwt-authentication","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"dae64a35-168f-4724-b194-c92cbe38136a","gmt_create":"2026-08-01T10:52:01+08:00","gmt_modified":"2026-08-01T10:52:01+08:00"},{"catalog_id":"af24e12b-52f1-4672-83c5-c1d5108b1c06","title":"安全配置","description":"security-configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c474b493-b90b-4589-b8f6-abb213778b21","gmt_create":"2026-08-01T10:52:26+08:00","gmt_modified":"2026-08-01T10:52:26+08:00"},{"catalog_id":"857accdf-edf6-49c1-a7c3-e9906579f74b","title":"缓存策略","description":"caching-strategies","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"c94ec056-eec7-48b6-9b01-92f02b60adf1","gmt_create":"2026-08-01T10:52:44+08:00","gmt_modified":"2026-08-01T10:52:44+08:00"},{"catalog_id":"eed6a5a9-cc7a-42b0-9f2a-94cae476f2ab","title":"Knife4j API文档配置","description":"knife4j-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f6f5cb59-fe75-4076-8987-265d4ea8e886","gmt_create":"2026-08-01T10:52:51+08:00","gmt_modified":"2026-08-01T10:52:51+08:00"},{"catalog_id":"9b094a30-1649-4ef5-a16f-1b2fc5734fdd","title":"雪花算法ID配置","description":"snowflake-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"e9620c19-fd9a-47de-a0db-08ae92e834e9","gmt_create":"2026-08-01T10:53:14+08:00","gmt_modified":"2026-08-01T10:53:14+08:00"},{"catalog_id":"081c1898-c9eb-41e0-93ab-411a05ead961","title":"定时任务","description":"scheduled-tasks","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"f7730619-12ac-4454-a2ba-a86e19e5d98e","gmt_create":"2026-08-01T10:53:29+08:00","gmt_modified":"2026-08-01T10:53:29+08:00"},{"catalog_id":"3343ea4e-b085-4bc9-b7be-62003913a5fe","title":"跨域配置","description":"cors-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"6c78e496-40e5-4b38-bf17-218f38a977f7","gmt_create":"2026-08-01T10:53:35+08:00","gmt_modified":"2026-08-01T10:53:35+08:00"},{"catalog_id":"245dcfcb-140a-499f-a377-5d6e6b1ba003","title":"性能优化","description":"performance-optimization","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"e439cdc0-7e80-48a7-be4d-3abd32d3b4c6","gmt_create":"2026-08-01T10:54:07+08:00","gmt_modified":"2026-08-01T10:54:07+08:00"},{"catalog_id":"d69a79e2-abce-482f-afdf-2b016450e217","title":"认证核心功能","description":"auth-core","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"a946df03-41d0-4e28-8069-d41d28c91eed","gmt_create":"2026-08-01T10:54:25+08:00","gmt_modified":"2026-08-01T10:54:25+08:00"},{"catalog_id":"c870ee03-f2fe-42b2-8508-2375fa8a5512","title":"通用实体类","description":"base-entity","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"60857927-930a-4ef5-9096-2a05359e1e5b","gmt_create":"2026-08-01T10:54:30+08:00","gmt_modified":"2026-08-01T10:54:30+08:00"},{"catalog_id":"38d7de85-c5ff-48d7-8a0e-c4972f5d6800","title":"服务层封装","description":"service-layer","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d7242e37-8722-4c9c-9e2c-cc9cd3adb20b","gmt_create":"2026-08-01T10:55:14+08:00","gmt_modified":"2026-08-01T10:55:14+08:00"},{"catalog_id":"24f79255-1534-4c47-9d2d-1734103bffb4","title":"权限管理系统","description":"permission-system","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"1562e48f-2c79-4024-ab33-4c40084240e7","gmt_create":"2026-08-01T10:55:30+08:00","gmt_modified":"2026-08-05T14:15:12.8293219+08:00"},{"catalog_id":"beac3859-3efd-40f8-bb6c-cfdd3d22cb0e","title":"第三方登录集成","description":"third-party-auth","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"81106841-6bef-41d3-8f76-7dc6437e7e04","gmt_create":"2026-08-01T10:55:35+08:00","gmt_modified":"2026-08-01T10:55:35+08:00"},{"catalog_id":"0642bf0d-15ff-446e-9a9a-2f43a53e7d70","title":"异常处理机制","description":"exception-handling","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"27b42b0d-e7f8-4ab2-96f1-1bc0981b94c2","gmt_create":"2026-08-01T10:56:16+08:00","gmt_modified":"2026-08-01T10:56:16+08:00"},{"catalog_id":"aa92acd4-8a14-498a-974b-5385add01858","title":"安全配置与过滤器","description":"security-config","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"85dce05c-14ae-4632-82e5-30fab7771e6d","gmt_create":"2026-08-01T10:56:32+08:00","gmt_modified":"2026-08-04T17:44:30.7539816+08:00"},{"catalog_id":"1ef5af61-7cd7-4cfc-bc01-f2892feefd07","title":"数据访问层","description":"data-access","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"ffb733ba-253c-4fc1-b940-e65c03f1a508","gmt_create":"2026-08-01T10:56:55+08:00","gmt_modified":"2026-08-01T10:56:55+08:00"},{"catalog_id":"80790bc7-c82c-4060-9f65-95c81558f979","title":"领域模型与实体","description":"domain-models","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"5e6e2407-3ea1-4872-9776-be307dbfdedc","gmt_create":"2026-08-01T10:57:28+08:00","gmt_modified":"2026-08-01T12:29:28+08:00"},{"catalog_id":"dac0c399-2b11-42d0-af10-3e537fbfd80f","title":"安全与权限控制","description":"security-permission","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"b2a66c5e-122e-4968-ae3a-6c1efadf5b66","gmt_create":"2026-08-01T10:57:37+08:00","gmt_modified":"2026-08-01T10:57:37+08:00"},{"catalog_id":"293dd98f-e9a9-431a-a01c-8630354c01ae","title":"框架配置","description":"configuration","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"3c3ebd00-b567-4021-8066-af064318d4fd","gmt_create":"2026-08-01T10:57:54+08:00","gmt_modified":"2026-08-01T10:57:54+08:00"},{"catalog_id":"043bdfe3-f703-4d1b-928d-5f5665cadefc","title":"工具类库","description":"utilities","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"1d6a4cd5-2dbe-41ba-9db3-cb9f7fcb2d79","gmt_create":"2026-08-01T10:58:25+08:00","gmt_modified":"2026-08-01T10:58:25+08:00"},{"catalog_id":"41528186-7dda-49f1-8cd7-6bd4c5f9d31e","title":"公共常量与枚举","description":"common-constants","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"d1bf1df6-89dc-40ea-9101-793b8c893ae8","gmt_create":"2026-08-01T10:58:43+08:00","gmt_modified":"2026-08-01T10:58:43+08:00"},{"catalog_id":"1b7df2d7-ac12-4df0-8bf9-b70d107236cc","title":"动态API权限拦截器","description":"dynamic-api-permission-interceptor","extend":"{}","progress_status":"completed","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","reference_count":0,"id":"e886a159-657d-4516-9922-a6cabb6aabc0","gmt_create":"2026-08-04T17:46:33.4503698+08:00","gmt_modified":"2026-08-04T17:46:33.4519067+08:00"}],"wiki_overview":{"content":"我将对这个CRM后端项目进行全面的架构分析。让我首先查看项目的核心文件和结构。\n\n\u003ctool_call\u003e\n\u003cfunction=read_file\u003e\n\u003cparameter=file_path\u003e\nd:\\code\\crm-backend-matt\\pom.xml\n\u003c/parameter\u003e\n\u003c/function\u003e\n\u003c/tool_call\u003e","gmt_create":"2026-08-01T10:22:28+08:00","gmt_modified":"2026-08-01T10:22:28+08:00","id":"6e6e7132-f8ab-4711-a1cb-49d7bed692ba","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d"},"wiki_readme":{"content":"No readme file","gmt_create":"2026-08-01T10:22:06+08:00","gmt_modified":"2026-08-01T10:22:06+08:00","id":"e5f5a157-155e-4420-88eb-31d6856dd78e","repo_id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d"},"wiki_repo":{"id":"e9bb8e10-146a-44fe-a21d-b6b95dca689d","name":"crm-backend-matt","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── crm-app\\\\\\n│ ├── src\\\\main\\\\\\n│ │ ├── java\\\\com\\\\crm\\\\app\\\\\\n│ │ │ └── CrmAppApplication.java\\n│ │ └── resources\\\\\\n│ │ └── application.yml\\n│ ├── target\\\\\\n│ └── pom.xml\\n├── crm-auth\\\\\\n│ ├── src\\\\\\n│ │ ├── main\\\\\\n│ │ │ ├── java\\\\com\\\\crm\\\\auth\\\\\\n│ │ │ │ ├── config\\\\\\n│ │ │ │ │ ├── AuthProperties.java\\n│ │ │ │ │ ├── DataInitializer.java\\n│ │ │ │ │ ├── PermissionConfig.java\\n│ │ │ │ │ └── SecurityConfig.java\\n│ │ │ │ ├── constant\\\\\\n│ │ │ │ │ └── AuthConstants.java\\n│ │ │ │ ├── controller\\\\\\n│ │ │ │ │ ├── AuthController.java\\n│ │ │ │ │ └── SystemController.java\\n│ │ │ │ ├── domain\\\\\\n│ │ │ │ │ ├── dto\\\\\\n│ │ │ │ │ │ ├── LoginResultDTO.java\\n│ │ │ │ │ │ └── UserInfoDTO.java\\n│ │ │ │ │ ├── entity\\\\\\n│ │ │ │ │ │ ├── AuthIdentity.java\\n│ │ │ │ │ │ ├── AuthUser.java\\n│ │ │ │ │ │ ├── SysDept.java\\n│ │ │ │ │ │ ├── SysMenu.java\\n│ │ │ │ │ │ ├── SysRole.java\\n│ │ │ │ │ │ ├── SysRoleMenu.java\\n│ │ │ │ │ │ ├── SysUserDept.java\\n│ │ │ │ │ │ └── SysUserRole.java\\n│ │ │ │ │ ├── enums\\\\\\n│ │ │ │ │ │ ├── DataScopeEnum.java\\n│ │ │ │ │ │ ├── IdentityTypeEnum.java\\n│ │ │ │ │ │ └── MenuTypeEnum.java\\n│ │ │ │ │ └── param\\\\\\n│ │ │ │ │ └── LoginParam.java\\n│ │ │ │ ├── mapper\\\\\\n│ │ │ │ │ ├── AuthIdentityMapper.java\\n│ │ │ │ │ ├── AuthUserMapper.java\\n│ │ │ │ │ ├── SysDeptMapper.java\\n│ │ │ │ │ ├── SysMenuMapper.java\\n│ │ │ │ │ ├── SysRoleMapper.java\\n│ │ │ │ │ ├── SysRoleMenuMapper.java\\n│ │ │ │ │ ├── SysUserDeptMapper.java\\n│ │ │ │ │ └── SysUserRoleMapper.java\\n│ │ │ │ ├── security\\\\\\n│ │ │ │ │ ├── AuthLoginUser.java\\n│ │ │ │ │ ├── DataScopeInterceptor.java\\n│ │ │ │ │ ├── DataScopeTables.java\\n│ │ │ │ │ ├── JwtAuthenticationFilter.java\\n│ │ │ │ │ ├── SecurityExceptionHandlers.java\\n│ │ │ │ │ └── TokenService.java\\n│ │ │ │ ├── service\\\\\\n│ │ │ │ │ ├── client\\\\\\n│ │ │ │ │ │ ├── DingTalkAuthClient.java\\n│ │ │ │ │ │ ├── ThirdPartyAuthClient.java\\n│ │ │ │ │ │ ├── ThirdPartyAuthClientFactory.java\\n│ │ │ │ │ │ └── ThirdPartyUserInfo.java\\n│ │ │ │ │ ├── impl\\\\\\n│ │ │ │ │ │ ├── AuthIdentityServiceImpl.java\\n│ │ │ │ │ │ ├── AuthServiceImpl.java\\n│ │ │ │ │ │ ├── AuthUserServiceImpl.java\\n│ │ │ │ │ │ ├── PermissionServiceImpl.java\\n│ │ │ │ │ │ ├── SysDeptServiceImpl.java\\n│ │ │ │ │ │ ├── SysMenuServiceImpl.java\\n│ │ │ │ │ │ └── SysRoleServiceImpl.java\\n│ │ │ │ │ ├── DeptTreeCache.java\\n│ │ │ │ │ ├── IAuthIdentityService.java\\n│ │ │ │ │ ├── IAuthService.java\\n│ │ │ │ │ ├── IAuthUserService.java\\n│ │ │ │ │ ├── ISysDeptService.java\\n│ │ │ │ │ ├── ISysMenuService.java\\n│ │ │ │ │ └── ISysRoleService.java\\n│ │ │ │ └── AuthApplication.java\\n│ │ │ └── resources\\\\\\n│ │ │ └── application.yml\\n│ │ └── test\\\\\\n│ │ ├── java\\\\com\\\\crm\\\\auth\\\\\\n│ │ │ ├── security\\\\scope\\\\\\n│ │ │ │ ├── DataScopeIntegrationTest.java\\n│ │ │ │ ├── TestOwnedData.java\\n│ │ │ │ └── TestOwnedDataMapper.java\\n│ │ │ └── service\\\\\\n│ │ │ ├── client\\\\\\n│ │ │ │ ├── DingTalkAuthClientTest.java\\n│ │ │ │ └── ThirdPartyAuthClientFactoryTest.java\\n│ │ │ └── impl\\\\\\n│ │ │ ├── AuthServiceImplTest.java\\n│ │ │ ├── AuthUserServiceImplTest.java\\n│ │ │ └── SysDeptServiceImplTest.java\\n│ │ └── resources\\\\\\n│ ├── target\\\\\\n│ ├── crm-auth.iml\\n│ └── pom.xml\\n├── crm-base\\\\\\n│ ├── src\\\\\\n│ │ ├── main\\\\java\\\\com\\\\crm\\\\base\\\\\\n│ │ │ ├── advice\\\\\\n│ │ │ │ └── GlobalExceptionHandlerAdvice.java\\n│ │ │ ├── annotation\\\\\\n│ │ │ │ └── DataScope.java\\n│ │ │ ├── config\\\\\\n│ │ │ │ ├── CorsConfig.java\\n│ │ │ │ ├── CrmSqlInjector.java\\n│ │ │ │ ├── CustomIdGenerator.java\\n│ │ │ │ ├── InsertBatchOnDuplicateKeyUpdate.java\\n│ │ │ │ ├── JacksonConfig.java\\n│ │ │ │ ├── Knife4jConfig.java\\n│ │ │ │ ├── MetaObjectFillHandler.java\\n│ │ │ │ ├── MybatisPlusConfig.java\\n│ │ │ │ ├── RedisConfig.java\\n│ │ │ │ ├── ScheduledTaskProperties.java\\n│ │ │ │ ├── SnowflakeIdWorker.java\\n│ │ │ │ └── SnowflakeProperties.java\\n│ │ │ ├── constant\\\\\\n│ │ │ │ └── CommonConstants.java\\n│ │ │ ├── domain\\\\\\n│ │ │ │ ├── dto\\\\\\n│ │ │ │ │ └── BaseDTO.java\\n│ │ │ │ ├── entity\\\\\\n│ │ │ │ │ ├── BaseEntity.java\\n│ │ │ │ │ └── OwnedEntity.java\\n│ │ │ │ ├── enums\\\\\\n│ │ │ │ │ ├── HasValueEnum.java\\n│ │ │ │ │ └── StatusEnum.java\\n│ │ │ │ ├── exception\\\\\\n│ │ │ │ │ ├── BusinessErrorException.java\\n│ │ │ │ │ ├── MissingParameterException.java\\n│ │ │ │ │ ├── PermissionErrorException.java\\n│ │ │ │ │ └── ResourceNotExistException.java\\n│ │ │ │ ├── param\\\\\\n│ │ │ │ │ └── BaseParam.java\\n│ │ │ │ └── result\\\\\\n│ │ │ │ ├── PageResult.java\\n│ │ │ │ ├── Result.java\\n│ │ │ │ └── ResultCodeEnum.java\\n│ │ │ ├── filter\\\\\\n│ │ │ │ └── TraceIdFilter.java\\n│ │ │ ├── mapper\\\\\\n│ │ │ │ └── CrmBaseMapper.java\\n│ │ │ ├── security\\\\\\n│ │ │ │ ├── DataOwnership.java\\n│ │ │ │ ├── DataScopeHelper.java\\n│ │ │ │ ├── DataScopeLevel.java\\n│ │ │ │ ├── DataVisibilityContext.java\\n│ │ │ │ ├── LoginUser.java\\n│ │ │ │ └── SecurityUtils.java\\n│ │ │ ├── service\\\\\\n│ │ │ │ ├── impl\\\\\\n│ │ │ │ │ └── BaseServiceImpl.java\\n│ │ │ │ └── IBaseService.java\\n│ │ │ └── utils\\\\\\n│ │ │ ├── AssertUtils.java\\n│ │ │ ├── BeanCopyUtils.java\\n│ │ │ ├── EnumUtils.java\\n│ │ │ ├── ExcelUtil.java\\n│ │ │ ├── PageConverter.java\\n│ │ │ ├── ServletUtils.java\\n│ │ │ └── TreeUtils.java\\n│ │ └── test\\\\java\\\\com\\\\crm\\\\base\\\\security\\\\\\n│ │ └── DataVisibilityTest.java\\n│ ├── target\\\\\\n│ ├── crm-base.iml\\n│ └── pom.xml\\n├── crm-file\\\\\\n│ ├── src\\\\\\n│ │ ├── main\\\\java\\\\com\\\\crm\\\\file\\\\\\n│ │ │ ├── api\\\\\\n│ │ │ │ └── FileApi.java\\n│ │ │ ├── config\\\\\\n│ │ │ │ ├── FileProperties.java\\n│ │ │ │ ├── MinioConfig.java\\n│ │ │ │ └── SchedulingConfig.java\\n│ │ │ ├── constant\\\\\\n│ │ │ │ └── FileConstants.java\\n│ │ │ ├── controller\\\\\\n│ │ │ │ └── FileController.java\\n│ │ │ ├── domain\\\\\\n│ │ │ │ ├── dto\\\\\\n│ │ │ │ │ ├── FileDownloadDTO.java\\n│ │ │ │ │ ├── FileInfoDTO.java\\n│ │ │ │ │ ├── MultipartInitDTO.java\\n│ │ │ │ │ └── UploadSession.java\\n│ │ │ │ └── entity\\\\\\n│ │ │ │ └── FileInfo.java\\n│ │ │ ├── mapper\\\\\\n│ │ │ │ └── FileInfoMapper.java\\n│ │ │ ├── service\\\\\\n│ │ │ │ ├── impl\\\\\\n│ │ │ │ │ ├── FileApiImpl.java\\n│ │ │ │ │ └── FileInfoServiceImpl.java\\n│ │ │ │ ├── IFileInfoService.java\\n│ │ │ │ └── KkFileViewClient.java\\n│ │ │ └── task\\\\\\n│ │ │ └── OrphanChunkCleanupTask.java\\n│ │ └── test\\\\java\\\\com\\\\crm\\\\file\\\\\\n│ │ ├── service\\\\\\n│ │ │ ├── impl\\\\\\n│ │ │ │ └── FileApiImplTest.java\\n│ │ │ └── KkFileViewClientTest.java\\n│ │ └── task\\\\\\n│ │ └── OrphanChunkCleanupTaskTest.java\\n│ ├── target\\\\\\n│ └── pom.xml\\n├── docs\\\\agents\\\\\\n│ ├── domain.md\\n│ ├── issue-tracker.md\\n│ └── triage-labels.md\\n├── AGENTS.md\\n├── CONTEXT-MAP.md\\n└── pom.xml\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted:d45SgZtN4Jq1t6soxMe5H9Kpbj8zRKINytn5yDduSAfgNPrv0gaYL3xmw4MDZreqyY9rDQaF/v0/NDjh4qfPAUvIgyjBjTbhIbb/sXH1jWEZvKPilhX7qtLw4UTA63bchonAXJvE5RJ5Mbupq0RHPbdhqbsa6XBDvbotzz/PdUtsLLD479pgpbE9i2257svZnmWmUpGjSbAUkDBjeZZW74kF6UYM1CrlN7P9fJ2shnNi9MpJzmYudv9yk8bJ/cL2NCHJ5yc34Bgg83Sczz4/bW9NOCvQ+/7HwsFd7EmYTtRJuIqrQ/yd76ug9F1P3/RaZZ4Gq+SE9ruHlSB93bYPSNPn6VO05gYlvjuTF4fALdcCTNt/cV2BrqG3EuT1iQwj","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"ab9f64483cbf6f924587ff182c01a2aff4afa572","last_commit_update":"2026-08-07T17:25:09.7965475+08:00","gmt_create":"2026-08-01T10:22:05+08:00","gmt_modified":"2026-08-07T17:25:09.7965475+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"master\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"1.10.0\"}"}} \ No newline at end of file diff --git a/crm-app/target/classes/application.yml b/crm-app/target/classes/application.yml index 42d3064..601c3f4 100644 --- a/crm-app/target/classes/application.yml +++ b/crm-app/target/classes/application.yml @@ -51,7 +51,7 @@ crm: client-secret: "VVlS2GaBdibboTi3l80wvXufTaYxlCHWaLDtJKd9APT37td2II-cosFE_-WkVGIU" file: minio: - endpoint: http://127.0.0.1:9000 # 内网地址,浏览器永不直接接触 MinIO + endpoint: ${CRM_MINIO_ENDPOINT:http://127.0.0.1:9000} # 内网地址,浏览器永不直接接触 MinIO(compose 指向容器服务名 minio:9000) access-key: ${CRM_MINIO_AK:} # 凭证走环境变量注入,不进 git secret-key: ${CRM_MINIO_SK:} bucket: crm diff --git a/crm-app/target/classes/com/crm/app/CrmAppApplication.class b/crm-app/target/classes/com/crm/app/CrmAppApplication.class deleted file mode 100644 index 0049fde9ef6ea80e68596a677b01d78f0ad14ff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 924 zcma)4O>Yx15PeRQCJlk6NeL9_7f4l_Lww^vpc0MXltM*NIP~P*xLdco_R8yR>CfT> z;=m8!Mb)J7sgNV}f#%=pclkDtH3{{Zj`&#EXfY=$P`p-s3*Q$DoG>olb=R-tgp z=qkz#&2w=ncr0|p-v{S1bPUTcl~(S6VX3=6VJHvHRMxSCl?EzUW>_65E#KuyAnivH z#FC*kGNFhk!YY5C8O!cWWenS+f07tbf#xK9PxoPdMw9PTg{SvFXdX|xDFG}_6}jt`AKRZ(tz zeRFxp?A^WyVI!)xy#Se-d?ekOnH~#I+eu4-^|8rqDBmjIzs_H?>HAJFY<$SIQ;D3Y zO!>@O8&}MZ5Dpd+F8U#IXNY;hSkAh0NR66fPL!KjDDV5*T>xVj zG(*~FphOxiADvaYagvN=rS}!JFNM2Kr*{KQ+@Z7aCxGN#x~4U*_Wb|= diff --git a/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 5cd9233..c468664 100644 --- a/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/crm-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -6,6 +6,7 @@ D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\SecurityConf D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\config\WebMvcConfig.java D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\constant\AuthConstants.java D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\AuthController.java +D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\DebugTokenController.java D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\ResourceController.java D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\RoleController.java D:\code\crm-backend-matt\crm-auth\src\main\java\com\crm\auth\controller\SystemController.java diff --git a/crm-base/target/classes/com/crm/base/advice/GlobalExceptionHandlerAdvice.class b/crm-base/target/classes/com/crm/base/advice/GlobalExceptionHandlerAdvice.class index ef17ef8395e4836c7e7ccf35b7103a7ba1fb0acd..b8ea7076f1d7ed2916304535f0361563f78e1b06 100644 GIT binary patch literal 12354 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 literal 12245 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 TWdV0cOh*!gl z(5;2_vg@5zqqC+Biy^0eYwPNRE>hN3rCw?7FzAa*Ck)13qZGxU<2Hv4N453O!wyCW zb~Bk6Mloh1+4iy~#~qBfKUU}O{>LGk=aqWd!F>is^^=&kG1ceGQO^w0s?080b2RWE zUv#iQl)fj)TcVVIOwKZcwV!{PFXkPrGMIk0xL0uCGT5G9JoJuackV-ub)*>v!&;c@Ns)c!uXpz0u0fB(^zru&aJ*Qf(T)S|k9(M<>+C z()RS;qR1u7$eNk2h<)k7oL;M!m_E}W>`;e~{n5>kjIMG!jh z3&Ndt+JVrClL&%-fHP#TEeE@r;}{_+jLCU%oZK(n9=7%&G* z=_0}0Xm{Jk6@pe=d}YJt!Y!4ONMgc*5ST=YP>FufCcTR;=&_v?zQJdgaBT+FeC9q+l<@NC>7 z7=E>}U9&MyuCw6_KBU^c31=|TpJ0;TvsD(rNQPFl@cD{QuUZ{xkY0{3t~ zI?>+P87vE|U^V)sDgN|>!DK;yG*-1dcrOio`>5F(Tzrhy^`EC}>=Eo>%acNn-FB6D2tNWoZp@N&kweK$FvIh_qvl zo69QDpcfNDJZ)}cD`}6nh1HcZ}49Mg_w2KCGf$gNHb>iK?70~xC zj*d&vU|J}knB0nfe14Mr$VWTtPFiqKF;I`cw*n7l8B>@sFfHJm4z35$)o6GY^@f)t z3$vI@HbwL0OL!uA&{}tb{_IJJEShMLMXZ9g5T=-TR&t4$$$*8jLN!2UlW`R)jH>c4 z;i`~(a-G}{*Edqs_Pg)!4pTH<;Y;+pPn5J9WVwzyqDq&GI%+CE%)S5lOu;;wYQK*K lEOLv%Z2^|(U1mmuoqVdrsa$JQTVdCfG=sM6&<;^z^$%zxD3SmG delta 410 zcmXX>Jx>Bb5Ph=?tOp04$cLh$s34q@E3AyM(Uz!{M7tA+LWmZgCRP^u2QJrJ@C!5+ zL{0nw{t$nLadvT&owqyh&6}B#HL^Com`X^mHiZC3e#{DW^80JOUMlTJKwtv`a`ePzX=G^?{*3Kddm<)|LVd! zIv?~p!EWPBAs?oziV!=v?)Jj4{T7HUMaT3UJ;~ZbjyvlkKzb&Q1^#)A#29zSpjSf| zIcgfPF=wI?U>+s@k)9pW6hAV?I9GHxx5iM1%}=CG$4I{;BhYTXFeRbwGLZKS4tO=> zc{lCrPHO*s*#!$&G<}O$LYW6uT(OK5HmR__U>4A-RaQ;7HRjftvjnHXWk8j$K#e6E H=2ia#xq2^= diff --git a/crm-base/target/classes/com/crm/base/config/CustomIdGenerator.class b/crm-base/target/classes/com/crm/base/config/CustomIdGenerator.class index bf783915266db465aeabb9a2b52a01f16efaa25e..289a9a426833b40a0a40bf5d4e06037fdfaabd9f 100644 GIT binary patch delta 824 zcmZ8fOLNjt6#i}!2o2#;N@=MSX_ZRSDrl+CTBP)05p|(c$7O^VL57Spo|6I&8mBD_mz$~M)^;vs11Rtbf^gMcd`-mFCM_n z<#>jr`D-~8)gWV1#{|MEPVY0#1~g3JjEdsW*AavsK%Tp7C3O+=DlRdEkG4^BJC2Sb z7Wf{UPG7+_6<29pCw1z$jvG88RaDxE_pG_aC)qfy*YbDlZEvH&UC9Wfv7)0)t1m0- znnu$%guBeS((RD|3iu!qLs|~qhv>EZWHque!IG>(nGnJhjgV)M6=x{Mb`kxI#7A-@ zjMG;%f|`AdDxoJ0 zI)dgG%=J;Bi65xuxR&HG;NT%}5UW@_0$v58WddHOkdQh<5JIZoBptU;LbAj4NO4pL N^X{M~%BlS>@E?_jdMy9| delta 778 zcmZ8f%Wl&^6g?9=c49lNljZ^G16m$UT#8eg@(g_?4Q*7ltcqBM)L0EsA_WU|Mfd?K zStIcSY>?RSYzs(;HQ&I3FQMFVA}X=)oVj=IoO|vWzlyz%m45#D`W?VsY-tEVQXv}% zLt!wR^=EavRd2iY_M@iL@EDZRUVG15WRPs*FZBJBaP%$C|BpJfFS}ng5MH(3u zXAGQ0){o`m&)U!|5XFF(5AGVeNRYAV@{;5@wlAVi&#)`-M|gp z`@3SJAcH7@t_216(A8b}-kjtH2haa#!ecL!;At@ zKu!!4EfIUk4O&SpWb4 diff --git a/crm-base/target/classes/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.class b/crm-base/target/classes/com/crm/base/config/InsertBatchOnDuplicateKeyUpdate.class index e037d1254a26da87ad612ebc9f58d18bfe97ecbd..739f24aba6430b8983f59c0fc599d5ff7296f3ea 100644 GIT binary patch delta 2127 zcmZuxYgANK6#mXU?!63$*9anN-~({LK{T=qABh7YiDH7-*aHU`ZFFD=hJ4oa&R3Zo z%hY_7r9I3v4TaJy%gRd2-nCl2v({?4YOPkQ)sI%+y&&?#ANQQS@A>xr_W8~}XGi|u zd9IWHbsYsT5x=c>U1`_hSRW`>qvFQI48#e<*9W2vH_vWq3${iDl6+N_b-r0;B{gMr zH5Jp#3`jy6T7!XTur3;E3JN6lLaJufRg@Y?5^!0FNNZiFQ9zpzY7Rvw3D`Y(wE_-b zq%r7%9jOw@NE1l&R4xqM8Yol)oYIz8dtg*&yPq9 z!|?V0dW++LALga*HvZmvMCN^$m61&%avgYr4nh?~@DN7~RV%##S143Z2rf%b6+;A(}RI0XGw5#pf zSa%eQ&2va`L13xGGAviWYyTWr;~FdyjBuc-zA=zJMqrvp?Uz@mjk2HN!UI^R<3aVO zK5mM{Ls&165NfN8EC@A}2E)N9n}SC@*TgA_4Q9#lEct>WI{fD1Mv2F;Nu4qB#%#e> z9gnl$tOE=OnimxM!htr*zs(HS8E$UY4a3wi4u18VoY`C7r2@rPeZ#t0cS}5DhQ%?= z7YVmFHJd6uC-FS?sAa}bHr@HH6}jPp-;H>btHlZB+}uHQ=y+M3PROBFhj3W^mGF&` zq~QP$#-pB1%FL*$Ul?qNj!#Bck`udFUONtD9M}EPD(FT4Xmuc3PRL(A|_J}<8 zQblufu+`E!*rwxWfgDwml%wf5E09SuGsYWS8Hp@vZ^2O3W#`jjM+Tg1SRM>L8xLh5 zRlMNG(@*H*Clc*2n~V`|MvP^Q;H>AnjYH_S-%8S-ql*hbCPTB3PD>INBMt+|2s#5X zi0p%D+i;1QOY9?i9Q{)T9mwRD-3gCC7e)b{xYP#sxWg#!#AF+ep|lHE1H}%)uIU4v zesSmwLY)O2vEGzbCa&7X2(_!#w&>W58+lJI)N8XPwDYaWC%Uq1?~# z{yj-nU}bOOmHfAgYYBGpflS;YknA#V1wm$iEGES4kD~kztR1@v37jA9!Xv;wT92MU zs`D8E DosFoJ delta 2162 zcmah}TU3-)6#mZq|I9zkoPl9fbdb0N!ptxTh)AL+$So299mGJ32AFVc7zhTh;bd8w zR))t)?Ph7IS*B?yV`_G>qNMw6wao1D)I)Er9$MD^he@dAs)uvV-sgP#+xzUj&-u;1 z$6*+{5;_B*2tW55W~S&NGZmodt6t$=>CX1K{q5PVK)2W5KFi)<0EbCIG)D}~;yX>Ah?8tYV&NEv@uEUXPl&@r z1(P_eh-ZinbMywhzU*pmPe5#zGIa?Y*CA01N={=kQWRXzk%~0&ixe*ma;YVqfjJGZ z!LGo;kqM`0k`qOrT&_>XRE})qh#`4y;xq>HzazAOVLC@XW{3>!k}QrJIA+33akP5^ z^F3?ox;wk*@@p*6Ai)9&(=Cuu#4!hR#UZVeJd|+EL#eo=tuhiqhYFRhQsn6}S(Rwk zZ7rDp55Ki7D?F`~O^yW|HL5F4uIk+_K2MFi!(%`$>Npl+kw{UhboCsI(IC2%GTqG_ zjc5`fWsY$fZc%V6M>B2{SClM~qu;_>#3_CLBsbdB0(lrDo0@!vc8=xn3Qg4SW&`ek zPeBKVADwCm7xMgt3?^?+b!WS`wanx51V${IROp=?-D-SM6klnlueZZ*fr1JP^q8*4 zN@|bRZjU?QX%2Wt;$F?M25ZHiJf%R7yBG}N^Um&OZ=1@uo+GI88HsN+uTiK_5AWf) z7aPT|Mtko4*rZ@H#{()jX0&3ZK6g(KgF@zNrYtb1)i9!>e|?^VkfpWN&83UVOX|y; z>#G)&Qw^`~)GlhSDr1mKJKH?R<}jHZ`y(oziFukGDGZ4|cSlQ`JI(7?E3?4e)#Yh( z1?XZO9)BQhnn*I%h$>!}`ro)*hC-XD;{~bqrvKy25&5Rd*ccs-8}J$i6rA8Vi9xZ^ zG({XXU6jl?CALM|C&g&dWyV1Qo;BbNoKx_o+FWmmq38^WVW&82Y7t9gW(4(khe2y& zPG%?YyK3Fv<9G!J^%$Z8+fvtg={i$c9|6o*OPC8PW|-q;95&-HZG56`e9Cb^HTs+( zjyaQiyW0M)Z*oy`P3;n!U5_ux6C*W8kFSYa74;1z)r-qrHYN<_N(*&#mEZ5_4%f@m zqu{dGV0OqqQdYz{Q=+(Fjt=VRr;+HzKZu9O?Zc#LNRP+1F?uiQkBrgRK}&Csnwu>8 z$s(U@7_ExKBAtNtXqaR>%?3IE66q}_L6F2pVAz32Nn>~n!NV%u%#CoHYO= zjo3jAP`iB)k9VyTQmy(80Uk*xYt za5tVnD`Nw={Rmx2f|`p8#L}Ebsha`|(kbN`^g{+6$f2bOPKst08t6M~Los~|CFn&J zHeo(xz8ZUJJwTsS2({rvE*r^JB$1Rg?8L5ca)+^-BsJ~Bcmhw7^GvdSimE3Q`)WK* zl9qTY@eE12Akn5{4~YtqkH@okjta4t%;O>?JF)L7@jlvnp3Y1X`2%?Z`2b#^p}~Io z)~II*toB3`?WjGG##yjuKT)OYZYJ-mQYoSRf zX5@k1Y{bK=h=)94ja;QKgu6$svf(_&(|#X~4Fk9@ge@ccgxE?_IO6T1Z`|bI=mW?b z<4=Yrb|T$MMQU&quhQB?59Ju`h44B~;|zuIc0@lP(ccg2AK*iL6gl}ga`IUi|3!HI aDm;G^p1+L?FBfr%9H>9c_xJ%n!TJ{*%*)LH diff --git a/crm-base/target/classes/com/crm/base/config/JacksonConfig.class b/crm-base/target/classes/com/crm/base/config/JacksonConfig.class index 68e81698dca0bd4ef196295f9950a460f5a5d87d..f048199c206cf15c1746563273aa410f8eb66af0 100644 GIT binary patch delta 1142 zcmYjQTXR!Y6#n+f$vGz{JC`0Px6&5Mtu#qvu@op3iEYzcQm_q`RBK5|tZ8#8q(xCN zs343p;=pX5X`a zpF9Qd25y_s?)L28WOpHhN}eE_ZQ}u30Cl7CZu5uJSLEOh&TVJ%fYY z#bS4*A|U%>ss8D+u~e#mY}A4jus3jgoEl1QIt~a}8@WbLzLZ})CE#j3JRzX>ma{n< zE^L(uqD~-?$d_`XOGWy_TB8@9VXuuQ>@m?S&_W%0i(6tZTJHWhU_0E&eu)D(NV~*u zbl)>&T7^t;CYzxP_RqUbv*%CmZN%upaTCYrp%&-h z33St++5;f5MsbGz(ZA8(7Kql!zIQufoF2J{jWLCvxM#$Tb845qXLQna z!||P8Pkv8g3h&bcTLGx)Pa9a}Z!D6fK7ciSqq{8Xc;XR8RosoU7fbpW;_zJp!C z;az-F!~d||yeg(LGwZxIIM!n{CLAx@q~m8h8VX0AU?1>^k2TcOw10b5F}JNJFtZ{y zP>(}sl@=2yqR{bA(rNb zddJiH8sh2DDh9{X?llah!>bq>UqPbEz_SWCrhus$@SFm^Qv;q?z)1$a>sTw8b}l|f zZUyrj0(G&f;0GeOWDgg(gUj2;1-2uCV_foSR(6D+!~{Ap&CwZt5wqxgC1{MRXUP_7 mqFrJt4VPa@T48^Y|4R8!8F3BQ@ddu*i27o_!cE-5&i?>Rlh3>W delta 1238 zcmY*YT~k|C6kX@$=6>abhKo=GQc6f95Yo_3S_-r=P@pBWme?9;ErCP|Aqn9^wfK>0 z)z0|f44(J;7b-JC1w~(cah&l%eRRe@;e#*gKFL^UX6`v>oxRrHd+mF(+4ghWz)%0| z>;V|WBMS;#I#dofGzQ;d=3XYYlqt@~uFfvz=2jWBfraA2>JWn~+;u~TvEdDN8L$`{ z?$a-tOh&WWqhn+Jg+jmMSm5yLsN*;UA45R=sRYCsWi)KSX0Y}Z23}w={+HR*OcTdp zyeJ+izXo+QGt}+3GEpkdn|KMWI*xF(;V8p7alvd8U#rdHH}y(g03AAl93i~SkPye! zgjjZeY4{Q5=t8$RthK5=3{etwh;QANrsEhxoM7`8x?eojd_0O?IfLU2oncXS1r2HT zB*S2h6f#esSI3!W7meb!?(?2TuY~~4arEQ7Sl2&O2N_}{iBX9Q3?nr)7ylX_Q8b#& zA(`csXSHjAJ;OHRGBEO7pw&BEOFzajj?1FU{M-m&f+LAZ@x57Yy2juhO{OAeEnLTx zjugjhxFO6AyMJ2BJZ`- zPZ*9!P;uzvn<$m?Ys+XStwJA(3w})F78q_5QeYB(^8l_VeCGgeAO#Hx8m%*=h|$hy zcXw}teN|17p;d-K(pg%0jexldvIH4&c#A5{(78m}RN7l?^C>(Nc0H|0yMflpNKbSJ zjldHME08(uDz%+*2PkI;;ZQYycP$0xs_8Wn&EqbWk$;&5Iw{07v531Bs+OljvbiO| zXUWmgd4}$Or+LUu%2C_DiIy$2Z=$ny(7r}JT(vfYPno7HOaXQ_z zjlQWZoF(3X73ia@8gYP_EjP120RPWLTa`#Fx`86H>53&LcJJ4qdF$Bj3v! VQQpG`^n6G+7TtV=kMSw|{{cUt;e7xA diff --git a/crm-base/target/classes/com/crm/base/config/Knife4jConfig.class b/crm-base/target/classes/com/crm/base/config/Knife4jConfig.class index ec9eb6fab9fe5c4fceda4204f4a44ad501198ad8..08ed060b094c8772556513980fdce99285e618a0 100644 GIT binary patch delta 828 zcmYLHO-~bH5Psfn+g+Bog|12gEmSC<3T;IMwNS7Ef+7kDQ7josHTcHeG@P>|y|0k;NNDF16HUX4bMCe$&M&Kav|GqWOCC}?4DMcX6o5s`C( zVbQUjBaDdkj3u3?7&--+Z<5dY%RHVayegvTHpj3q+>?Nl0>N{ZM`j%g9&d+@=m zxuoX=r4+|4+_t)1&x!h7j(gCpFRql;C7bJ%P6uYR78l&4WwIPl=rM61lAJtY(u}mL zbsL_oBBYF@NC0iGoFv}^zz2;ihC?_^MUL#FDvAi;6SWaJsRI1d+o)PEpqlhCEnuTo ztGCghHQQ*l(N;i|0v(!Sh($ delta 806 zcmYjOOHUI~6#ni^J5z>Rq@$>yMar|F(n77svmo*)f;_As)Yni(C=p7AiqQ=#<4Uo) ziF-p_D=vn_CjJ0pT)A{BYkz<-o-3NTxaZ6{-*>(_kDq}bfu2vlK70hwi)8}}R2?1; zFEoboRcp(NJh0Z6Ba@4(b|%lD^<>wx`920U+&rtpC!Vv05?vORGSrHftWtC_$GD zTlb-o!Q0jvZH>yRQyixyMc=ZWO@a;RsOC6>8u3L*d1@KrV#CuSrc}Qck}Wk9{PjT} zni%{85A!QIC;P;bx&}gM=4ioLv8pckbe!jCMMQj79o8lip0E~`*7=@Rw1s?e!WAp3zililIY1LCo_%ooD|$7KwP9q*&$ z5N&YLwjA4$nj;*e=%mzUX2o8!eHf#?j?JYcHqJ32F@8uN&N*vV-ar(S98;JUliE{i z{5nSpH^etBT}XE6)WKkG$u78GMO@Es*V8othAPZrj{HrE6g1MKtwJL^PnigLM&8@9 z54QJ*vOreCpp&G@@34Bt+dS%`!aV7s z%0;k<5FvGDql>VMb45fcY&RQ=h|xz}<}bcSmy3S$ii=@0>Ef!3Yc6Kqk-h@iQ#*A6 z1W`^muRskA7NV#c&8Wiw4K{)%j3bO`%A}C2r=sA01El{BaF0afcoumTi)0mK@GrYW Pu}#k)MmHVeet+d}Dxr=e diff --git a/crm-base/target/classes/com/crm/base/config/MetaObjectFillHandler.class b/crm-base/target/classes/com/crm/base/config/MetaObjectFillHandler.class index 975beae9a6b1c477c534143b13ed17bfa32bf828..4a1de4b0dd9df026cce998d723d6a20ceb3d778a 100644 GIT binary patch delta 1296 zcmZ9LTXWk)6vzK-TUuFB5=S%_rO+6hi)A}?fi^8PX-gAY0&YV{;{fFn#Wq2~HyovH zfRd(kpnWtu!x!L{mxP&+=>rT8^nq8N7=~v)1OvlaS>uvuMmoD^&pG?s{~rBh?OL6` z{`>Gp08@Ct5fbw(V{t?nVr$L~CtG%^tJ%4gwNk<3P{nCwN*q-z(NInu(^;_5wrKjDE$&3uwy2dTM4@+3 zb_>}kwWdl|C##UB0|w1HX=am^Pt;`l==vTAjA!=n>=F%61;c%u zzB>L07P+R(^W(wlOTlm-)2Z}B%mRD3A|b*)x7g8>TM{7E+9Uv=?XZAr1ft_2{S}J@ zGmIqiSfa!?DZT^jADrWebDYOp1 zb`1TG%5GEHZK|Pw%0lcg75%%1sA3`60mLQ+tq@h1>@W$nY_5=uMX428_Yr!?S@xZm zUFm(Sl<5mJhAxt!ms%l#w10DbBn=g7BMzgA8u_G1)LIGgl`&*}O2gZ@gS+^G+_EX} J;Y-|y^&kC&=r;fW delta 1257 zcmZXU-*XdH6vw|eyUE>bZrdbnX_HD@B(2$m5>zNf+VUHT6e>=9gdFYCLx0E%-(bM+;i^v-0!`~TH@D4 z{y-LmVCGiYh6V8TF{!xV@> zFm%byV3*7U1|zL#qC^xl18PNx#X@+oZsY*3p;>gH@dgs<1 z6s#9g(8NyUICcrViq{yj(&kC|r5=+%=(|F@1@>TA{;uEZAHhD3Hw5-$lp$W*`;zZ^ zxyc3Jt(0v~`oY{u#X2r_+OUv?Lj7@K-l zK4zoxUhrNAL%V0s&y?(xTV8akzS@)YLIrt-4~LD>qE|b7`31ilYYXA3iDi7uaZTVl zZpe0HK#mztwJ1K7z2WZ8wjfrNS~mr*z>DHGLpm)l@qvI(6Wy9Q<-f1SXbQGv5v$P`F#y{1KUmyJwk#)uf(mP#%#9XZeS>reSp`2b?j9T z8m8qFGrOYNXX-5)?Wq}xC=rH4XE z)1OPFdH&m|w|c_y_DVu>n0!DqOIJ2Y=n#^<<;uaNi$mip!5 diff --git a/crm-base/target/classes/com/crm/base/config/MybatisPlusConfig.class b/crm-base/target/classes/com/crm/base/config/MybatisPlusConfig.class index 7c825c16e5f328db1e8a3ab80f1ed2e94d0381a2..6b456e11163ac34c869856922a9b5871b473b6ca 100644 GIT binary patch delta 751 zcmZ8e&rcIk5dPkFw{Le{Y%2@3ih|W*f4Ybjiv=rIQKVR_0`^$7A&{mTTJ^};gNM!Y z&Q(33CT)a-aPpwW|G>Y&gI9yjYl#v!d2eRE`QFSov%B^;yXW)n<~D#ylsOdPdZHc< z)eVLN3~K)IqpArH3=0~(V#o7EtZP4s(C1D}8#WA%!wj=-F5$Mq#t{r~9A${Rxsdxi zpjkMEQeSd9VD=EnJ!8Sah8%+!6F(%TU)Q1;p zKNGLK8862bhOl_!4QnQ*V2H2YRo%o4W;t$(B9D;d0_H@Mf6w~7xWUjD-PgVNV5R!7 znT;*@QS@mD`w?NVX6p6oYDZYL!7$;yUiVZ!r#%MD6dBEfr>E;wUWEoj4 z-iH2;90exbG7Z=`K)2N;knN#}280hP{NyVLKyE>@d&$azZz(4mWwv0K+vuN5ZXsBH z4=2>dU<+XihY638oA?Afku0|mTiiqn_=vL#k{k3`g(;pJgKM(=P`BJ(dn$|zbm;G3 z1mn0!BC^Elij=tt%1siYgZ;u7ry(v;q%lfK^*LOoC;zJ+B}`7NZ()km<)sJ(^Z!;6 p+qVjRPm7AH9on_O<)$gVPDiS_MY?aJggdxPh)KvjEZ{yue*krIaS#9i delta 808 zcmZWnTTc@~6#iy+yR$3{l)79hC^x|tT8jvkizpRuNC8n1D=#i}V~VBKUVJmk)`zwH(AItH0InV z#Z=B+%w`sg=`_PYAif`#b}|oZVN=2XAs=z-vv30a47!s{x{nJC>w$POyBS$`vYRPU z(h{8~5#R_~7{m~@`qw_5$``~hElfucX6P+@ZE;_3BuXK90>kBo0B6uI78Ap2*4=D z$YO}%EVTXPSENrvY&DFZ;NYW a&(V?-UMDWgxP{wTA;cu)4({R}{C@z=X@j)@ diff --git a/crm-base/target/classes/com/crm/base/config/RedisConfig.class b/crm-base/target/classes/com/crm/base/config/RedisConfig.class index 154c7b831dc69663e1348005841ba86b28689e5c..59c157ca75c3f8141653a2c1c4a410c6911d857b 100644 GIT binary patch delta 563 zcmZuu$w~u36s(@iWU@?*%ecqHCGMj!?#At44uU9xAnHLFu+>07nZ$!$au!dazra6G zgaizVc=R6>@(Er%im#I(2+pC3*Hy2&nkfg%!TPuF$7cY`Sk<90M8uO4ap_R=t-TEl z>e|^6_rV3P0S#_(qkM>@_T|>m%n%p1ERsJo117vam}oQ5j*fiJW}$pJ>FI=5M}$Fq zD&69R`NbZK2EtWquYo>9#WmZ_nHVrIh$w@Z;n{UNbGpGVces-!T-vZfiWq!)b{_e#0*TpO$qjKmOIyJ|^jqy}0YeoWwF(%w?r7ZwpP1BRX<1;p8dxhp z(THP`uJjO2k*c5>{g}ZlZG{oS9OkLu0&U9bRab&si*%yVpCwYTRKexn{wu%_R*hQh delta 563 zcmZut$w~u36s(>l9b?D1MB~21UB`Wo+d&aQ6h#mO5e95AASjb~&`ZvqB=i^f2Z|8E zfQUzbK@jp29>v!)A_xw2J?g!xdOcl=m12pvucv1Ki&&1pfXQJA*a+pvlOc{U!+p9B-FLJm*Z#< zXheb`o{`ygH*>NfFL$Mvc2Cn+($nG10xeolO@cl5^g{j}w+XcCaovyqA4yW66Cp}) zkF(O-_Rh|wmrcveuC%fo-T7#eGgvEUM=~!z9$f34sTKCAQlW!f7d?Rf3^4r!ggwMY zs4}Ydz$4hbKkg;eW1td!gdz~29|Ob~2I0W+&94+@Q!iBn-+x5erZZSTq=*V4m0Lwr zQLRZ?&QJmI7LD~zgH=G2kF8Dt9nKxuP4ucYK9bYRCWFAAWfYAe4Aasu#_6u3w6GT4 u7$at)70s9+hlMF}>T3q7X;RHl$7W;(X6YE1qp0A&=6$~4MXpbbf}joDu4B^c5sE+n)jK><;zed%~T;EmTi?(Uc* z|Dumoe?arXLn^gY%0tw?v{HXl+w>dna*LNpm0)+y>^a|@^PTSu{Ppj%=R~wj>lsQg zD%rAa*?!xq^FUa(^md$GYtwFuM%NXMEgrNseAyAcazv0JgHiqg-{Y3cyJVaR9RB#Yi*G}h)V zQI(#})t8O}t`{ioDHMGzj;Ma_aKMt|IqF6)oo$`Yf=Tbvds+Gr8M(TNsBcqteOs(L zy0a5!$a7w+kI{G}r|lRq6>HMpwStb;=8o>vL+Q7y0R0kDJ?;prD%&0D2~VNxE3wXX zDV3fRB_1iOb2J->)T7gdLZRE^nE_6^PyuDj_dQ5j0pCs|r$G<``r^PUgEhtt_BmK-SUJ20@M~es@J>+}3@N<^_?Lke5t-1D#nLZi{)AOO(rD-rA?Z_edWj$#-ZotvZynxz8HP0=NkUjTFt zg_nACXcDea;suS70TLJk0eHQ@^Vm)>Ews5<5ia11)>}>|`Had$uTo+zN{Z}j-t;;;06arlE%avVfbTG$3eoI54(fe6;1kKmD@kLfzzLs%{1T><1$fd43Nz{tY* T48JRM8f+q>nGHG*Y`aSfLEUzlR)i*VaRf;}7HJ3`)R5dbDwOAn}9GdP~`U23_4sy@NfI_IA+_x-^>aqALyZn|$x&D!f50V=G&1Cpz%W1kWZH*rWEoRAV-jb} zG&P)KQ38f({Y2b^{R=H76n?pL)hW_7Luhi>sv?cCfs{Z`y@xG%9aj6WMt{|2D%nV0 zDfu`QX}AVn$c-e9T#yak8t-m*Vp5w5rRj7h7AcJ7rZ!<_cF{gJ)p@)iUQ}8YL?!Hb zjIgnecI0T474BF97eYm(482hH(F%<+2tf%T#6IWz=PN?gJm=`a;^l}eSIm|y_iz%} iruV-b(Hh%i6+5!W!ID-&ZyB(?8$+ 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 diff --git a/crm-base/target/classes/com/crm/base/config/SnowflakeProperties.class b/crm-base/target/classes/com/crm/base/config/SnowflakeProperties.class index 68e04de16630f16ac597635ca5c934fb27b1724c..988af8adbcb3e760658bf665111c8b93d8314d84 100644 GIT binary patch literal 2304 zcma)7-%}e^6h4<^lK=@p1ZoRyi48Uh$oiw&A0gF}LK_T~DIGeaFW!U;Y?JJbyEn9b zaK;&5eDTc(^$+j~XLQCNGktLM)xXJc{7yDN3ae!@yL<21v)}p7ch0%_>z`-86H$ro z#c4p$<+^U!b+2XDq_6C{cDJ1!d&AX_x0|w|);--;o^g~Pr>LOOM{-ZvP3i8~AJ!hJ zx)GFkti6WvDqDiYs-WbSG_tN-6PSi~lzDjQ5Xt4?GIhV>8mFZy?w;d2wWhk|y4pzN zXxA4sR&DB5O*ia2%2l2;YO5$HTGm@?kOYk+$)cE`bk%Xyy-us9yay5x{GG1L=BD%< z-uH}Av+DpeUp-}#2$cro+kH83)QKd;IqI%?eu1n-lDe!ooS(K%G#|<^UyJf>-t8z2ANOhR#!tl28Tt*b4u0Vbl|2w+{ybU-GPU(4*+wqd@^qtnI07=Lu?o!CLSS zh6%m01T5cpvK=&yKSZ~v9H%8g*`ty=?w)QaJ5V>!az)mS_MWoHw*`IE-$Xs{0PwDK zx0=e&R<&+)+QpN#>a#re;R9$9;{I`;e=zaI{u=fm%CgzqaEvOZWAuK4?g$DyL2?Hj zRuc0w{T)^kc^n)S7xP|jO5f+h2Is`=2}Qzkj8j$6h5vU&MFK%6gGq{@T?g>PLDF4e zwDIIQ$Ed+Rgk21~VLX$#Y}f>zR^ew#{eZ;)rEzB$qL*kC_hjIJ9nXT`Nqqs(`00Qq z=?wTDXLJKL&LUR0_zR_e!s;ZYN!XZVK#5nJFXjkV3x@!BV{%>$KYm(xmhlii-i1F$ zQz7iXqG*?WX|C`+S<(HuKS_K?R%Czf4-#whgwsW2EvCwm z|4VM`FtUYs9Jwd=Y*&xVpmDOlK8J8|fG&&{7o#Q4dTDyJxSPq0&V2U8m!GgDbJb$g zq%~>vjML#XuAs0$>d}bM9ObD18Wx^&SaI|$%_Cxj&co|KD!1*xXDMD z6w`P{ZxH<$DnKv-BfZFiPw2Ae|!yJesg{ s4?arQx+JdC4F*G?BA$zYF8Oqm-oqw=%`&bPx{DqEgI4GRTBEc70=oas00000 literal 2300 zcma)7U2hvj6g}(jI8NfE%~u=R1X5}{X_k*dTO1dXG-(~25;avS!3z^-5^rPgnB8&O zJ|H3S!V7Oa06&1IAW?}AsSgNV`ArCM#_J@DV^zr7-MM$}oVoX$JLA9pdGR}d67HuF zK{Sb225}@TWFLz|Vb_JbZ-2D&SXQ-##G>Om`nH8=F2CJ}6#9}#XV8y~g{xK7u&Z9f z-VwgEtIFMT_U$cKJ=v>^1G(v`ru4KUeG924$~%x=dDnuqZcqj@7%~u-`Zwt>ccE=ghHHT>V%Kzkw8(e(Qa<$WtW%tnW9YQU+uF^s~OwR05 zSB)KYVBeLl^n{kXT+;7{35ey^^V?K&L+YB^-4vc^ND|D&LyQYkL4BnmnNyZB*k_2g z5Ldb;JqrU{RO(&bO`OSQbJTyqS+6FpjM!6a;9vP0Q+55fu+R zMKzkrWe<|b)t&IT0Yfw^Q5o2(zJYwDo~r#ekV?%>B&9kDOuzBSn!X}1VvdU zmaje04Ak+55?D%O87oQLF-=JVXHQjd+(UIB?SQ7BPuE0MEAN?wZ^P%J6BvNr6Yg$Z z`m+_K4qDA(NYzdkhdlpT_>g?`2>&D$A6yK@uv{I86;ZEmIa(G|xND);MUXr0g_1Qt z9qxsamFHbhcG=M@b>aKcPh#D|l`};2sxOI(g-b6Fr6K_tnBmP3;SCVskGEKR#H)zk zKCp+8p#L(hB}8chLxta975aWb(!2(qw--$FJ;(rH7%_}<=>-CVFzqFH6|d2n<&&W2 z3ctKi7#Bd>{F=CU;b$a&VdORWdcKsQi0quxNT<0@+~#lFX{ zsU}gl%tB9V3{o0yr!>Y*O_D)vW@PBIkfS%wD+t-Hg7dxMLlnLo-l%c{KXeAZfODPf zzorHz`_f$D2gGAXbAKZBJ>t=$xj&HFm@oW_Y}@4E{5+p;zB7}wCTL9rR_urX(U1;7 z(bEC&Nzone6oEGhcr7sqswQ zh#S{foW8NRaZdG4<2td3)FB|s^54W;Oe2mw-sUKRG-ba|3ZlHchVhOeqpK0##f?s8 zH>s3q@i)nEV&fZqlOw diff --git a/crm-base/target/classes/com/crm/base/constant/CommonConstants.class b/crm-base/target/classes/com/crm/base/constant/CommonConstants.class index 3bbddcf5c8b096eb572ef81d2a0b3d2400dc5389..453c37eb60679ee8511f4ab6525038e0308a154a 100644 GIT binary patch delta 224 zcmX@ga+HPl)W2Q(7#J9A8I;%=m?qk2h_N%UFfs^aC6*=X=OpH(>-#5Vr6!k5OtEC- zoH$R3k!Rw;7&$hZ%)HDJJ4Oa(4b3n{1{UZ1lvFMTW(H{<25|<7$x4j%^*}kGv8)V| zK+ML#$iNQdF)?re`CLeRZXlnRfe$Xv59A9X@r8hV5e8AXycm$h1hNB2O9D+a2GWcm Wd$hJQNNogLAp<127$z$)sR95($Q$$k delta 223 zcmX@ga+Jm9)W2Q(7#J9A8I-sfm>8JZ8CZB2SQ*$D83eKt%M$f-67$ma{gbj%lS>#G z*laTMGE3|j8JIOR!`K-(Ch}@b^tNQ=o!F|xC@^tF3@eLseoE?OCC2)CcA#MlK!YS1 zI2pJY7#X;MJSGMnAfFG3&ky7aG6=!tg@JrgB)%AsF9F0b{Zc>{6Ucc$S{i7gF_2~i W*`u|cfpH_)3K<~D#V}ccNfiKA#v5e- diff --git a/crm-base/target/classes/com/crm/base/domain/dto/BaseDTO.class b/crm-base/target/classes/com/crm/base/domain/dto/BaseDTO.class index e23f88f3e583997d850361ec9dcaf3985d2a74fa..dc5ad9ca097fa78c886783922bf7352626b0d5a5 100644 GIT binary patch literal 5411 zcmb_f>2n-M75}yNnAK`@M7HECb`slB99_-&M339 z28SyU&Tu81CWIpdYz|W#g-u8S1z$oHANfQTpZLT-VF zu+QaBt(`YZo`$r*PQ|sH{F3QfM%8-SSgV=@*VS~zbnBL5pPic(5Dy9T&Nz16Gi-0g zs5ZQI#n$^SlKU=M=WN4kxIEv~;pIXr=EyCz9$sE99x0CTTOc{( zl+7OO!JQiJ5ZJBU)&4L#?!sPy#5vPrkVe}aO~d{zLG@jl#Rv{)xJO`5$<9|A9{rFn zIj)&sqdW3P`E{1o>$n%A0(~WC^WtgO*)(0xGV20`z?N8=6k9ERBE||LIkqCuKX2LQ zVxzWZy32kV4XP-v7)&juRlrPo6^mQ#o9~ddGIsSKHUf9}d$#u$p=mP+ay-qVC=PEu z$i>a@F#B(%){h;dprSXhV0sm&eA;l08WYZ?4Jn34rS_Hp1-ZZbOoKTwL`NU`c{4+N zaFuq4Cu(z<>P@NVyV>|!UFU51h_WVg<2!4=p3$Y+CmFBk1QCD zZy6dOm88w58b+0&+H$BMrN$o5(#FSiJb_1yWMFnAW=fAg3C^4y ziJh(|nE1zFF9^%zK72;UXYm~UdqFm{Q|kf;;;9e@y0z8~vgdtX#~1KLfn7CY!(>-1 z8Qvq7N0a>i$gFuLt}IC9R$c!uPP{<`o6&uTE!*;rC?Bs#AAecLm+*WyzKXAF_?o~- zyAo{Ljaog=fO(DjG15A|flE}jcT#XTROeT63tyIeKvBlC{4(b$Z4w$=b`S-8xO(FPuGgl+OAP%&dvt4o$= z7W>oqZU&bH76ZFSt@4zZ+#98GG*PK6XHhCQCo+}gEVv6(VvLTQv)M&vsz$wT);0WC z;GPzTwR3@np9<6E(7V zsF7WP;~>`#V;A+^uDCgB1U$|YQabTl>=sxUpG^E7`(DM}lfNK0fiZsfDZ~Npe=mF3 zD8|X#>#xEDCOMPZ58^)VprHqOyqTxFpWI=NzU+ZW_7?KqN^VMU3E#4^c9ZoE(rM1# z$x$9GPg-zHjsF^l`(^n%bTsc8Ly(rnjevO{RmQ+3hJ} zkLsZ4#P$@iDRxlw@b(lfV38?sbJPk{E<>IkpSXrYzib;eKPl2t>ZDa7i!dqVJ4xUa zPIpp2wO#e{enjf~l=^q$Oegiz+f^^GU8H_MsbA`R`q}NOm$x}mKd96%cRu}z?W&hW zB2vFYsXvRAPR@CFyXs}_iPY~@>iI%zRo|6l-pI0bV`BU=Qpu|me}Z@ssl?TZKSC@_ zj$g-PYD(hC#Yuh@k_Z2co?P;E+;#=}!Cdk>-WwuT3n@ZY3+Y@+V$!c;@Ctf!sa!e+ zS}SM-trapkO@cB3NXunnpmL#`pmHIb>z1Hw0P4w~N0(|As1g36{mb zqDCr-6SxMOR0<3DIUG`HVxGq)DGe^3!&9U(c!4@xQr&!Xn5dJ=;yT~N9;qJuj&-L& zO2^;Xj4qJs#Xqnc?66VMl}6;evX+*6A(xl|}B7t%_Ujzr8zf7Nl|n{|GLeWW%2j*XC(M(+1%deqyn+woBQ!sSm+?_j^7Zf%o}o(;xEs&n zW2BNef(kxPDuu_GGS8AqGYKBRCrD|0#qPoOCcSdVIW12kqV(K6N4PF@k6~1yE y-@Jxc`Su@o^1AKijgCL8`lAGTN!_w<<2xMX6Z8lC{18_-lRu_^grDFla{mD>tu_Gw literal 5400 zcmbtYYj+z*8GgpPtR$};)v1#xaT6zXQeP|5mO>>vGjIHA z-4?igcx29jRWx%gyRdp*FWGqo34wImykyr6b1j7wx)rD@deAE{P%^XYP1~|6*^*V) zv#YvhW~cdemJ$agc1aiZj6Lngi2$qJ{7xh`xeh! zhXvx3hH2O*xT@iil_d6HuY!FlGT1LLRI;ksQoWj8)f#%XY*jVG%<5*d+Q=^1n%!*7 zvQCQmg)_yIa{|Zab}}HJ;w%Fy?!ZBT1Y^0PRhqg$|CWGGGdv7QK8ZmbR&Yecofr~0 z6gETIwzAW7@znByfKt{gx~-Q5b_XI7q&ueKE({BF83d&RpgGH2b0!>BF@|x0WT~!e zwpA|>*cSkL@s+;ats;xJ38WmTzHC&vl#GkD*~rdWC9QHwvz;!7{T>zfI_%9_nRc>E zqPMHK-yw3Xk|;&kC3sS$n7NlRM%D3oOGusNNku%U z;-ut^>yoe`N6x4?CHEu6k*C}MO7m$I58+_}mFAgtEVgRji-yEMqT=145_(#AFCYh6 zj)a6nj+e35 z!Ud_Ug>zJ9Sjajzw2#@~NfqzI`vvw^wGDm7GE18Ms9|#kvtetd&GYzdkjx2cC)59J zX$dx%WV}Etc#7%ANiv3&UDE4@RxzH@Rx1oay5Tfe^m>Cy>ulkafOv%a(Q@B8YcVcU z{t=9xZOxjtVP6zD?ky`k?d5}xc-c-M>IQz-oMGzo&FZRNUv~ZIb7a4w(Kq_#8Kd^P z!T22xO%s7boTpz6Ki%Hp#_}!Pk}CEV5Imv2hkLd&zErdK7E82Yh#j6i0X@RQ3i=>y~`sUkwyR3+5ft z0go)?jJ8<)v+0g*pGam7vU!<9U{BC5U&?e%Saja9*X2E`NI4A2B%E+8PE~b`eh%+( zd;E5<(;Z05yIerf(uQ~oO9wEX$>nLbQjLJe6SO!yu0bXp>cHg*ntFHyW;qM3O~RP6}%#o+mCp&x1T76dBNJyd7;afikt6F zYb9QKObM5R+vovZ(uXy(T+tgtbC$KytmOmp_XHNOY#F%B6Bq&yzFxco6ihfC#f(;| zEE%?*PvDBcytnRQqdXVZ%?Mg2m@I#dBkQaTBD&i6#P`+ zXh)pFmapLF0tasnr5xN?;V`eYGz31tn`%Eatg>EWHts^1AHGbSI^Q2o$;X9L^2Okk zd?Pp|UqdYWIQAUY5WzZIHp_^#j{RQd_TuPxYXK7Dwgs zx}4=nsC2bW6bmKdt0shKWINHmTN3fP6GAkxooN3piTM5rAv(UDXyBGad@qF%-M5|S z;4O*xAPgZow4ErpYvIAZh-auUDTW*g!ANAJ{Cqlu~T|^f_?gI2mQ0*-XGs7y-W-~{kOd~_4-=g0Y#i%$F%-I?g?xa}&`iA;18?`k2Yb1_1ubMZ_}V&bo( z?<#sSu}nMwn$0N$&E^srMS>C@NXaAuph7N5P$8GfBqb>2fs&b2094F%6I9HpnQjSE zJrHXF&|PqP+75x>L>ti_4_5?*9YK^>pr-x?BliM*d>Es1YH$LCl} zVH2nEdDgn|2Rw)`u%_alyw|?SS`Yq(1LUdkrg@3}&Y@pP+(55_!8fo+L7M*(;tlL` ztI7YV+R6c!wh1LFeO7=jt5m8%G4oMgnjo9y{*>_Yy~Bn=Z- zm(0;gl3q#YC! zz7fC5S{JwY+xQwo65)TkT*B8`i}K=Krv#*69;0L~vleH-?!h-%Q@Hhe@iJ>tFc3$e zzDYxrn=S-5ny-;JN!D(6NkczkEkFws-D>h+@c^ui+-~*2%2se2AJX9sNpuWpj|%Ve z1}4J>w#U9@H-~S#!@lL;{`1ar2N;s#;%Anh!mD_cMUkIHw>teAo&dIA#jd>F2h@|LZEdBcg3^br7PO^`76O7$`@+^A`%^!k{?yM$vHTCT_In?*J7E{Hem+gIJLjHz z&i9_zJ@-yN`0x2kMAS_ms8prUT`4E4r*c_+)NoBb?PLwh)=k^9yxsabu=+TuQb?i3 zUB-#og@OnE9r6uOmjEk_?RbC!{@o-jr;CWKu+95HjQ<=9*MdlgbPDpc3w z*sf>T-iVROn_(EjeiVhOtTdF8#U+xCJ>I2Id`lh{WX%!FwE(=X>JVT#i4!WLcr%atM(o}Y;$I0ZgHc&#gk!9gYaYnB>X4w{VN1;Wd*0^PR z&G0FU1T?Ss@Z5!~hu>I%l~Xy>@SI#fLNqTBq9HG5@gS|L$P*rj^_H1ov4}~`9W3sl zF)Nc%NUsQnBdmu4P$K=ChWfS)E7US=jn4p1FffDzq%=bM)C^hUh<`qZlyt8iPL#^5xhd-E;o+_|U9I>=$@MsCvzER<36&mDXbIo= z<&Dv(i&iUCJ#KnvH!I7SrqY^O?MZBm7=4M>skBz1rj)HuIBF(o(U`R=;hq z2}7ghKA@Oj`=8CEHELrjF)Y>V@An1%I=pE79nZukH0q?g5hGW`XnwG|c!*fpXqXN7 zxgaPMsIEF+OuE-3<;r;HqZYhEaG+iE1s-5r@L*wZN#6km5-}go8yRGImQk{#S|5qQ z$7zkeM%bg#lwtQVX~x{G(L=N)M%DBUja>2=@0%K#G{&eWHF}u7!l-X)^eAm-)KePm z5WH_|G)miXb3h@79dE+SDWtM3)51=zDCcleZnFI2daQxKb+y(&ku8z`9yF5SB$f$M2Ng^r}X`qT`4! zza(uQQ)qdx6#PV&w!3+_z`dr?>-1~fVY0@gi7Q^p@E*22xFjxnsG5C2Fj>l_SpP3h z@Qjd)A$+UZT?;1#Vm!iP{Dwxqp_4Uqir!Y~EnEc3--Yv8S4YCUyxV8zvl{)5aJz_X z+Pr08Z4yzsLGPZe)fK}kGa8*G1U8D6!SBD=dqYk>mojmkLhc)i7w)^+dC0)a-7`@* zQ)U`xwV6w04A(`oZ^TyhTrX!#iMH&<=py}IrAzRtc&E1PX=l=eGwj|d(zM=4;bw_V z`Z~R*(9vL)q_hBh(6G}P(``vQ&SZWnco3E*bCx2%J(uP+cy5-dEeX+MWHLjRXLdD2 z=-nv&Nuh^|FqqQ0cD<-EnhKREh{04j5D(K4DVnHhiL>Yp{2!D25M?IgINuZh=$-IE^ltx0p1K z=F_dTs7QGJoR&(Rkf($;>4w!T$1ZK5b5h0=-0?K=o*6orNw zQ)rShbHQ(`6khCg2_NV1S+eJXf2>k?(HtcFogCho+xnfA!i!EK;g@sxskyCBRSGX! zkA!dI@Q+h&uHcMU3NQMUgzx0=xW<;kSA|eF4XA)??QO>?96H(l2U1?5aP`Ud_edG& zXq%xtAA2<=To<0=!1N+C5K4G8T^)IexoA{MVQm8Io?+b-a!hg|ngKh4ph)ZF=T%)JaVDTzJAJa2vzg0N&{y_)9 ztHwd{clr*f5Twu0v!KFg#Bb7fK}ArM&(rrnsYvj%^c<)t9l}=oKByWxg4c>4fQr!! z+UxV6YUy447vK;mjsA&4@Q0x4=wCQ)egvwX4#VCgEl{J^s9q)IKeSM#YWzh(E*50X zry~7>;b{~~h`kP#779H8*IA1RvkGAmD?J!QhY1%V7Dk*{#AF#h!^;pa2vEJQfmN|^ zvU|nx#;(<&ZeDCnja?HcwP<7e2~s;}=*UjS-;)TjiFioPL|FlfslACXpF-_%rD#0t zPwh)Y_*A4Yg^Cnf`x7dkLNQ7$)t@?$i1MjuVG1P*t)}t?vt4)~-LIxs=tX)7?uY3Y zbPN=`GyMd=tYDVWQ}k0%AzDKd^fORl+J=((Ij9KYe=ofZN=0ETf;KA{Bwblb+9zOy zkaR^sqVf0y-^FniV=SPsFW}3BX0xPNBp_Clyq+tC)!D*D`7#qyC0e3V)G9wG6>G{V z7Ikkp4Ryr(mt{}?VSddaYGcK9j$XlIFFyMOxgX>KLGHohJe?rC`;;qkar(o%gDP$({>EYDHlCs$~XP8 zH_9;~CbsVw-#Vt@lChO2WRhHEt&a0>zJ>&SIb#;emWEYJ96Chz&?T7`bmPJ}F4D0M zJsK`rea6~mk7NH9osAG?5uc2FmBSZqXH-y(lMQw*0B>abj-Zz%@4bIx}AZXO(KrZ z>-Yk0VJPeo@wI(7=>JPMwIpH=PU&NO*oLw{*tYO#5nf}eT&lMccHyxk1^4>65 z;M97g|C>??*l?;*j*jDYCZQnJ*sd{Um29(M-)+to=z>l!n9f)wkEv^Cc0_}A1J9#k zesJTW+@|=aF;aJwd2fo=jP2P3*y=bg?>AMs&%xkQ&zf%0&bwu!xObKuZ?RDJ46`a{ zOpArH`3$2jaJPntzju+Q46H~!o1dmMwOh7MO=Yi}*d80(QuV>0>j(n`nz^cj%=MC{UkGvKY8f*qc4WdkQmAgUGggnd3?d%nY#c1qy%7sFA-r8-J3x4;;ntPUM(LYh&9hu&) z;WBkW8<+7+_)4kj%|nzaq+`r>tch}wP7MxRuPt zQQ{sGUbTrhPv(YCFpgO)@4HLOP1VTNOKsuBQTAMPD$GsO)0r)_p_y-9jd9DLck`2G zi8qDShudhGvga5=DqJ zQ?_qq68N)*n`%DVVCOe$1KrgVs7`_t5VPtD)F$Et#7rIGX04akEbH(_4hvUWUL5bR z;jVL4BM-#!Hx1{XT9nZv-GvL;(se?^E_P|>!o)1cId&pV$n#-W&iQW6d(ezIQszAp zZ3}l`0R_^Fq&b4-dRXL`UAoff=Ils@$acfEBvoj@b94pzigDoC5X`ez=CzSms?fh z_f=L|Csz47x+wDv+)w{}lR`e<&3t$Dzb3l5@xFoPHxNI9mVp;ZZN|6ww>^-!fgZn+ zz8}N4N$Zwc_zw1QMtyu2-y?Dyt@u8EK+7H=bv56T_roghLDC)~HL6hsc$iNUend7u zGdU7Qjq-fFxI?+3tkFDg+*Q5D`-Om*CN61j&{Cw6zB~BMH>R~d!_+U?{c8Q(*p5BrvcF5a-hpk3&by< z20)iB2fF&SK>Si_0CeSYpv-B3_$k-`=z`@yBc}!W2_9vniJ(XmP()L#um2TXT#E&H zY~2BpjJH@dDq|`mJVZUl+j@rY(xBLn#~Q)+t`uIT4+Y;}2md&pXaqmFQh1qf6ueOf z|72t9FIy?ROil{^iaPkG8e4zmO5tTTQ}9>U!T%ILYvi2JH9z&y%G9Ue*VV!E2MP(_ z6k*(SFal2Y_dSPb*lM$>T$jiwW+xDZMxp?E4063V7qD3nbn zQ!PR$sf1cm$&k=^x|KrXX+6~{gmfjuQAlVq-A19wbbG2z2(>Grwp4pXC~}bdm)Sh* z)W@V>s`uq2o@Vam4@CG7&oHw$vAX;dKPRmjefS4{!BK=i=)8hoaumflevfB4im|pn zgkNzKM~QXdIgS!c?F%@-Q499N!t)#@aTwe1YmQp+I&=1KIMVSiR`uU<)P{d!4GwbD zj^EMVF|3LwPNF@I?vJoKj!ynhXdmGmIc)heCV(bM9$rkP>z0z-fwF$|IyIcnk&KZTd*l4iCh_v2-bA}qY~_yb2# z{;D>PLmb7}cwEjf5&`od&SqGMfZ?HQ7eW7+ga{8^(|FMAN1BOyb)Tz|88uOH5OC!aa?kBRTzO075TCM&QLA%4|R|FTI zQ9jutxS6kUK9h1dbQHIOr`0IDWdqft&No~uBRCRhycV?AB8eR3{1~4E$FKAG6aKx4Yqledi~yEi%o~7G44%gs>ND=b zpqSPSO-jP3H?7TRhSLIFWZ0Jd8xFc3nwZF+CG!w*N3J|w9>QOXi+_J|bLrZ`I?Vg4 z6WEwLIMmJvXV9;PhPL*#^{~^ghlDX#r6L-Vx|vU#v+5~t}zk4RClmzMw{%6NNY)F|WC z+T}xSZCib&_9>)tR5&>^dxl%ctb?2b3r;>365^OC$I^@$MvW^}@mBkyh}IpW9Tbm} zN-u`#ATY~!$+L>lOY}0*>|TNKY24*XF5~GdBIEQ`N?rkeC`NlI-hf8%YK#uk5k}kd zd{zvYMut1*G$)6V?Qp{Z^TU;}K1Ri%{go<#aHo#SQa;8g(AGW`r2zHEsF$E@NW5F* zI>4JM!AqRa%k!Uz(MdWEtuovglGf6HFhI z!eX>Z)g2zBzT?Zh4+^cxHB#7yO!vxRKR`-I_Gb*7=XJ*7FKZ*z#=i4a6; zsSv5nOJ_gpYVj5AXYGt)2?MuxKq@2bFy(NE*GN$9P+_`)_VRR7B-B%YcB5JYxJotn zLqozWj9EL@B3P-lDN36J#i)*+!5-$DsU90!*>ZevhG&*Ldg2#zgy#ykU%e*rUm_0|Py-5Ah5+K-d3 zX4DG`H3$^y==`2`-N9%rrEQ*tPf61C)NF%w5O)d3$9H#q_|}cWd#d~JjV^o#b%Moe z_Q$X$rEBcCOI<(E0la$fTBKKqo~BCUvb^YeRdCCBTA-uVS+C9$+FuoUp8#AIoz>a# z4F#23oxc(Lf`Wltoxc(r?E>G|+-XPW0u6X0oMfyEk6xwwciI$J?$eeV6zh&FcWJ0( z(bF4*Nl$Mm9+Wnr`_yoQ>f*t8sAQzvLexM-b?tDgYs6!-oJxyEC;2L5GJ+&3^1D$*qa%nfOE4(Kk+dr-(4*~DU~rjs5M(87AN{mjBIxdLU0ou7Vl4>J z{`$V79SbzkFH2>txxOz4c_a0mHz?eFmnJXE^`2fuZp0OTCn811R&#YRdpuyDRRCYm zH)sm1B6J8sO(Ad{9i%tGG(h`sz2Cw}afLfg$`deEARJ@R3a=+HD$i@=LK6i`1|=J1 mk=yF^Y!VsX*|EVH(cM z0+ns;Q&k9~DuhTBn-CRfeFDa*_e?#r0+P|^oJ2+-mb|3RYid?Ar`4ooPWMT~nkZ@| zT*#tLK9Pw~wmFJAY!RrM)}2A$xUQ|e)Lg1IM6p$>MyM*i5}}SEZ;v959Rk~O+N?fc znQ6^AZ8$TW*^Xv9wm?r?DO~Bg*x!VcH+W#_u`!BguuCAE*36-I3tCp7p&08_>XM#z z`r6M(&YPmxEtP}1)U+dLMpFnaLoMzI%dgr3oCo;9Pp#3!Uxt3Z6bz_jG_ zDZ@5WS^cPKT8`!z3`t;rQf4EiSvezP71Z29iaYjPwqUE;ik>>D(Qeq#vzb1Dz`T|% z&_hV3=e)uEC>M<^qfs}6<-!cpfKb82=)}C4LxKL6DW;ZV46(E;7}PJydL<U&>B^m_oVUNc+l`siv*M+_HffmpXdy=;-J}WBC9SlUozn7# zOrkGToEd}JZ*w#DKmA^UhTpy#g*>% zaQhVLAJLr|D>J6$nGJ_|Vn5Qz??=+B_k~D2|5p0&WxTH*d!xu zS-wf4u5@+jZn`;>_e{07ySkomwDjzVHs`Yz7#mNF4AE(VrJL97Le^m$te}NkRxBeE zRw18e%VcGd$$0!*ZJ#_U@4&LvNl$ZnW}?7~O=mURW*D(!mgU$^UYql%vTK8QD}pmP z8^YW2t~w{svKqc&&Res(>e1s}U&C73vGNN7pB1OTSM)$nXl5p>+bv1Unk~%r718PQ zTqIdzIJq#Vmr*}kq`!Qt6^VR^0WF)IFdV%vjPn9bMI^O(>FO6OHx?CAU+q4Ke9^)&q0WZYgV251*xQzKRq@L+lP>W#vCDf8iL*TD~A*r(wTN6C9l z$8E&;)h}WjP|8PfhHA=Yh_AcP$73Rfh?wu}_yz&xM(3{xe}O>djm}>X9_gZwo$j)u z^A4W%W^_H;#ecm@_ixw~SMFi+HAK7P%56NitWn<^ph|sjFdmRP!F#B?hU$1A9$Z#Z zZqRFGQ8{dPvv|Tg%?kH<9LEX9+<P^zjttf Ms|aTr($EqA58Ch9Hvj+t diff --git a/crm-base/target/classes/com/crm/base/domain/enums/HasValueEnum.class b/crm-base/target/classes/com/crm/base/domain/enums/HasValueEnum.class index ad43d9804075c754b182f951d3f7dcc9fb2cbcef..665d3013c57878e81debdcb948abaac7f3ccd5a8 100644 GIT binary patch delta 35 ncmZ3@vYKT>JmcgpM)}FHjM|e|G8XfTFfcGMF^Dp7f@v`Tt*-{t delta 35 ncmZ3@vYKT>JmcgBM$O5wjEa+2G8Xf5GB7YOF^DjTf@v`TtZxR% diff --git a/crm-base/target/classes/com/crm/base/domain/enums/StatusEnum.class b/crm-base/target/classes/com/crm/base/domain/enums/StatusEnum.class index 2753ac8a112631e5d9cb9247ce9dca9dbd3c4b29..82d9f4bd53e63f3b2d100cc59015471bf383ca52 100644 GIT binary patch literal 1708 zcma)6TW=Fb6#mBRJDbEYU<#ov7X!8fY-za^Y(h-3fe0r-*~C)Rr?EW^OZQUkt|R5G zKdFSaAgZE1_eWJdXPwkbASjmBGv~}X-}%mE=AVDxy$A3R%Q>V3s(s%z`hjcoWT=dR z?@HS9PV>kM@2l!>)9Oifsk5t842k?GAZ# zj&>ObYzpKS&5pTYE(&CJ7)Rh_XUyQS?>kC*WOu?`-CU`5+nr6*61eumaq;u5zGHiK zG$)|d>Ro~Kf6(>a_HnEoi9jtWi?qosDoGK&!SLdRL0qx@R?SoKiY}W$lKMa&Mv*+L7X5+^1m>ts_;T2=N3dLa55gzZjJQ}_u?SzI~MC)7nio~yg+qgsF zndx21P@}c7hs#^fw8s0b78hhin|X`7*AG*t7ny81P=QADA?+BWK`SR#EQ`il%>4~< pv>(&S2(*7esZGUuOszCvK5;{AbzqmfcD2`hyqJc-w*{{ey_d$a%m literal 1736 zcma)6ZFAd15Pr@tQ7n|ianh7D1^Qx|$fXs9hBvz*ZsMc?wPE7aGaWvi?ITr@PcyQd z&-^4vq3yuH^fNz-VfXBel@dDkjC|VD?z7LcyLW&8^ZQ=_?!mW^5h!<}p4W+cUR(B+ z*Nu8I(4NwRUf*jbG8yz6^j?5K&Oshi0#lFn4<6QifgAoLp;eBZc2MA0YrEk$4jbFN z_l^SxGqhK3)&0kfroig=lOfueL(#&FgL#w$@|`f!N?>u#^`FUO>4j1sdHd~Ws*_Z0 zEaHNNB?lMruE6Zrfpt;#V;K(A{tp7{YpLk1Q1<)P)J8Lj1ASCYXJ7!M?vjHQTqYt0 zOJE@tcRz|kCAH!4zJm{Ng(_GJbdYQaETvP9GVHl6o2qlo!F80Waz`p@F-3t3XY`!{ zPa|KzD%LEx4k}DzeynliMAUZbezU>AA2Eqr0`7Ua&mr!%rcvMwA3M0i@VUc-#|G(B z2Y0c~4K%v@jOk9;LJObM0R8{`Jdk~(df23?(*(J#s7sZY^8>9O4SH=AAIf$}J71ln z#+_`M1WJC?kzq^50fUVYb6WNYxRff%s6zt9hbnm*b-$A_`6MbP>AB=-K+DR(Kqo;@ z?djv79}rqy>xhm~5NY~a^24atj(+rZl~%D#RJST%mlX|Cd6;fyXhd;0&@vP#G=n2e zr!XceXQt(}{cek9q}B;X6O~=#jX{buSFko&B{r&W@k@84mclm4syR>qIT@sa7Sa=P={+ToWHQI58UUV03ko7e^d4YRB zF*F^%5tv67gXJr~V);#+1&nd>*fd(|MxFY#XG)^Aw; z#rTYM*amNj;+WkKkKedDS;KH9i>)HCP0tF7Xc&MUq>>iv#J=<&_AhYtP4h$PM7wC9nfY)1jMCqnJ1_apJ%Y zxEtenuY_pgr1z)y-0z;Z@D^V1`ThC^V2ap<5=_!}ndDsLlSVf^k#;iacLe#fo7uIG z97-B4iXO_SxY!VkI9^Mqs_tk62$S2>Vi}tnHPn-@K~d1qa8O7W^5Oeb^)+^}m(FCE zUa7mea3vt9njvO+=G+ejkJUM&VhrN(3;g&IdWq^Yq6hXAw)ow!`U=$nDhSbJFUmA% zq0NeFbg<36JIoznVSp~W9Ge@;1rtLFVjm(nkwE?>0Vq+58$%vTr12hjpZ^BTuo7l`FnFF+>@vc;;xD)i-|GO(!yBSXkp<4m|*QAQ1}33v$eIY8pXuI z(!yu)8I0!+1U0d_e{=8s=FE(}vDf_gdVK?Mh{T6R&PCq9K_NYf(wivoP=x2gHz>g< z^fRUU>E}_gh_XQiL3W_J-5<4XoDw6i_kbMnX6!>jC4 zy=NEtc2p$~P^iivqda4hSzTs!N-yU@GI)VX9^p=~@Qm<*HH{V8GIF#P&IGg}I?Ni= z8LT2=#%aV@x;VVhQ?{|&?MEh_*3 diff --git a/crm-base/target/classes/com/crm/base/domain/exception/MissingParameterException.class b/crm-base/target/classes/com/crm/base/domain/exception/MissingParameterException.class index 7811b3279f7f2c09b03478b30cb69cfb07920952..111c94e59c9e306801bf1c66a3343723b6c41244 100644 GIT binary patch delta 310 zcmXYrJx;?w5QV>4$E=;KAp}VHi7^CAC=L=-DUhfF9SwH?Q6esawDKLO5d@GZsFH>w za2Uiaq1pG%)0;Otw{x3){d{}^XOtFGr*axu8opQ57n1vN(H9z%yX%`K5iN%$Ny%8T zEDJ;bIE)=_R{g_ylCkDkXTyJ&iO_SzEWO;yp^Qa$LFfcaDN@!V45?0+sz$Y4joxWi z&$u@_uXO8~ndFw@KX#=WYFgD%h>b#`j85)Dr39Zoxn_2iQ=^wqBV5%lslBHhg8QoB h>alWIi>oQ!Ck4Z%zKgDuEoHX|u+5H6!r(7;@C(lsA8!Bv delta 310 zcmXYr%}T>i5QV>+G)>dq);3n_Uya&;kQQ{M3vpFf;>LGSx)fi+{Uy&Kh`->XAlQvB z;~R+QYBn=x&U~DiMZAayUqA12;FP>cKp0cAMAY4R=I*j~LW3lxX=!2IeB!>(8Vx#@ zCA#H_$vY{_F@4JltA=Cu(J$}K$j!2-HodvJewvwmbCfC=45_E2LTR0lJJ58Y?)Tkd z{DvtWiC<~I&?`TK=`bRzuuJt&SgV+LZ0w0VJiPUh#`|nB6tgXz1iFL_e^sAW5eJ$) i8Wqp<9wY+RRO^4HWnJ3-18lIVX{XxmsvGuH14h3Pxgtma diff --git a/crm-base/target/classes/com/crm/base/domain/exception/PermissionErrorException.class b/crm-base/target/classes/com/crm/base/domain/exception/PermissionErrorException.class index 31756341b7da4d8d4916168b821d1b3aedaf2d4c..82cfff31c3c0cb23579dc77f73f13ab52c97d968 100644 GIT binary patch delta 404 zcmY+8J5K^Z6ot>71$LJm6(9IQL=li(j9Ag2Hkg9ZMS>w1gOL#bhS_ZAPp~pR z6ANQ4{vr$GnP6iv_kMHd%sF@DjGWZx&)YkIJ@_`1pcZ{e&9V^-KXTDPvbn@=uiqQ) z3#_u=62uypoii66CTwVdAD;SgjY&*}jRVKSw8ji(!<$lIA+2F!UXU&~&)e7S>P5TX zt)2`Ay?(dux03W&)L6oDsF8kvQE}{#H!U_VyLe$py(_msWG&Vkgn$TcOc#+L^cD7c=-^9WP zkj}@kFrJZZZ0MBTvH9@G+OxL|bX( zUCe6)C?qG5>+Fxlqsd`96cutsjYTY_W6@M4lwB-qte}$Qcay6~S)J~=fIYarxO}=5 zEwNXE=23y7f#_`d0IRHP?2eg4P{a5U;uY>2)XXisAWXmIR)Z197{{7tn<}u$D$)4`@e3?S diff --git a/crm-base/target/classes/com/crm/base/domain/exception/ResourceNotExistException.class b/crm-base/target/classes/com/crm/base/domain/exception/ResourceNotExistException.class index 6b146a9cbdce394bad849637a43d1b8fc5ba17b6..9cd97bcd9f89ef616292c05a32aad663549b8434 100644 GIT binary patch delta 310 zcmXYrJx;?w5QV>4$E@wFAp}VHi7_NWC=L=-DUhflsA#wYNOXvcAgz1|TEwqJK}QO% zz+Ditgl6A2PjBAr%+757_4ED#oG`SQI+Nqb((v7~K9j;v%AU}e-dtW~L^K_iBqe9b zvM7xF{U~;{SoU|PNzRI6l{No8OoXl@X5r~t_GKcv3qm_sN|CY_VMuj4S2e1wYWzl4 zJ>p(zztE{a&9tzT|FH|zP}8gqLTnrod(qKtsFdK-qtMK@a%%JvYJ{u$CAD{yLvU9$ iTs>3{YjO2V=Rv`+uJ61nWkcD`18lOTlhFT54SoUGRv&o) delta 310 zcmXYry-osA5QV?H%d)$0L0D1z!&SkUEF@ZKqZP3+Hok*KJL5~(-|TxBgMWzyiG>ut zjBj8(S7~O>ocVHQX7McUe*L^pffEKb0>YSzC8Fxia(ACMQWDabnx&3)(~*^4mJLVlqfgmSpnZr!MV8}cr6-w)b+^(i`b-!;F z!#7MZA%3OtLc9D7#=VGqj$NpS!s^AyV?$5uh6i^((s-W@dSW)E(?FMy;jik`dBnaZ jk4D8a?MI1#71ipWX<3!F{{U;OYucJ`x77_hssa697uh0E diff --git a/crm-base/target/classes/com/crm/base/domain/param/BaseParam.class b/crm-base/target/classes/com/crm/base/domain/param/BaseParam.class index 10e18dd238dc33ee96268ed3721cf178e18e6a00..3922d12e1140d637b9a2cf3dab7d2ec04847148f 100644 GIT binary patch literal 4542 zcmbVP{dW{s8Ga_&-I;7A5JD5W0vcs$^8sCGt=bLLLJa9j0!WZ*tG1KPkSy7qNoOXZ zsb8f+3E$Y(g4muTen9n5pi*d>My>u(&+#AVA7EyYpZEvV`rMh>FE)}K&&kfb_rA}4 z?t9;_x%vBlX8r_VGfvB>k+3Fh<`QWuml)J+JuzhFw2YA$(=08Q*vgq*LXr`Z(70cl z&=OhA7*6aQ+^?q{337VevUG#e^1hNbWjOk2})6jEU6}R=R(D%{_YZ z_Jtd_etGcD?1{M#Pql7rb!T64FCC{@`U_faEUQb9HcANDnHMR>@>fq2pMUE@{%6<3 zlIdf&e}1O*(G43U)NJHK9@QrgnAVVlrn18fI9A3OrU5(}yAZ_G^}cc)&xHS=fptt0N~t74Cf zFSn*GU32t3bZ2WK7(6SSE1_1i)0H9EYMNPHGidgP{JE>{nTzhpBiu@C^5MCEUinSy zJ}qnOcV?&ZZ(O50@+YsjZ@x{3-kGI^(P7=`E(Er@t-Z_}rO>VnLYp!s<_T_7U)IbG znxlzc-Ow$XJw#JN-R6*92MM255k^G9(!PwL?-ee2O`5`=SrnT%|&B};zFd1@2 zGEA7YeT&FcZX?tD0ft=cv{prf*hw5|dm+5{RU9b@ut2w~Xv8ufz0;49m|mx1xtNZS zWQ*{0rB4dJ7SIhUn$bcAyUc|xZS#1reJ?AjUw1~#A+N-AN4I!LnG1#SK1I>w=5mU_ zV!RYekAV(x1y)`&Ugv5NJ0NJvkrcmNLy>FX*w@E{A&tSqNsF9~7O8PP2Xst9hp z*hdC(8)Q~MPh^>zM0@f2R-*ZK3F?9&x1IiM?!eRZ({19fRU;ArX5er+tsJY__) zM?}`L#@gCb!U5k=@ohX!`*-b5_4n|ADZ16t?eQ$Tpi(kC9QW-E#XY-}c+mzWUffS{ zOh1@W3?n0Bq@v6EDi!-N%EXw^vg7*BeG(p+FLq_&4AP^CJwB(x03)y>r;X~}rjgd1 zr!o#tWY~^oI7|eioGe&b&GrAylsArmn!ehUF*45Mo^~M=9i@%#mhJ(<0lg0C7UwFggL4w{PXxO-KM1-)0z~%J}lu}xkm%EPxz!} z3}tmY-e;Pl<6~X-bZW)IJ(FYlJn(1A7z#C9HWg5GYuW5T#?iZ$MsQHUl!V8MCvOYt zZnLzmRivwU2YD*QAWwzJB;G8wvs_aK8+vzEvu)j$!H@0QD&Nd^S{WzV_wNm5a`>*n z=h;DOnZIGwh%W_4GDnSkE1apb5k;JkZvAYbCL^i3;}fYQ=q2 zuzOc4R**~*9gu*}&=9fZO1@X|m!K^19qxD!tFKY0!RPoC5TG8de5yWxr}_d%ym2i^ z6ki+>d+h=iwJnZ_t$G2X&czY&JFoyzVsS(p@h~&sZf7S+UPB*7Iy!G)^}Cd+z1`v? z0&j~*_!;yF(P8!iFO9yqFnxTn^nMBk^bH>UqxjN7*0(K|-p}EHzR{!q^1}3;i>3D~ zA)sIG(SHSxEo6OSvGjgD1@z4xJ?{_I^wLKRTLVM%NoU7JghQ7*{{rbe!nKz>KZ4Z1 zuHz;)c|!_c-La03WN7{0P#+6@jAfUgu8)OoVoL$hoeUGwos7i70u%WdO_$IR3&$d5 zpq`{mP)|~c$pWMVAUUR#fqIj51obAPu{r^Y2B5lFv<#F=))SOUsQ@FD#KE{TnSZ zYWb&7yx$k=78Vf%c{_s~5_ibzATzJ{zm}*&5nbVu|5d)>qD#afg-ZhVelLZ11LM-W zx`Q;wIfbOh8@o1zHhYP(s1-l}gHpivSo?Z+UcFfX7FBTXp+2P-f{N%n&H4@5uZM2JC@BnFPJPx&m3Ys5q| z!UaG96RMmFV39Id33>Ny0G2DkCHy>!V2M(-q_k>&9T(C~`n+GOemX{cbJvK#Ph+2m zv;XR)nBuR8!x>fz?)3>;6GTN4x6h^!1V=d%|4|*o37kUgzX@)% A;{X5v literal 4467 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 UCHs&0yn+K9#V8%bAsj~hf4y+F-v9sr diff --git a/crm-base/target/classes/com/crm/base/domain/result/PageResult.class b/crm-base/target/classes/com/crm/base/domain/result/PageResult.class index f6adffb503bc0d6a20d9938a44d8c557760fdb0d..15495c3f22838c74d0fa4557ad59857afe4b179b 100644 GIT binary patch literal 5923 zcmbVQiF*`h8UKBIWH!kF;R=MKTxpw4LKaMgG#juGpbZU&Nk}b-GT97d$nMT|XEqvY zy{Z-u4zX6iqn?ci)mBS5s+D^2JpK{>B`W^jnb{+UNgzBs^L_94e(!w^|NQUW4*=}K z-!+639#7esL@J+23>l7@7`8Kpl}+SLr;v6NM~yRPpSRQyQK&m>j2Vfvkv)?*GIZ8V zxf-ezR(Md$PV}33%Sc=2jG?qiWXIbMnt8{vv&VY&DX4=Ai@NQs;~H6a&`1}|C81lXJ%@#&LzJE-P!fyA`%K^@;(83_D{D+l54Ce8_MuCzmcbiIkl; z6B*Mrh7H$9^oTW*@j-Ycr8x&d}MiL#H zuvwwzjOq57lysOHE^CTUGfuJ^3XM8+ED}CX=y(!M3NhXq@XbXL4hmAUjyl8ysa3~T zLDGoSPg}}qLdR17bi0m^$f+>y_Dw7ZPw80ZBka(zv&chC=E(8WI+i0QtE7$5a88h=tkpoQ?em-5u zrd;M&;y|!S#up|qtz~ufb^4?#(mJ_&PVyr0Kp%5%fo!@wZZ7q6nSi>QO#Zz-! z#}SFH!(=Uv;ROv$uT^E5Q&4n#0xvSzGDc3J zV@}WL zio&)^83R?ycLEVB9VW&#b)3c-CZ@y0EY{NHm6W_<8Xpv7OUGG^vJenCCo=N@-eon_r0`rLbSubF!>lVp)xh}vl9iPExecJo|k{f9{F7>a99>|$_h4mFy zo*BMG^cxVn(_Dz9KxFA$Sj79GsNoA!oH#>*pt==}xN3?I#frtGUE5d4x>m;Q$&Oi$ z#j3R@n`K#*Y?N}`o3=AU_Gsc+Gi&Az*BoZXX_gZhg_W0`X!Udt`LsQAnJ*QLGzqN? za4KCMKQ6ZZhK_IIJZ+savik*FfKSMyRUX^ru|po;*6|g5RaW28@kMNwF7#a;ugPU) zi>zKyS8`y-wA~SLmo7!PvDBa!dEoNCd4a}nmNp$5F`N zyN;VTa(;VpYH%BOHQeEpP!0eqJ7$lXQebINU#kO#l(%tF_kD${l}ZKJKEdaV>~Pw2 z8hdSfw2%wrsB}bytWz!yu;0#texd?D(5=#N0f}xSo$j|>Gr6P+w_^A}p}TCmrXWam zsn(5NP{~4qO5QsunH!5S? zHxdUq<^q3FXjsEvjO%I!R|qxyadhK;vA18sJ*PBp&3VjwbL{fooUgn$rz^gf^G-ch zk*dhr$x9%`jRTkfO!HlClrdfD8;QReI&41|~%$M4`&2=~xCiD5yFPhv#gZIejL zyL}S2ygMe5mv`qR3a#&ufp3y#`VSn2W9XpTPtyP$Xh$cK{MSvRJx_!5(-0?U3Ng(_ zU$~NKPGTJAs7Q0~&y}!VA(oh{Ma)HgJ#&4Y&%k00l_1}Ey+yN) z^PZCCP%_(>@MXfP2z`}ri6C*6;yX%pw}`4?&-;P`hNh^Y`v`#=;@2`nMCLS)CW<+e zbf`o+{x%UGg*3lh<{{nosHFMXGY{$ZM!lb|V|`Ef31OBf(Qj?3q&k|CC4r$Sw2CN=v~8!h*s*eNFQb#KeXw_5po{hAzdcY(VLrQJpDE|zwexVu!^UFPoc zo58g!hq=4b8QFRtwGEMfVCe+(tqqY$u)mUUM6%NFBbCMVDPP7?#+=6+_#RbW2?tlb z9${evt`Qc7&5C`Ut4Kw2Js$+MkNN0I zhHGy!cvO zvMaJn9I|&^U2A1wnf?$kV>Ra))^kjE1k7+(olP!@RkY08fqu;qf@)q&F-l_#y&+1G!FCg>&N&BHI7o9 zm${PZ?iKu$SYfPZA^RCuQU2fBG5nk>jpNHR_yt$h$Z?K)i`J^Gu$Iu3;w0WXjK~9i z`)e`+sR;l0en3tYfRI2|B3447Z#}HYG#C+ia{|AdX?C2X#M0(B(KuIb<5yyMF*Sb| z`Mbp5<-7PDzlw-7Gh2N(Zwd@jcDz7D6&YC9&BAsMPyCUCL+kX)vvfftM+AQ$gAm>e by46igaxb;%kNo`!f96hfyNAEvZ)o@*FAb>! literal 5923 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 acBYnT=e8|8l3QUyh z%Vu8HjYL5!mU32N-oA{P%i6e6$_s>&i(_Ns$)rHvRKwGTB1G7#U@zJTA*)%8C(s#< zO;tRdFf1*r6^6oS$NmsH6m+6X;P{R#0!ycw&dvsJm4~~&>v6RVZ#iD?h&9#h>?=i|(wOo1zU$(TouVqxgsxM)_D?SVvV#I^wcNm)N7r0_okj;#v4E<8+1T z#swz5;<t-UU6?8SHKUUK@%GRCgzN(GwhUs&Lbl%;F$lx}Dc|EJ*0~DKn$yQYz6Al{466 z-Pfs9oZLBm3A(Eq;nAv#(m=`$lXIhlafHYrH@>r6f>uf3Rt$lMTM+FmrHiqf_4)I~ ztiV@q&iO_n_(=o-Z7VM-ee#W}jw^Z7s@*q|yDbhoM}U$!m|x{mA~0Z^H(YuI&h2V~ zyO`g%5{-9WqwEr_k!`V^29+8t@wf&|ZCfuYGaAWRf{SqIWZ@9#ZOj>(*58<=tLbms zX}ZPPw6c`{Pt3#fCBxG5+Jv#D7j>%amkh(SsH0KG;P#U<^J(*8;+ke?1=Z4)Sui?K zl$&ey8Q1Nu)ab}ao{y@J98M(`2t;Fc!wE*YdQ!(5t*?-$2sm@)NKNl!zmjIDkkPK{ z+zI!{hz{^R$8l<`J_y{R7Jdk~afj~jQU~{7~t;m99V=nuw+q2au*;3W3m6 zWUx$Et!iY2eue2|oF#%Kx<6vu0s*mseS6ADqT(rIj&GrO``a5h z#gn8ja?%Np4+l7ZDk~}k zx+kBl&=@-!_Suf!q+981j+`AVYuMvx7Y#^E?EWq1P@ zd7957{#lQXVdN>QW!3U!M-1DM%MRuU0q`oq1liKJfw5Z5^ERejs*B0_VA_H>OJ#Jk z%&=-Rj5`cZ2%qE9U5*P;IU(^=Zm#3%rl<^((nDy$FhypB_Q$9vD&5ZRAVkNBW^~}Q za#T2#<%lO1omCDN$iX5k$HD7#Wm%P1n7mD!XUa)yZ-$P0lvPl|8rfGelt(_N5hp`S zbSs1Yg-!IxA-Y5~OcaRMVVLkR1n?MNRx$9%lM2J*GQ(GdNbmTh@e++y7@lKaCDr9F z>#Sm^-RS|^`@GY?rVrbHLsx-s@m(G0Bel@pBEmq`MWjA7y$RNVo~?yG_!?e+j~_Nk z{v63#=)(;`%SirMBMiOGI}}s23f@7%cpsJ9N|}|S@3lGP_6a)5u)tj5=`2X|Wa;H+ zEWeXNofOjQNYG1UJwi`i-=2_L$u@*Nn+WM&5cLRW8(pESm|L#!<|ab=CkFMTB@!X! pl{DEXp=^#!Sdp70Wx2UT3s>AlqLxwpsY+y@Gx{@rp-DbG{SSv=ja&c# diff --git a/crm-base/target/classes/com/crm/base/domain/result/ResultCodeEnum.class b/crm-base/target/classes/com/crm/base/domain/result/ResultCodeEnum.class index bce1865ea8fd29ac7b996184159cdcf2f9ec04b4..cbe66e40ea02f34cbbef499d9bb7afa942fa3ebf 100644 GIT binary patch literal 3618 zcmb7GTXYlW5&qV)kSwo32yAe0LX$X+Edxr@LJ2km*_O=)U5r+C5NRvc@?r$K5J`r* zw}eZAOXEPpEf5o+h2WA>gSgn`miF|mZ+-2vCEI<;L*JXu{E})pv?ti-$RmC8&HOX- z&&=-M{(b*3fQ`6mLYaida3baiCu5FYEu}m95-}|jcO>=HKs4>}3(=P7(_Qg_m`_!z@pgu~oPMXr6>#|_ELFTcPPft? z^1HTmyVO9a)z==ButHTjz0N?l-xca{`IQc(%^6U9-cW~Aag(Ef;vufn(-kV1OQ`Br zUH*{Q7YKDI-ge@2x%}chvTApE6&GPPzf1LX``cWC=i08Q0SR@*lPRJtzILHfySuu4 z{s7xlD_#oJ>vV_Ipc-&_LN34GM}aSKZ7<+$PPe;=E^O_l45>CnpsL%u)$4o9Tl{TG z4TQsbDn$<5vvqAvB%-<&ry7-qsq}M|N<6Li>q%0YVq~fHlipThtfrHZct5EtUEXd_ zJ(ZIRDPh&y^ST^!OE?;dN79=l7#bRTC=zZ0GmI8|2QQfLJeBl`fMvXhdWvhm79G%i zyCl>!>}V_rt(cbu-$jE7FVFE&$cue6vZYdLSxnlDCJ762LnpGwE?OXAwTv}z5Y$o# z*4t2WUZE692~-TB1S+!OW{>IH}Q`UCPvr$JrCZGuJ@!Oy9Z6 z_#`_r%KW!wR55=c@jqK@Mu^hPm+QX;$({KV)sV@WjD<{IMC8A2GlSZ^e(LsvsRtLc zAG|+vcr($q4^0fXn*z^xQSuI>@soVRLCO7rV4^9%IZC z@}7)?I7Aa7hLRS|nuf;ttOE9NM8^C0fCigF&4*Uq@V};$=XyxSuW*dc)884;qI6z$ zX%@cTJ$g9Z+_*!6Q3OPrT1{)=y&i3!sE3IwXZ7gm-HE;~Evd!yw4Nj{7CKrj?#j8R z7e|^N6aImCIug^B`2I*LLM3*_F zB}HlHeGM;J3J9!tW^e*{!M$rqVjK=2d(yp+ZY0wZU*=-=GA0=?R6BmM*y> zBu;&!lw4eF^J*dke$QL^x`ef*zS^Q%D%JdCuBDy9ZwUMt%jaxS69dVx-VxzpSTeWi z*KppHrW)ywYw3X`F*cU?W=AdahA!*wRNsClST9880 z;uDhAnvk@vgrrR*ByANTXX`gQg6&s6lfEUNvYXC_sX+9V7_c zNunZyT_h|SL`hU;kR%~za6r9{!CQ1cW%wEW-#`x|&^0cj3v|#GcH%jNuo4I8b?7)= zz$ohR7g~S+Km-0oFEBE_sJw*L(nhlQx$pvdYX1ViB!6`Iv?I%?DS@U5yc^t5{&9E?pjkCaJu&tCp|h61`tbb|<{MwqUretVsqZJ;pL<7IlE z=Ywjrr{{VN2D>*o+cqtE+@#rZ|FN4 zeN2+0b_Q zeKWP4gz@Yyw>Q;|W5mAtE>7BO%kSchz1Daa=Vx0WpKXoE){b(vDP+svc=CDMEEko} zYkB&OqQ2EeT(kn0=(B`gHLB^ej6N0oY^K6-jn@&C9n@qn7~E>GKMuBVXL}4QCUAMx wH&c{Ky6Qz-qYAMPJ4wD0i%qgmVD!(B{=Z$}+P`>@Z}SgiRE8V)qmX0&0X!p~?f?J) literal 3675 zcmb7HZCF$18NLrm$N>);LqVumtHYKLHR|eSMXUh=rVR<^1Zs3!dI+Z&4M`gkyY90p zt<06m=2vxCwA0G$92yjuU+u2_+rRzYZxUdC_G5qctK0LuNhElAT^)MG$Mf9Jdp{rV z^FHT2fBWYCV*rgvno%I3HW=-*1!H}-ZmnOp^+fx$P{bC~`xD`~%_~H6v`2SD5`9IG zU{qj2p#-zq+1%_2(CU9A0Ouv)S%*dfb6lyVJ#XD-~FU z8=teC*4x`V0$EB%pHooAXi2B)@CMu-U!c|LZee7Vf(o&&!{HSX5@(CU?Q{tAc?GK( zwR#<@r_)yX~%k z>Q{Y^_JG6d^@u`zM?p1PlsfijEt>5v*8={Mf|nUz-qcA|q@7rRY8BKmRMP2w!|i#~ zy?|^~unC)K_o}J5R8|Qa4=!Q*im?S-&DgA98@?;S6bwfrIu)~~)^%7rs@cL?q}S%@ zKCB1h4aL}w@0sy^1v~I6g}GqBtwbRl)xrtg^R|TTHF>L>!&-lTL!Ls7$3l_bhI|i9 zK>QLK6zoEyghIj9FJW^{?b7m*@S1`>uv0v}dYl`b_GD2y&PZJE)nnwZ87*cw6ttp^ z+G`=7tObRkznjp)6h>KoM%jAQ9^eLXDtH}lkhlIsFsS#FZE0SvP0?sr*COJWv@3AK zLkBJ>g333`g~WvW6nLQ$VIQ$+y%fGRk1$(2-iuBJU3im%+!cz1;=3i3=LeZJbk=ss zFcsqf4w~@;-nt(yN;MlGFFugJBe}r2NC95<7MnQpO>#lY=%ygjgTtv)qr8Vb92bS{ zepWbnspMSbsdAKgs$92F8btgYWD0{dT?s) z{+BZk9?g7pHGOP66P=6-vbx+S@T3K0*29it#d8 z{Zo_i8wtwH^d-V`m9CR(*mF ztvgJ;^4c?crFIE(j1NgPsD-<k%J$@+K)1k%aF|NnxkglTPu=rir z^nNC|J^7*J8ggl|m_)ubuGP2}JkqYclMSbsoT|Aov3Mxu4g-yc_@NL5xZ0bD#6x|$ zGjcT4AEK1(kw`SI#Y52up;lKo+SeUDVr$bQdQ6M!Jq;3=zCAZI7LV}kDI%L{on~!y zrY&$xu_!RSZzlCC8}(gj3Fx@QPU z_Xr{B#vml!4}_$ffROac7jj)z(tBGx)B9OSdKr@^D^GqQX|4-NgB!3s&#z>9E~3Bm zHlw&crKj~I`A=~Y^^>rDjV-t7Ny0_?w@_eZWWNKKP$2AIA;~L>ty0}IUilgl+ZQad z{~c+Rj1@-MH!jo9Bw^$OcK;bhvt$D#O$2S6#!grL<3_{oHC3NuP5qi}JB^jbN$jqh zMAJnSRvK>)7^EBjok^mG-5G?ta@gL&I2InS7!sqyXHaHtSai*rayV(15l3RqAOp+#C6NSG{#$2*5 z1QEULpF!k$nrQ2{65YVqGl)8#CffEbLt!bGFf3N^I>GwJ;WMU!E zf-eR6ACXrsOEHgRDjf&cFNlDHmXb%1{Dve9s^6HTF9E+PNhi)23xCQ4APvJzIHZ;bcZ*d+8vSRWSpVxf-|3VoFI?+AT~(8tU| z-_QEE&|8H5s4VpFvHr(GUn=xJv1EvT%D~SAP%eO9STan%WZ(kgL}z{dhuFMv-h%LH(mfnfn`5WsIO3IheKKO^)t(>OPQ zdhVo5rFYV~11hnKK5T5LLK}U-1nAtphZk|0&h8j}hWrID;U9E{|BYHnLA|sAo1{ki OfGWr~%{Ve$f9HRBH@Nu# diff --git a/crm-base/target/classes/com/crm/base/filter/TraceIdFilter.class b/crm-base/target/classes/com/crm/base/filter/TraceIdFilter.class index eabed07153027660389647e594e87d9fa4692d8e..fa831198e1367ae1542f95b128ccdf11d1c443f9 100644 GIT binary patch delta 710 zcmYLHOK%cU6#ni!xMdg~rKU)WZK>5#UZWJOqV-XV7PY=gjfo3`Fj5-ASeUB2>Q5kd zf4u7<3`)VOnHprcb*ONOi2QX_D?X{35ABB4>Tm=ZX2dfor2hjs4v1-WoH)k2 z_u}D$4BDMkxm~H6sZz~@2}C$18RkV#p4E1C&5o_(5T?4HmRvKK<%o&^n^JWg#+*pA zcw~h7Hf{x?Jh|etJ%Hjk^PWYunM8^^`4DOC;ubGva+4kTRPIKfLCdIxyN%Ne+ zve=QzBWaw|aUK`MM=2_P$nR5E7y{dsM-`)4Y1NGlyWMEjIo27*{-fosw)MDjziEn` z`eu)jpw1(KIjWN76dB|hc{TnDBfa6ZM%K9o$>t%e|4AV4rAUDfexeEtvm}gSY)JHl zFc)EkL@+c!SVCS2D}78q$4DPX@=89KaN<-l7z!%`EXqhFk^`KS@eYum5Pn{EmzR$PD^)2VrBtwdy0t>7XzK^XcGc>^YCO7u6=?{ou&B45ym%w; z$zNdNtrrDjG~SGVz=H=({2RtNyBbfvhk0h+d1mIB`5OKaj(-02_C0`g+zG$~i9=SQ zz&oxq$@huZtS}#72;4324vdyr*4sg-2yui}9KsC4l1Q;d<wyd7kvIeF$vb#O)mOZ#lD4ux=xjDo*;wln2&Jh0}TW`DMFGQYa;I^Ye zZwIh|G{>Tf6UZ=xtU*T`_U>2qw4Kd{$V)51lUU-&smLQE45>)%{X^5T*n;;P4Ch zCWzMMNYV*YrHDT!uTGJbP%f6HC`gDTCs=-oP+f7onDXI(gypd8PF$l&&SVKS@yeUt z&!dV0{p4|h@G{-g$yR6$n*CRo-E)!HE5MR(l>E)icsfLQaykg-WMAxJ+F%@7ev diff --git a/crm-base/target/classes/com/crm/base/security/DataOwnership.class b/crm-base/target/classes/com/crm/base/security/DataOwnership.class index 7d36b5f1d03eb8dafb766a0556bd38915edff8c7..080bcc33c06dd403c1f0b89ff988b9ce40b4b7c8 100644 GIT binary patch literal 1440 zcma)6TTc@~6#k|_x2;PH6;x0`1*Bb&74J~>0f@0l6(fWPeVT43bfMi@XSW#slMj+e zOnC4I_@j(xwrjeTOL*9xnKR#a?x(;1ocsdt3abWE3^R^w+m346bsh*i5Kc$A;i0|3 zL%#Xd6DnxBzJWo8kv)FE?H2cT?T^Bds=;7Lji}OTq}F?_NpH8pFzhS0&DG(C@IwtL zmdd9=gX^*(vS7GkVhCx5Le2HW`%b$q)HbiT1o3Lp;jJC6Tz!v}nouxdXhJ5GTcL8j zU52qf4_$4gNV#4$F@iCMl~U~z*;bNq##YErlLt*5EyF;mT-9c8m>9#3ZH|RxfAuEHmWirR%xjYie)OPt=(NA-b1$au~op z6VsT9a@(PHz7t_nHa>90+ajbPV90IBj&j5sH|j~>cr5AO6KPG#FbEa*yX+u`G8PP2 z4AZ^oP#rIH+rsYV93xFE;sHap{?7u#Q8IAXJCOUr?xNpvuhA00Y)#7jj$cXS6E`cN ziHX~XzSt0fqg+3fDoI&y@gPVlVjG`N8%cWan~}JEg)~YTJfz;nYf}Qmg z>)IKl>%g}N(hDw0n#9eRR3c9)LT0Rm6WqFpMFWaEgw<8BN$P49te?1REgU0fEgmC( zbgs);dda4!j+7I9gH%Udy8D2h>?f@gSv39LjI&DQ;hy7CvO C9!N(3 literal 1613 zcma)7T~8B16g^YgZd@Mk6ko2LsckbSM&i$A>{r%_s7l1cd&me{&4RIX_BpLFD{FoapZXXyQ zg(;l|LvqcsEpMG+s94%hBZahvjE-UG46~+e8>Z7X>f9BEE6lEAc_+pe_xR3NTR3jh z>M&?h=~cqY*LwIhX&+P+-iVHz0?T$BtIeI0Ez$9+jRNI2s-u7#3@K0UdX8luFsu}7 z18`PK5uzZpq5#KrOyDK~Ho4o}lnud991yUo;wN=X;WqU|eChI*%dk3FbR?Ud`k^qr zO6e1IuNblW?fCax+GmIddFE=CE#7zAb>ZysdW$kI)TGH<``oeAIW)$-rbT(p57Z?Z z$hPpBvhjgCye&K$7{gfcist##uQH5BQ;w9vq{^o^-0%|_`_TL%88W-F>zLxL<(JWS zTb2|CHTdH8QoFarKCgdttOKw&tI zmSEY(@<Y#(J#xOS8ZA{pH;XTR_PA(+Hy^q8rB%5uXm++1U&9wSa^KgUbF!fUc+D8m(0=r3gQ EFYsh!tpET3 diff --git a/crm-base/target/classes/com/crm/base/security/DataScopeHelper.class b/crm-base/target/classes/com/crm/base/security/DataScopeHelper.class index cd6213a99167e04752cede1e1f712cbe0714de56..405b365f879733dbbec75b7d9f0b1f8e35593e08 100644 GIT binary patch literal 4716 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 bc*h^##U&aO1SRNy8PjCR@12PmRMGVhGJ;pu literal 2402 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 Dw*vWN delta 1743 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 delta 877 zcmaKqOHWfl6vzK_@3hn2PH8Kp_0iInwmfbDL8O3yynIp$3pA0qs(NjR&j>pc`2en( zi3>h}abaSL3n-e1Bt#QGi-}*LF`j8FaiQMDoH;Y+p5OVOIj;lTf#|oNA3gz?#)<_4 zrT~|4!ClFB1ub~s6|f|HkPI_whfSzu=2mNL#n*;_Ku{ut6Y3qCsvH#EVSUt5@pt=u zh~lKcDT&iKqlS$UwQltCI76ZmjHtJU*Rl{sLL!Nj`oTsmA7V&LWRO+2%`9a~3-qcZ zbF$4wPM}|60D}yDYLWM;JfHR07?K#qIrV~P5;o3Dj3Ucmm7UF^v$0VsI~IB{rnQW# zL!L`$!Uc&*9p$5_n;Xuv$E8OO17CP@&#A26QgL%g?Hc8fe|58T_d&7r^hW8wn8uJl%z+N3`>S!xs*rpOy1%gDOyJ+K|x7}Qcg_Y??#BZ!N%lg%K^V3s_u z?p`ZFs&PYSHHdxq8LAY(8c8$*h)_7SYpfOjlB`L`sT$e~_E)%A)!s*hVJUZr*fy-( zXT*yARi^Wpm{u-#dP|p(Bri^7&0(HaPWuI1qVo`yco|nH?N##HVANp=MC%9(iu3BX zX`xri>WbQH=q%V@APL;X@CN)hj4qqX2M92DtbB`8D>N4khSZFZKx|gv8W9$c3HRwY zP3WwlTZ@Z+M9?e#ZV-uf#qM38FhUC diff --git a/crm-base/target/classes/com/crm/base/security/VisibilityScope$Kind.class b/crm-base/target/classes/com/crm/base/security/VisibilityScope$Kind.class index 180ef17ec75e6dce80cc55b786e8649c4348c3b5..b78657a7d4453c28211304c12249b19cd39fa0da 100644 GIT binary patch literal 1423 zcmb7EYfl{Orlz0!qnh4XsE{U23JE)NX74?7?wvFH^Vioa09$x2VSpi4uGf^ZSyM`y#TAQ} z8>VhIm4a^RCA~^hwOs$e!+W|>k>F++KGn`NrK%anO3G-|7(DxLa;ZaxmCXM$#Tf=) zrVe%v^Vw7`uM*nHWZo6hYWhVc#USVQbEz&IOy!QU;lfVlC`F;GZ~NQGmnc_tL${L* zu1K`N;NGoQxDTEH7)E7`VVuF6=!8s0GTj1I+tiKYcsg3}Q|yEc54=7|0!+)01n>zk zC&MRzUw|7j{P2p|O&I|UGK^$&gXbEx5;yZ&smd9~GWD`nEoi1Lu(KF|3!@~?KG7|P zK$uf=!-iI)=%F^Kn-$&Astmy_w@>Po1I?t@Ha98Wd!|(zoF+;n+E;%9SjMV^6=LnF zyJ^|HCSwf>gI_aEtw|KKFMXxe|zu-%*1X==2eQxwg4 zDC0gh7#{VK?N&9*iuWkEX75%bY)Xc6x0@MI>kYHaU+Ll;LVwwOO=MBYs(x%}cEhBQ zWDmJuO7x>UN&Cua!{DYPlv@%K3`_rYQAn}4bPT>6x9rz-%idlmQ@QBwdbVeT6#*K_ zh0aI@bVl+X5S$gxqewRyQ^pYG4HNoASp4$ez=~rdt_uXu5puw!+W}J!nDIDZ)&cWg z2P{b6DaqABNG-Zsm{N6{M$7xK8zn3Z>Zc`~~iGNxf78I!UrKmxz!`B}%|QfTbYqOn*Nj zh<57Tq%H}z$rcuid#>13F(Hb`y5=qsTlq|H+KSuc>{^kZoVMOk6r)jW9T;P=OFZ}i l_U}9)#X}DLC>p=%&_Bi#XMBohG>T6SLmXRla7kx9{u`$RL5u(Z literal 1431 zcmb7E>rc~A6#w15x{Xfe7zhZ8IAr5BQBZUfH*iK`8HC~t@q_8Q3ME}@+K$9;{z*C# zAsP*z{iBTMUS=FV5?IoE?s@&r9)U_3*!sVA_^m4ge-KbW&6_;hC(8nNUYGvg`MP-(ej8NmR+Dl#(5#lR z@rGeB+vUA#X`WZ;5~#jw+Pj7B2pmA*kIA@!afV3Iv`v4RVW1nT|xcafem zq!dTjteWPU9I}HOvb83`r~d8~Lvr2l_ngM2=8}zXxKvum-!qBCGY0i8bLyKoWgNF* z+M2}>Q_Wpl^II595J_IlX@CK0IgmyI1N2mbn51)o9wXGr Z{visa51>eYyqqqhM3k>CqkFkD^b=4zI`;qo diff --git a/crm-base/target/classes/com/crm/base/security/VisibilityScope.class b/crm-base/target/classes/com/crm/base/security/VisibilityScope.class index 836d9a1c34f5410fc8303c607c5daf162ad1888e..8aeb3ea76cf021aa4441874a2f86839dd55384f1 100644 GIT binary patch literal 2212 zcmb_dZF3q`6n<`i5Xhz>DMnlSVk>E2OM~&HT8VA*LKU-tPRZc-$ywlg%b(wGxi@A~~pH|SS7 z_CQt!vU?gh;aR2a44jVRa@y+pCo+wsK<=6Sqg`=r@3_+JJd@o}AhBav0vpy$BvpZA zquHo&_`&gd0_E9og#(@@IPE|8WKbtCXT6eQ`QEWI_T))e?+s$(Y3R5W%Nc|;W?Ig% zXNRYO6u22-WApYT*L?yOw!5z5IpKYVSS+=vc+c<24Dwh@<1GPmrhv6@18*ZEu*gh( z*RHqfyH+g=flCH1<6VLI?V+D$@lCQZDS9HPYN?%}ldA?&m{+o|8+cF2Fw_N%bf_aY z4WuzIuxvS=Y@GHxGB~n3E)%tC`CZ#>+kvCj!%h4DR5>N}rFIqxY^da{D0w9V3&^P1 zZ39^>s@WX_29|gy;ZukAz4p4!vy+k5+@TDg`n|_?VE1Jx1D@3-)Z0B1xL2G^VQIGf zS5-PcHt>l`XR7&4qxM8#<+(#K-o8AsgRn2XkiJG9;!3N|>OtUOs4m7%OVu0b{oFuR zSK)r`@y?T@!&>90wa7Q%K^iRa3%Z+PUj`mxhn303KWlz3P#hPt=esUj-|;<$^E!@w zleJw}KOL%oO2yd&Ui5rV#>mZCk)x+!m4N>|3Grqe85I^rC*#d2sbwH7|1{{zM~(_4 zKk*uFDp%~Ky2tlu&$R~w$@@;KXNry9kc040szw@Mi{+Z&Ynx&{vlBVHtlEv^s;X-} zva0pSn&#;XoX=sIwgu#{!kty_>=CU#*Z+k0_605q@e=R+iYw9b+HiT}7ap0z`~1yv z1g?_k8VY(>S@_~mPUK=;6aU2BB<*?gC2pCw&rvkX=P=DX=O`<-gl1dQ?h8D*PGPsm zuz`yxYGyOSV^fDkCLNeioT_29j=XAEa#gr%FeGI&s4amHIA2N-q9iLLIN!pDgsHec zrDJt`DGKx>Q^ox=H=-!#wXv*qM7&GdCp2%0*QojKl4lh5XPVa<^5!Dmd&2x3+e7Lo z+Pea_8L{wu0|DI4A z`lxVJ2}+s2p*RV7Fs42=ydag6M^nJ&BzS)+*ua;}eN;hT=~Rv@C{L2qr;sF2r{Fn! UjRTJAzcA0Q_3#o7xlXF}zmQAUJpcdz literal 2188 zcmb_eZF3q`6n-u*fxwcI1kuL6Xw3_3(_pl=R$|(`P{nMZQ!+Syau!(At()DJ?A;kdASGv`uq1k0ep@|1~J4_NN7l6P9Xo% z{K2d^rh8gxc3xWDKwxgicI{wSAYLlB=aI&I3K zMWt=`?T+nm+vC_~ zVHpLg^{n%t-s=z527&EV47(ptt%$c%ct^u^NnD?uh(NOWb))t?Lq6}yG~Ezrmi|j5 zla#~rh?`7n5w|qlmejI`wP$Xvo?yy%){z1WKhb z&;!qLSUTHttK~6ql!r7nG?Y+gLH7(pU}LsWRHE-{*p!xuMzc|qq_;Fw6lp?z+pf3j z`-YNlYxqdYHK}-YAu!*vPhB$@`0R;06V!IXv+6xn+1)A~9e6$JUNdahY7EXgmVaV) z97>i9uWLGO)3@b05+;HdHj7{U_ua+$)qVch3SM}3UAmFEci^F&D0)^w~XwKY3yf4%b1R% zp1mwiximYCtn0bf&~j^5%Wy`p4`?tk5yph0ya=pbX%2-`0v1T`be(A6Wm?|A?^;i7 z8B<|msBKBFe602_--Bl;B#>-$3YhFOkwWFOk#lU1ITP%Hw#zZ;=+@ zxJY1)_Ul-{28Uw_4=L3{dwiPv0cp8;r z-1Fk3aeaz$*mz$s&@UmgDpOKb4F%i|^M6msdj5j-@c3bL)MW>T*^+-LfSU~B7E4&? XK8CMw#5F;UA`I>_YL~|Glk5KgdPv)9 diff --git a/crm-base/target/classes/com/crm/base/service/IBaseService.class b/crm-base/target/classes/com/crm/base/service/IBaseService.class index 5db36ef2c7057742606246b104b154a82ed88c3b..a1f949be9a01617775ec9eaba89b2337fb0854ed 100644 GIT binary patch delta 1139 zcmY+C%TE(g6vn?hGo5M6R7z1w1q1{N&J>ZC$WwVJqVmv!P?bk{NI(Kcs>W!7{{p!? z6A~9LNoZoiL!y$ffVeRx?p?Yx?j$kBb7#t+i@A?E=R4>8&bbGngOKmjpLZVsG~>Po zX*pRO(x5Q-XX8)e6?5_V>5AU**{O+y29>L%N1z4EcOP&3EbW zBV)O~m1QnJH{1*-bYvm8{I$>@KuE_)WH7iA3myHvZ`YJ0X>zbW|hA;C=jX zGM<=fd)76{UuXmThnDLV_6s`d(ZIv3o;C3?*2G%)3M(n_;u6|4wEkCWH1TL=ep*L6 zI`}Wv>2Aao9i6z!JEcPYSu5Z^_XvyfFH(f>yGvyaz5Ib>s5cSSaErf|iin~g1AJFn zB!WR5Lx}MfdDh*7yCTp%o|J3&jJt~ebQkknPmW8On^{coHBX_7;b~Jpuhg=5pJ#MH zWmLLMpNo3yqFsZV?jE{H@FI=&eL4wik+}yKOPY~&=sO5BC`L%x!f^?MA*FmB**owh z$xT5H&-3Oi<?#> zv<57B#A4#|0owTxrI6jOEjYH$R4t{(HILfEAJu4WHY*niyOH7F_M~;Lsm^e zYAAIrm0D+!71-e%vM{=EjhdK7{SY{kg_C7XB1~Qa$F`aDFGBq%ZuT3+8a1z+ZuIiH zXk)mJ8&2`vR`EmBMe!B_+vtfI<|g{Ka9hF#?ua^NYXYh@{T8b>J8QtHEr4N+kX^hS k-SP{xq)JL<9;QJujAD%P*pEAYSkyR)BurTAWXd@87uLOy_y7O^ delta 1191 zcmY*XNl#Nz6#nj;+dig3fyazMg#v;y$>6{wq7+byPz0qwArJya3dU7UTpFX~?p%<# zcR^wzAP%rH;a~U*&?Sjc&wa0yuy}d*o^!r)zVAEt#5%F^j{biB2H+az-H;&bP)w-M z7>fCOEo<|ihaa*|#bBrqckWR$Qao_Oqr)_jg4E5Fau0*D7TJh0_$qm+mf1MrhK_U- z8KRFGTkQ!A2~4JmETl5H*PqNqV$rVW{c|FmZ6XJ`yjN{yc|5Lmumb)?t!UO!#E`xe z*@)CFM^+Zje35ph4``I_bbbbYcYo0$^l!+dTepI zZh%4^p-}tv_Nsn{XC0w7{#)~rwO;(p>V*jY2S7rQN9XZ$mp|bnsuU>^M7s z-lhaBWe+Y1W0q3;326tAwy9R3O#<130rKdU4~_byqX-r`cb%e*cCHLJaFcEzA3M=S z6U3<-J@g2~sh3VN;WBXxebnbRMH9$Lg7(wZf!;|%?%2;(N{6wj5y%@Q}l4XhOUkEw-`}r(IH+A7dD& zkseyBSc_!q$+ms>C${3`f)o?f4X{5b*NK=gUuD$b)bubln!v*Z_i-{&Y~H(%s(3h1 zy$jNCS;7vQ1X0<3RvJM-%)~Qtrh1dyyqLrk<;6oW?K+VY4ksp0($R74k;3p8(=;!U TiX>Ar6dX>atAtt1+5hN&485W! diff --git a/crm-base/target/classes/com/crm/base/service/impl/BaseServiceImpl.class b/crm-base/target/classes/com/crm/base/service/impl/BaseServiceImpl.class index ed9b095409c1fe75d5013ea87b56951c4a1a56e8..b85a62b5a0ece93ccd6f6a7fceaedca40ea3ff47 100644 GIT binary patch delta 689 zcmY+BOHWf_5Qd-cTzX1-s09=ROD)BgUch=mskB9F@q%esy3oYfD8?Eh5vp<5waey9 zNc0Eb1{WqqsS9Pr!XIJc!aXLet#euu;^LckF7KI{cTT7OO{o9J->=_*5_cR7{YOpv z94tja?^^}a!KXhP$*8Ybe_n4aD9lv)uEMIUJzfc55_EC!>tDtP-7?~O-`w&CIK{X_ zr1c_UyF@wN+Dxg5*7uBWl7z#V)WXAPy~zZlc+4H z1ntZh0w2XOamD(&$r1X+cY6dv9Fr*gUuHle5ylV}$Hg}|!LVRRvLo_N-bX!ZGTNQ> zTbg?tRI)pay~Q@S%~Ezi9qbTqlTyrE?}?6DZO$roNiRn-pP1bxKhtL3;90KkCzZo;` z2vM6+hcQkl!jI}t>xC!nW~)$ZuDA7^nJ&7F+r%7B5myW!0+!m1wR(GXO<}Lp*Owd5 z+I<3dgSaFdPLtFx%y=-(q)ojk>q_A2ZqncIIuhbj8ZGF+Ntz?G@(xQmsoXF#OQAO+p$*zi5;(ggq zs1FjD%!u{c5aps+=K#PZW+j{ZuX0&3?huoOeW7^<;<=y_CyD8ULeKIj@iO0pp@DrCmOOO}s zDkQl=s!uX2*gO&WwW35q;4fV->Xf9YWNenQ3>p0$;==S`p!#pX+r}FxQ5F2W#34-o sFT%>k{mG=fCQ2#kd%}5AF0d#*Ea+=;uHQpF;D*!>x;MGyp$wM(0O7c0umAu6 diff --git a/crm-base/target/classes/com/crm/base/utils/AssertUtils.class b/crm-base/target/classes/com/crm/base/utils/AssertUtils.class index be43b66f32482c854eaa6db79222c82f700934ca..549a9252fc8d6156922f59d6d6c07923d92f20f3 100644 GIT binary patch literal 2213 zcmb_dU31e$6g_J>C{Z2k7y={#n($TIp{RVcKx{&s;J|cD%G5M7rJc^Km93*7OX*7L zz)$E;fIq-9PcSe8Z!p7;VtUt76gl>UJfH__Kd$aM_uRAVPoLks18@tgIx-BWEw5`@ zvTL@vFU&Bo9p9|`zL3FhYOEv6P}t)Ca?{~%$NZ(eC9HtqP|bGjV39#9mDd@vE8d1M zpkXYB5gcO3H*Hs}h26H04|&@W48^8rac7-NTg~IeY_Mtj471JsSyTzo_8-cS@{~)D zn!9{jfwbLD^^eq2M6p_4*D=9xtuOP2*X6criYJ!X4s6dgmqVY3`hG)7Pd0Xz4IIIw zj-w1SmTPW?f#*4<<;h4OlR%X?IUK`rV)nNuyPPz+T}rW7+2pb%{t1O^iJ|mTv2hUw z3Yb#*O*2fUbH)2g=rPN4H*7_nfjuJmyM9M$JD>>lgv$*9+D{$6;7V6O1JvWHAI=RiSz9t$x;V zhF+f|fKh^4CeJ=AD*mMSv+Vy1J`j=#|?%vdkktN+ObSyJm-~UMdDts@L zmY`lW)HkV9S;rLB(duol+Uiy*r0%Lq>JVU#?5fcP2aF=4E+d-jG`mV~M(>fzD~!IR zK?Vl>8uSK^B8y3UL!(?2MDKB${ikeC5h?+v7?rp<{Tzk2DEvNu@imICaN@nnruDKN z?nTT{+@K0gYT1wRwp^>wTa#`d3%a zAm}2kM$R@+!)=56?`cXJTZIaqcVGa$LuQuX1_~jzei^OIYp(2ou+@;?CF*> K+#x<0H2w!3tiPB5 literal 2213 zcmb`I-*VeT6vn@`ohlJd?6^%KO$liz5IboFO-pHpywlK=kaw?6=EV9!JWMFXWW z#&Ch5dcuF?mdm}K^?CP1*dfD(b;onUO@`u9{lLID!)@E|Tej?5T^*&i1V1DD-{TvVAG6D0Ez_6Uwh>CFb|O z>~n(OUuvHz+CAp7BYud4XN%@HnFoo~W<7I@QaN6)X~IBN)i%vAlg*`{*AGlw#3chW zWn9MV4D-3#l&Zkm4gw)Vr7R$6PVi7hf}y^2ILsTRiV!Ad%eaC$2Ga@l{cwjm{D_*6 zRg|l)erV!N%o}*Cj0Id{SbU*hw(q($9@Xz%+9qvFlDGP&;S+{gom|xr$0Xs+`k{fh z8Sdr^9U9`7BJd+=3liIU>;&|q$7^B{Rff{8e?(2Fv}x4)QNJtXL*8}iPOa_R+&$pZ zQP=urDLi(lcMI(tbf~*ch6&sEjvQ4N13M(s^@E;DdgcN>Ig-F-kCI*-(Q}5$PRQ*? z5BRB8P<a4!~Mu5>UqHQ(I9zm=hkXFBYlGmy; z#I8vI=Vt|>WKh}kxHn%i?sI1>DN8Y2P7b{28ucJI*e9oh;m(dcvEJBJ zQ(reU--MQx|%T+Tk=uKr5T%(t|Kp!|@oL2g>f#Dsx zTBViII@Wj!_A6})c$a?FM-aG#5@zro?aE0ImQbgwpVXIuB2)rSF-2NySAItIcNkwU zuRO!VQ&j#`*@|(tsW@VeBClc^^Kr(7)@?T%&+tat z@vMFBVFGIzu1Qxn;-by8Xj6Aw&v-3YX%p)NQ7-!~1G}2S5_cuz-6Gg_4z_{Km%#4R z{lw8G{o`-ZmBw$-cF^c;+83}xR@+S*o|?V!T$z1wVD{@nX8(lD{wbOLvy7w~21EaE Nvu8)n@NulA^)IZR#Vh~- diff --git a/crm-base/target/classes/com/crm/base/utils/BeanCopyUtils.class b/crm-base/target/classes/com/crm/base/utils/BeanCopyUtils.class index 8f38e7f4c3d547b3b578a3394c26ef18f86a3323..dff5a1d98574ddbfd5af3e6489aa4b69abaee51c 100644 GIT binary patch delta 1063 zcmYLHTTc^F5dO~Yc6Zq>P!uRotO%A%TUixR1gi*MK&haJchPNGp`^5=U5xtDnD}n+ z#J}J(K3Ryj#26Bv`~hnGCB`{hpf6`;zM1pQH)qbb#_x@_KmKif29Q8TgT#MHU9tvc zJ=od6pp54i90M|HO!%PkS$U2#ImuTP+waGIG-+sL2=R3mDw$|TkU?H_T!zNpzNuyV zscmKL+@dv|T6WUzh=x{%Koy>K3z^)afe;R8XlH0o=d7hQH=oa1>3qSlQjVRo#^{)H zGg%X19Av0V=U1Q46!NQ1!Ob{DhT+~yqxC-n{GGhbe=14#jK5G~{G~4$_QS$44M*vs z*LRJWtf@@VHE|pR++yvzg+UW1af;8fn0ng8Fh=+*Hrb!RISpqSg4K&fx8T?-7U?Eq zVif0T-W7Y5VTiwGO*|k))Nx$YaDk6XVV{XhxXkCJxSqhIi7U9u-$)4_@(pWx)?P_1 z*!-_=!Z5&a!$ckGd9OOC8@P?T8t(9%8X<~%xX-!zTd7xZix;)N?f@Q&8;?y)V}{U2 z1TdJBxtvoN&)UVJQ`F$_k6Kh&WC-&wTA1s)St6;lWk7)>c1aW(MFV6RSzq)6^!MaQ zFz7VM0`*iJfS)|GQbe|vq8cHV=mO+RXz+;MQY;#@M7QB%8?jC7V@O8h@+Y*E(H1Xl zP*U;8o2ftOwZp*Q1Ba-F=+KESYFb_yRc#3@zLe#F!MhAxPCBcxp`qkkj1i4zR5EervhI3uBqu}w@! z_zJ5!M;oaZqzWn2Nmm`ZX__9=8S!Rmu8?91NkH_E>}Q(u9alwty#CLhFA&V4Exe delta 967 zcmYLIO;1xn6g~64rnFNiSX*cjkWxO{VpTv9M8Wz&6{w2%iRc4Lh18<7ny_N$(pV?{ z4sm5mqA@YV#Kh0? zVHNw@-7Yv#!{HQgLCD9fWt2hBqzeq*?w*Mi`>7qz+PO?THNTQxC=7GdGI;jN(}lI= zT*e6x>Ny$&_Q5N^vR3(rO|`h-gP)^Opa}tn+R9T;3d`B}#B#nMf9lN+ADRUYphbF& zsMRKL5bbizNV+-@=I9jYLbrTj1mtTYQ5!*&BPP&`LkvMVX9iea2F;kG1BV5U;HXTQ zBW@@9F~D(5;5Y`0?ohFuGL6LQV!F6ABNN)TbTC_5dP+Vw2jz^u-oQ|wwI9we+8qn4 zkJc;9zL?{()f%X;vv9+So4CbsTi_06<*XH!&#dp=um{7m6IBpSlAS<}k_o-i;1xxkYK@UkFxh6b49+kaiRtg)E}<^ANoNN2+yEJ4 zQsSf3PxG7LMu4(lWk6fC2~OcOVW=HOF-Ak(bVJTiO+$jJd#JO!sB^oh^MtxUbsfyY zIBjY)>IdosBxyb!UnK6AFhLL{{v}nE&MViHq?qxMS62GLX!_6}3Khf2bK;*K5SlXN;t zD@jYkWsg(&OgP1Rh$@P=6^)e8r-)TuQ>KE*D95UEEH#=kGTN%VTl&s0O{s=!n4zeQ Vy-u~exJPTADo&~_AdL)~{s9~dhB5#E diff --git a/crm-base/target/classes/com/crm/base/utils/EnumUtils.class b/crm-base/target/classes/com/crm/base/utils/EnumUtils.class index cc57269298be78c0acff6c392832acf54ad1a2ee..1ec3d5ac8ef2a3e60e2e8e29119440df706d367c 100644 GIT binary patch literal 2023 zcmbtVO;g)e6g|(_7B+?u5>rTGO4B6RK%$g3w8h{i7(1acB(14uN>>k|!Afk2%5rAd z_fKTmRkn0PKNgwnI+H(;ZGTDWd6En=N!mqcJWuaFUEO=nx#wNK{`-%Y09H`f5EHm! zIBnf<+xm{|n0nWMd#S>5q1vn1&~iT()e>D+vtb3k`vI z+1WMI7(gn61d;;hYL;zocH29qyCrv8rodRuF=VSDT}#>FVcct49f7IZztvC_Nbi~6 z>On)cx{P!uUpp)J6F>(-8SS&=26dDFe)vY~SdR><>4wfrRXFQg-D#cQ9slSw6 zr!6g8HyNR$Kad^21Ql<2t3mHZG)S1a^j3L6WPVU!iZm`DtKlL!I)fsEaeP3wiB)AN zJ9fvDwnu)l`N9v8YQsbtCI!w%U-&>ZTo$;|N9cP|4B--T8BF0rfkEaC8NQg0(if&n z<0E{m;VN_bg)60mdgx?u4cDm(^T)1ivEZ2~2jTZ`11M~>DT-RZiHsX@3HmCKcosB$ zEb=Z4C?MF$(Z~xQzrc9E)DHH0avP8M`U!&0P{nMHS}Rz*{8Zpi&mqoW(9*K~Ft zOINl{&vXed<;!uC_J66d?zxt|_bxTM|675xrQ-Xv7Qxx8z?a@4zR>Wwz-7bMn_bUw zTDsx5!L8TnsqTCRUt&o>vpTE1@=xg;ZDzSC-8$QB+J;#yY%2jRXE;kZ3Wf|0kh0U> zm+FRbFl?uB7pofX35=X-T{S6#GS)aYY@fn@xrGI%QN;rd_xr|A@J^|1UEPWZ%uo|5 zXB7`Ks9}R&26|lIvk9`y>dt)BMJ~^_}bDln$#H`(sifn8fMi}!)!!>@CW2A z1&lX?fH_maHKryYZH?Badu ze;N?EZ2afrzr-N}#Qg%M{GeG{;|x22942v_tz6)~NJ|wp?IT*j4b0F|{}*`_SZEGe z%wmoO&G&iTJn_19;-%B;HqR#zPaYFWQo{v}afQ%$hRGN{;oDS?7rMgp{ioWR`2pb)9w0 zkbpea2zi}wAJX2!O`n)q(#C2|h-pyFn}j?~QUYSu7~>HhlUha5IO`Am6-9wpkC=N% orcQ~e_J}#=NDjEFYPcJ+bzdB_!tl7~*~eg+@ddu&8pF5$04}*J+T=uq?qC)5E2O3hGd$gp)GdZ7MFyye55r2iLQoWgeS3Q=y)87 zeg6d8ZnC8t`mui2A8sbO@3_LNO8G7AtcJ;OGCzk08Buchp`(=SxF29k&1te9ZH1t9fNT0Y@>PE9k zfL+U9bXtvy>ok4C@oCEB^4~04YrqbkNUT*bJ+Wz*4XE#GzPy6JkB9-vo!?=iCosCILKx;~{} z6uwe3yebo0j%gM1Tawas4HK9Y=rzf{;x_gS&kEFM!YNFv$Z5!!$5U5#!#$UeQ9L> ztBX>NrY`H0dQfGh;_eV2y=*(yYOAqrdF#e@otBHsu4&Xa49}M5(5Uz|n?YmCZv!m~ zq&No)`{5+qi!urZwD<;!5tA&BAc9p4oHZvcUWao&7`bjE3&fwv$&>_68WT>tz;HLK z{k;ye*!m(<4o6}Fyb{f2Uc}Zn_}N$W4fE-Wu@}lQuwwZ&cjuAevE#nwQJQ4c-gOMW zC5L6dv^XCDl(gD-^WFNL`_(EjYq_`)1qqpy&uH34W%J|gwEuXNZ^>@s8s6tqD*s|! z`Itgrj;Fg^1=o1tM~EM|>A?s5lPz&k%)Thc=9G*w`aLFQGs>O$csBkL>7OwuF!K{K2S{Y&huIla99Nfkw7C*wwqd_g>%sh@E{ydaPgqiUPKIJNRpJ9QOR=7X$`ux~y z@!0D=y&mwChLU)VJ{5gJT>XoVOEe~XhzMc<5BcANFUa^yEQgH$q(xS_NgkIE&LLgw zB7IHZ0O@S}2sdVqF!LN*XaC+@B9n-S@oPkk>-;qXCYkI83z+7!n`6;=7E-_(&yR64 z5Tro49?*9Ms}ya5FKI`b&0}dc8MhWnGfV<)ueLPOOG+aJ$s&>L2=WgmRZK03zmYs8 RO`e`@X&w>tE1r7r^?!yO*V+I8 diff --git a/crm-base/target/classes/com/crm/base/utils/ExcelUtil.class b/crm-base/target/classes/com/crm/base/utils/ExcelUtil.class index 7f4db4d01a63eb55e7953685be7a944178dbe32f..7175f6950377904b7e722aea2cf7f2d095f7eb74 100644 GIT binary patch delta 1536 zcmYLIYfu|i6#nieo6T+(BH@jdgh(Mx!0@tADqx{Jia;r)&{V4=us|>b2uY>3HP!mY zTJb6tU#+%Q9kmw6;gy-z-|b)j>EF)ur!)Sqo?RZDo!N8GJ?DPsJKsGw<-X@myZdnC zHh>1)lpyfGM5jrDc_G)G!C-Eg8qpM(Agd5z;m56i@*(AlO+hBIC1f#pc+i%$a576& zk%QcY8ILocA#);lD(Fwd!x8_1SS)zDD?A%lkO$d{T?=b%mO{8BIJwMxbgT$&Uc-D< z#SCI1K3ZO9Lm^63l)}xBHLJy2#)Gloa9oSEMu(?H!qG7qd*GAc<%_JC0LoC#H&|(r zAC(d+wyQ_Axc^vRmvKgmsi;CV7la=6G(RE~SZY<&VIQ9nTCIiHui_ar@Y_NiIZY~_ z#R2|MXtcDTRl-5uZYrcIZD{A3X+l1P=OlD8RB^xAr#2_Tkr5rf3*FpqJ|Q2*5edBv zwG^(UV|_TvZ<;;q82`t-uV@ef3CFi7MuO2Xf9u?^HXRR7MOB=@^Sn~@*lHE@<3(L@ zH;>3enT{?)Pb2+kJVpxa=Xd2j_H<1bL~9F2w4UIk#(U*L{;wRBV_I-ThmG+6lmO?p zgw=*PPDx1c8L^5;y@EM@O)R%EysBavXSl`EaPS;M!J|5TiD*1LsqL_{B1yC#{F=Id zY0+hXyY63Ke(?Ku3eMtno$DKnZX{jE=T|Kme8ASgE7X9Zpat)!co*;Slx4s&kBbsM z;Jc(6V(}p^@m{IlI*$cizmNIPQj`1%7A1Vju$Ma}FaKLoDe*I0=6-82SJVrEWwsSUSJgk zU0%oI>v%#y((8C~9lHgT{|3(*o~jqUj+%UN1ABpW)SKX4M5cgrLz%7c_)X zj1dhF+!&`lk+2*HV}e#MQ#@xYKN&=13uF|NbRbGWD@^ut5(YCdMP9Z@H9^%tbwCwB z*t*)&nAuS~X0W?J0DARYQf-!jG(UZ-JB70W$7^M)IDf~eq)oRLK7kKj9bT{|^U06z~85 delta 1401 zcmZWpTXR!Y6#mXRNltRkPHL03AuST9g@&Xtt);XSOR2S`S5Pd~6fGoefYz8on<9u9 z@P=3s%kn}&D_#b5Iym4%uQR~-rVcYc_^QJnQ2v4A+NbU4jF~xmt^Mt_*Z$VG*5sGc zrBeUTe=pt!(17m^sL*uS1nh83#!B4=oN(zd1WX9}U5Sue4Fx?4e8Y+3iP(5{C>?7W z9Zj6<8XC(Qa6@wmK!JTcdnj6G!iN%pwS4B$0_Hjd zb*vZIfKrNTWz?&cZz#h?9h(Ho5n6pMlgh^S?d@vG42%q>Mrm5xt%T`Mt=Lf^5XGb9 zwzW8Ys1&HeW7KD>L2wjE|2w&|!B*pA2P58FCY?8D{`H0szX(1a)Gn7xK( z?0x2wXwlIsunTQuI_jyz5i0IjrI1c!4#!$f45W@`hek3wx@gR?&DoCK0(R`j9yO~FX_k#jNqt(Dtcg4 zQPS*jrZFn38>8E1qh}n)b-XNa0w)y~<$)2VN+GC8l-X^~Ea_zOH`9}{)NLI~r>IXa zp&R;IQuTfs*URZAJwvt1H0^Z8DQ0Y^Dd#v1h!71MaXK%m^79<{+`u(_q2o*0k+0}S zQBHq}t8~GAJ-44{Oa5$ZdAgwB72Z{|RoL3Yb5L%vqv8~=au9(64lcy2?1|+doW^Us zb0LQ_&}0H7%+|qJGBOW+3g!~r@j2vmg}o0gz^fwcU9*5<6}jjScz7O<)Z4?}%>nx& zBESM-8o~>xRuHhwqqbre4Ut(ie*=HLeF>fMfPEI-i+CEC!`?f$m_!~r(2aH`CTVWv zi3ft<>E)A+@bkC^u^AzRQHvOwQOR>u#dm6Qe65;?WD62}P1e-L*Fq@8S-j4I?12|= z;7#_p7QBVG*-Gym-mz*=;ylMmRg!p@Jh|NqWp$a6&3ehtD)lH}jr(qPFX3R^o2;0_ z;2rBJgZ~^>74cZ%4UFvIrZrlHu4hc-7?SnL3jFv8AG4L7tU$3USnjbzE;1r{^N@5h zYm2l?Ti`O=bvWFX! z&kd5@Sk}*r%b4OFC;A^ViAZKrLS}QB&A+l;;Ww@_qT*A0#@55$GzWiet=I9bhe3mZ K?=XWK2>b(3zxIIu diff --git a/crm-base/target/classes/com/crm/base/utils/PageConverter.class b/crm-base/target/classes/com/crm/base/utils/PageConverter.class index 069bd0712bf1fa0cfb68e7fd6a4de95f3e0da0fc..7494cace49474e1178434f9c141216e3464b7209 100644 GIT binary patch delta 1198 zcmY+C>u(fQ7{-5RcV^FaI}}=aVGH)c7U;#MrGUU%6j~^@P@oozZKW`5hj#0BEA14q zD#c3`FdE58G)*)le(6`mWT_hcsELW64JQ5p;&)?=p}w-bLUHM%_aWzHFOzXrNJ;r?dWmo0;|U%)5g@PdYSHr_f`b-=CiIG%a_2Yj54h ze$7*gqV-X|u0QT@fP>OJna(Qg`ktPK9?jE=q;Yj}TZ|-!0RcfUWK&W<_s(jn?fFd5@CeVQ|h-LfifE{C?r zi0A1y*F){GK;{=51~_Lr!yS=9hBZUx<8b9xhnF}nr<-*B)VMd3KlhO4f}%A)=Rr7L z?UK@5dQ7&Csi}5>c0z9WqRslmsJ8IlRIZ^O4mTA7RG9 z=Zdf%^=49mAXgn;<(m21nm6A>J~W?4s!W%jwBJ+g88#PnrFjspFn{QB^Jz3OFZ|>p zDk_6(AYPa#TK5kvn5SIn}eDUs));aS;AJf34tfX4^b5mP&Z|dmiTUCj_MyN3QUe2))#1NiP&1W za9EtCRk&#tE-0mSiQ*tHiG@i&Ats$HXFq@yIgSC8B|y?$0rME^dD*9Id=ANs7d;mZyf@ z)Uu!L9HYkkUa(_6IP_jQubhY1n9JAQ;C0>*wYnJOP4U9?af<8AOWhdzxWQYZ!P`8Uh3gLCx?81SXC{2#JPFUL=A%BVvdU^Oy|dFgOefLyQ;$ ziNRM^)GZe*EUVnG)o4vnOUsoDOV{q)>)LW*S>ov)%b4owKIfiu?y2+t=kGu2eyi*M z;qR}$1&;ASm@)zy%f%+BsG3V&OU84_d?tSO>RdWiPy`d%e71005$Ncg4C4^egk8#U z&5g2lvsJclppsphDwk?%6x9z}4CV{zOnOn_Wb=i|WNta_cNz4$)VkE+Ds(1Yn8>cA zHT9-0kcd6b9!Rx2SM z)Nfp=H#=6}(LrSVVV4m`CF-N}M_ClUuEzyyYS!aT&->nzPusNStfI?|J6+8o#(7>d z;qn6K9^$-Du%(lE^OGHM9L~GE$dvirZgs}F;PMg|O(fXrjB(lJ3Q02*9B&vS53h>d~yF?4_D4*p8Up-y;?4wUYJRn zD%EL5)JNt!y~iBVcg-()UcGHboMH2;x?3(XNThPUn9PSx+v+iq9w-_;zQha2Swtw2 z1vwoQtHj#T`>4;vDdSc7dU}OgEK$#E;<=?F7Fm*0hyu&fNE)a+(n?G0<7g56J(Zp* zQel094sTH&T`is0PfB8UDZjgv57qL>7S&!{0_(LjZu3~**R)JUn(wo>*Ott_ZT4?+ z#`B6C*yeC=@E(bVV3EEe&u$WJu&r+xn+n|HIVqYfGQCN8LvWi*TR5I=yE;)MeZIl| zRED&CaEGZ7KO#>P2WS?RwV0-G+o}h&N4Uv|EU)pp025eT=MBGljTPP$8v2>yhIj$d z#u#sLQ*NwEg-1~-vL=yR5*a2`6Bw}mqQ^84_PQqKJ^6`4Rh8p?4=U;sP EAFbx%IRF3v diff --git a/crm-base/target/classes/com/crm/base/utils/ServletUtils.class b/crm-base/target/classes/com/crm/base/utils/ServletUtils.class index a1aca1d16f367f4df0ce03024af05cfb408df1c2..b171ba3392da6e7fad40376fb8931c524442a0d5 100644 GIT binary patch literal 1967 zcmb7FT~ixX7=BKYvYTZQ8bYKBRA*_~u*-#6_RwAKbQ|nAGoHPK$d@XRWp+>WX1t-t}DdF+)5%{fHq^ z@*BcJ97!8zFu*WeaXoRr+pY=ukk?v*Ayx6~y!D7nSI>Kk3AO143{#cY&?qukO`#r$ zue%~3_q#8pEDG_@~-_iUWUy9O>WWM7Z@941Mi%Yswy7%pYWFV9U}rM`L1qPEbnB?}Da1~G|g z8y9hjjO~$6w0Zv%%3$>D!qC4N4LC2|r-%wItqQg2H`clKr4o`Xr8O(HT;Zv5hkO@m zc8soxt3;#gZF~N%XW}~DyS>7OFL$|Yh=v|nn8i&SAK?}Sy20IcM?DEI?PI+&Z_`6S zmw1GH&s#yc>G@KW=p|qnJ4vv|CKd=|UHW@Z3K6$LdELYkDfDHfaBN-c_=%0XxI*p; z4bb+LSZp+;iBB2WjHXbw@flV$Ij{Fw$ZSoCYr z7Z^f?nx7Lo`e3tJh2Lu$LhHD@OiAW+nFwR&F2TKhb;olw#vY@}&uK>_t9< za=nGODP|%>h#eqhAhTeQnn`^PUX3ty62b%_O!k5BJ|U3psY)%vSM=5OQVo|Y`DYl) z=YB&rhLaF3kR}&HgiLe>IppbV0wb6~fjA$nW|FFz#Rs&1hEbrF?n7LO3S%)kq+!1! z*p=L07)Z@M&84n|(3-|*ejhh}fSsD7LGgRoxzwFkZ7!a=X;D2T2Ay;~pSrh?tUi7xN_J-D8bb4iH`kRj)-8hQMv{Z7vmef=JofRI2GL)91LgoHmlQaT;R` zgQ1b2>3e}-nC{6+Bu!? zxZER9h5N^V;Wf!rh?)1piuLCDe@F8!|86gp2p#j z=XL4tJ$B7%qLRlHZaQ zao5$Pp6cwE8I1%J)L#aTL(mK~^c(~Y5IW7$%Jgmecd*}RV_=cKdSrq+JBE{3qMaQH zA&;-Ud~$_4WMEv-6Uis6G|<|T$Q=@=1=N5FtyXr74Nw`;Z8t i6HTlWIT0mE#1Ak?$vx2Hdon&6AMGEfxBH}L;KBcKJl!+^ diff --git a/crm-base/target/classes/com/crm/base/utils/TreeUtils.class b/crm-base/target/classes/com/crm/base/utils/TreeUtils.class index 8ff4e4a909a568e91169e52493679097301a1676..995fb98e16c9a2986adf3c38388d5931ac2295f3 100644 GIT binary patch literal 4129 zcmbtWOLQAo8UC(bBgx~$Ns}}pbxqr}jUS0h(~?GV9TKG`2H9zC$EBe>#?siHcr+ts zMrloW)0XmVDbKX9&Ni^1adQp_7Hl{iHmq2%WDQ#m9Nh2T8I8uanp4WLkM5oS{_p?$ z|9k)V-* zUojhjKyK1V?pStHdL?k}SY7!eJuTNQKd2_YS2|83uw17+9c}*i!*f>6 zb^K1t^s1u?&B_uzS+G_eBj|Ya;Cl?p1Q+M=DaxBjOKTN$q zq^=#IgbqyY3NfS?aTgA1I3RF;!zr(I0@t<64c9aIW7|Z4OmU4{2@)NLaJPVF`A@al z!G=I78Li|B1*)T$HIxMI>Xq-T=NTI^vqc<6LBl-)`+BDr41aCGbM^d2;{B6^o+pu1P&cb)@>%DR|oJQ9@g*>q1e;VJ=Jjxqr|aezDRT*=xRvT zbpYcyu3X#gL=Nezz*4EA(0bRCc3aWy(ZsaGE7pGyFLf0o#(vX6Nik=d95#qJqMH4uC1?>luNOZnUbSc16U* zokdNwBa$`A%EUC zgW4KrB+J=Pv=Ktn30J=T4@APE#KdM0P06GnDu z`>5Y&cgOv~gh9y~4jX|76ZBotN+vZ31y1+l>xCvc6C6DYQ}pma;)KCYMk>>k5l9XU z1|$y??AsL$E(Atnom|l!HZ*GnYi^U(Fj^*u4ezr;z?V5E7;c&pu;A0%opOBE^zm@ z$r2w_<@NG{ju+*%QMCLyH&8c65dvS-(SjrU z4c==TI$p!;>_mdBOA`1~(!)qHRDQv5nzrd5t-J1eryapr8CVEB%UMlQwh1n>Uq9Gk zX!6doQTmdR)(qQT;PqYIo5Od9P?j+Gv5uGUG6_E#!pp?fjN_PI%{F}BBp|PIWb8^< zzpypD#nCB?Qb>@=$o6Jo{<#LV_0epjL7-iOu^EJq46#vd} zonZmy`4F=3I9}!Y22SHGK4N~2D*nQ#{*Ed9gWvx`O{8&NWHGJku_85#JeKe*b<5qS z@SLm>cbBqo@bQ~H}lhP+=REk)^3e4Q0fQ^zpAL0VSTxhJXWtR%n5I){>GENR7(CM9LnhLQdc z2AStAI-BiQAjOfN?HnKTiRl6up}+Twt%FTi#M%~=h{~Qx^TsY4xfPGz=Sp3+7PngM?k=K5QHORdPENCOnX?gwFNjJk6Ikw`3M({}EoSwmvN`#KzB*Wq8iAD#YEdWW z^kvl=#8@KRpFEY*;A>iQAc$(La&Q+Kr0ZK1Y(zw0wS#-mB)9nL2_7FLzWqhH5;%|;64YN5dTjprprF#K&TS2 zAU2@O!DeicUl_e*+wg!uw}S_$*h$zbA2?5haBus2l5}8$m9~KOjeQcup+U} zMlbpV`W*~lmu&Ml$o>9UgCBbw?1iJjPG$Qia@)sGfUp@0?X#Q4Z)qH$!3S%Z_w zWFreU%5h({+#U$agMrraB^KVaaUO38yzSr}yelsRBJ#_?%{5^(@ugHZde6bjI2Xn_ z4bIL?COO%iPGqymtiXpFBJvNrPTmR#TI;g>&2GsL(UR)V;7U_M!{bUet{PV}dKKE| z40Iggf8}3b8Izae2}Vva35Sv3Qvf440-q|NkFivMdvnoQh)W1wM`-_5ESb5EFxQH> z5iMY;hIrm|%>rBvmr$>wdhS`S5p%5q?$%Mj8Xd!*%-y_>R^slBn+)WJVd!kOTvVUNO=OyF*gN0?`cO|=5QP*7kWL7{Cu-h3(ayYeVXtX0!#izSRg7;eH#%k-r&U@UR=re zFAUs<9>g;Qlp8!Ccth~eU?bpJ{&bw7?KsXw8)~&&E$$D^;*q}Lq8H8PnWFstEhX(Y zF;LRec7~@qT@$C7_@Fd(%~|Zegm5!$F^ji5@5`$45$vJq_ENz?sy2jO z80OPHPqz- - + @@ -15,7 +15,7 @@ - + @@ -30,7 +30,7 @@ - + @@ -49,7 +49,7 @@ - + @@ -57,21 +57,21 @@ - + - - - - + + + + - - + + - - - + + + - + \ No newline at end of file diff --git a/crm-base/target/surefire-reports/com.crm.base.security.DataVisibilityTest.txt b/crm-base/target/surefire-reports/com.crm.base.security.DataVisibilityTest.txt index 8a60ccf..f65e757 100644 --- a/crm-base/target/surefire-reports/com.crm.base.security.DataVisibilityTest.txt +++ b/crm-base/target/surefire-reports/com.crm.base.security.DataVisibilityTest.txt @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------- Test set: com.crm.base.security.DataVisibilityTest ------------------------------------------------------------------------------- -Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.162 s -- in com.crm.base.security.DataVisibilityTest +Tests run: 17, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.099 s -- in com.crm.base.security.DataVisibilityTest diff --git a/crm-base/target/test-classes/com/crm/base/security/DataVisibilityTest.class b/crm-base/target/test-classes/com/crm/base/security/DataVisibilityTest.class index f11a7a84ebbd72ce5f0c50feb6f983899968e535..2423c3c00b66dc8cddd097388098695d492e74d8 100644 GIT binary patch literal 8862 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 literal 8936 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 CzI#Ie diff --git a/mcp_call.py b/mcp_call.py new file mode 100644 index 0000000..316c9cd --- /dev/null +++ b/mcp_call.py @@ -0,0 +1,72 @@ +import sys, json, urllib.request + +URL = "http://127.0.0.1:8000/mcp" +HEADERS = { + "Content-Type": "application/json", + "Accept": "application/json, text/event-stream", +} + +def post(body, session=None, timeout=1200): + h = dict(HEADERS) + if session: + h["mcp-session-id"] = session + data = json.dumps(body).encode() + req = urllib.request.Request(URL, data=data, headers=h, method="POST") + resp = urllib.request.urlopen(req, timeout=timeout) + sid = resp.headers.get("mcp-session-id", session) + # read SSE stream + result = None + for raw in resp: + line = raw.decode("utf-8", "replace").strip() + if not line or line.startswith(":"): + continue + if line.startswith("data:"): + payload = line[5:].strip() + try: + d = json.loads(payload) + except Exception: + continue + if isinstance(d, dict) and ("result" in d or "error" in d): + result = d + break + return sid, result + +def main(): + tool = sys.argv[1] + args = json.loads(sys.argv[2]) + outfile = sys.argv[3] if len(sys.argv) > 3 else None + + # init + sid, _ = post({"jsonrpc":"2.0","id":1,"method":"initialize", + "params":{"protocolVersion":"2024-11-05","capabilities":{}, + "clientInfo":{"name":"pi","version":"1.0"}}}, timeout=30) + # initialized notification (no response expected) + try: + h = dict(HEADERS); h["mcp-session-id"] = sid + req = urllib.request.Request(URL, + data=json.dumps({"jsonrpc":"2.0","method":"notifications/initialized"}).encode(), + headers=h, method="POST") + urllib.request.urlopen(req, timeout=15).read() + except Exception: + pass + # call tool + _, res = post({"jsonrpc":"2.0","id":2,"method":"tools/call", + "params":{"name":tool,"arguments":args}}, session=sid, timeout=1800) + if res is None: + print("NO_RESULT") + return + if "error" in res: + print("ERROR:", json.dumps(res["error"], ensure_ascii=False)) + return + texts = [] + for c in res["result"].get("content", []): + if c.get("type") == "text": + texts.append(c["text"]) + output = "\n\n".join(texts) + if outfile: + open(outfile, "w", encoding="utf-8").write(output) + print("WROTE", len(output), "chars to", outfile) + else: + print(output) + +main()