# ai-brain **Repository Path**: ppyofficial/ai-brain ## Basic Information - **Project Name**: ai-brain - **Description**: ai-brainai-brainai-brainai-brainai-brainai-brain - **Primary Language**: Java - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-28 - **Last Updated**: 2025-12-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 项目立项 (人员和物品的配置) -> 需求分析 文档 -> 原型设计 axure 1、架构->DB->模块代码实现和单元测试 2、UI设计->前段设计 最后 代码整合 # 技术 jdk17 + undertow + nginx + springboot3 + mybatis-plus + elasticsearch + postgresql + caffeine + redis + easyexcel # 初始化脚本 - Jwt - satoken 权限 - 全局异常 - traceId Log4j2 + MDC全链路日志追踪 - ResponseBodyAdvice 实现统一返回格式 - @Clicked Redis 防止重复提交 - @Log 记录日志 - @Encrypt 实现回参加密 - @Decrypt 实现接口解密 - @My实现方法参数获取当前登录用户 + HandlerMethodArgumentResolver - TransferUpperTypeHandler 实现入库数据数据可控大写转换 - 用户信息加解密 - 本地缓存 Caffeine和redis缓存 - 入参数据校验 - 用户统一鉴权设计 - EncryptTypeHandler 实现字段的可控加密 - @Xss解决Xss漏洞问题(入参应该使用dto,不能用Map数据类型) - mybatis预编译防止SQL注入漏洞 - 大文件分片上传 - 报表工具 - 三方接口调用出错的重试 使用spring-retry 方式进行重试 - 生产数据库连接加密 - kkFileView 实现在线预览 - tika 获取上传文件内容后,用于ELK文件检索 - 邮件发送 - xx-job定时 - excel统一导出模块(可以做审批 + 大文件的下载 + 邮件发送给某人/一些人)(待开发) - 动态权限(待开发) - 独立系统文件管理(待开发) - 数据脱敏(待开发) - 保证接口安全 + 加签 + 验签(待开发) - Redis实现滑动窗口限流? - 文件断点续传? - 统计在线人数? - oss 用户头像上传 ? - 单元测试框架 H2 + Mockito - 短信验证码的生成 & 限流 & 发送 ''' function uploadFileInChunks(file) { const chunkSize = 2 * 1024 * 1024; // 每片 2MB const totalChunks = Math.ceil(file.size / chunkSize); let chunkNumber = 0; async function uploadChunk() { const start = chunkNumber * chunkSize; const end = Math.min(start + chunkSize, file.size); const chunk = file.slice(start, end); const formData = new FormData(); formData.append("file", chunk); formData.append("chunkNumber", chunkNumber + 1); formData.append("totalChunks", totalChunks); formData.append("filename", file.name); await fetch("/file/upload-chunk", { method: "POST", body: formData, }); chunkNumber++; if (chunkNumber < totalChunks) { uploadChunk(); } else { console.log("Upload complete"); } } uploadChunk(); } '''