No Description

malk d54b2c6fcb docs: 新增项目 README 2 weeks ago
.claude 05cd43c158 chore(init): initialize mjava-ai with baseline spec and openspec workflow 2 weeks ago
mjava c1fa189160 fix(compile): 修复 Phase B 新增代码 + 2 处 shunfeng 历史歧义 2 weeks ago
mjava-com 7ea0adb311 feat(mjava-com): 通用能力 BaaS 网关最小脚手架(add-mjava-com) 2 weeks ago
mjava-guangming 05cd43c158 chore(init): initialize mjava-ai with baseline spec and openspec workflow 2 weeks ago
mjava-mcli 05cd43c158 chore(init): initialize mjava-ai with baseline spec and openspec workflow 2 weeks ago
mjava-pro 660b557f82 feat(mjava-pro): 多客户单部署子模块最小脚手架(add-mjava-pro) 2 weeks ago
mjava-shunfeng c1fa189160 fix(compile): 修复 Phase B 新增代码 + 2 处 shunfeng 历史歧义 2 weeks ago
openspec 4fcc72ca6f chore(openspec): archive Phase B 3 个专项 + 更新索引 2 weeks ago
.gitignore 05cd43c158 chore(init): initialize mjava-ai with baseline spec and openspec workflow 2 weeks ago
CLAUDE.md 4fcc72ca6f chore(openspec): archive Phase B 3 个专项 + 更新索引 2 weeks ago
README.md d54b2c6fcb docs: 新增项目 README 2 weeks ago
pom.xml 7ea0adb311 feat(mjava-com): 通用能力 BaaS 网关最小脚手架(add-mjava-com) 2 weeks ago

README.md

mjava-ai

Java 后端基座 + 多客户子项目聚合仓库 技术栈:Spring Boot 2.2.13 + MySQL + JPA + QueryDSL + Hutool

定位

mjava 是一套可复用的 Java 后端基座,封装企业办公常见第三方平台(钉钉 / 宜搭 / 飞书 / 北森 等)的统一调用、鉴权、审计、持久化能力。每个客户需求作为独立子项目接入,引用基座 jar,只关注业务逻辑。

第一阶段约束:仅 Spring Boot + MySQL,不引入 Redis / Docker / K8s / 消息队列。

仓库结构

mjava-ai/
├── mjava/                基座 jar(被所有子项目依赖)
├── mjava-mcli/           客户模板 + 最小启动实例
├── mjava-shunfeng/       客户:会议聚合(腾讯会议/Zoom/钉钉日程)
├── mjava-guangming/      客户:钉钉 SSO 邮箱
├── mjava-pro/            专项:多客户单部署(宜搭应用表驱动)
├── mjava-com/            专项:通用能力 BaaS 网关
├── openspec/             规范驱动开发(changes / specs / archive)
├── CLAUDE.md             AI 协作入口(本仓库 opsx 工作流指引)
└── pom.xml               聚合 pom

基座能力(mjava/)

所有子项目通过 @SpringBootApplication(scanBasePackages = {"com.malk"}) 自动扫到。

核心工具 com.malk.utils

能力
UtilHttp HTTP 请求统一入口(Hutool 封装,GET/POST/PUT/DELETE/PATCH/UPLOAD/DOWNLOAD/SOAP)
UtilToken access_token 内存缓存(TimedCache,自动冗余 -5s)
UtilSignature HMAC-SHA256 签名 + SHA256 + 常量时间比较
UtilMap / UtilList / UtilString 集合/字符串常用辅助
UtilDateTime / UtilNumber / UtilMath 时间/数值处理
UtilExcel EasyExcel 封装
UtilFile / UtilServlet / UtilConvert IO / 类型转换
UtilEnv / UtilMc / UtilImport 环境 / 杂项

响应与异常 com.malk.server.common

能力
McR<T> 统一 Controller 响应(success / code / message / data / source)
VenR 第三方原始响应基类(assertSuccess()
McException 业务异常((code, message) 构造)
McREnum 错误码枚举
McPage 分页封装

过滤与拦截 com.malk.filter

能力
TraceIdFilter 请求 traceId 注入 MDC,X-Trace-Id 响应头回传
CatchException 全局异常处理(@RestControllerAdvice
RequestInterceptor 请求日志(point logger)
AuthFilter + AuthInterceptor 请求鉴权 + 防重放(HMAC + 时间窗 + Nonce),默认关闭
NoAuth 鉴权豁免注解

持久化 com.malk.base

能力
BasePo 实体基类(自动审计 createTime/updateTime/createBy/updateBy)
BaseDto DTO 基类
BaseRepository<PO, ID> JPA Repository + QueryDSL 基类
BaseDao / JpaMap DAO 辅助

配置 com.malk.config

能力
WebConfiguration MVC 拦截器注册 + CORS
DataSourceConfig 多数据源(spel.multiSource=true 开启)
JpaConfiguration JPA 审计
OpenApiConfig Swagger UI(swagger.enable=true 开启)
AsyncConfig 线程池 + MdcTaskDecorator
AuthConfigProperties 基座鉴权配置

第三方对接 com.malk.service.{vendor}

Vendor 已覆盖 Domain
dingtalk Contacts(v2 对齐 27 方法)/ Attendance / Workflow / Notice / Storage / Group / Schedule / Event / Personnel / Report / Extension / Dedicated
aliwork(宜搭) Form(原子 16 方法)/ Process(原子 13 方法)/ 旧聚合 YDClient(保留)
beisen(北森) Employee / Attendance
teambition Client / Service
fxiaoke(纷享销客) Client
h3yun(氚云) Client
vika(维格表) Client
xbongbong Client
ekuaibao(易快报) Client

每个 vendor 遵循 Client(原子)+ Service(组合)两层分层。

其他模块

能力
core/AsyncConfig + MdcTaskDecorator @Async 线程池 + MDC 传递
core/NonceCache LRU+TTL Nonce 去重
delegate/ DDEvent / TBEvent 委托回调
schedule/McScheduleTask @Scheduled 定时任务基类
repository/dao+entity/{primary,slave}/ 多数据源示例

子项目速览

子模块 端口 Context 状态
mjava-mcli 9001 /api/mcli 新客户模板
mjava-shunfeng 9002 /api/sf 生产客户(顺丰:腾讯会议/Zoom/钉钉日程聚合)
mjava-guangming 9003 /api/gm 生产客户(光明:钉钉 SSO → 德惠邮箱)
mjava-pro 9010 /api/pro 专项骨架(多客户单部署,宜搭应用表驱动租户配置)
mjava-com 9020 /api/com 专项骨架(BaaS 网关,HMAC 签名 + 限流)

核心约定

  • Controller 返回 McR<T>;业务异常 throw new McException(code, message)
  • HTTP 禁三方 SDK,统一 UtilHttp / DDR.doPost / DDR_New.doPost
  • Token 禁每请求重取,走 UtilToken(key {vendor}:{appKey}
  • 鉴权参数从 application-{profile}.yml 读,禁硬编码
  • JPA + QueryDSL 持久化,不与 MyBatis 混用
  • 生产配置 application-prod.yml 不入 git,*.yml.example 入 git

详细规范见文档中心 /Users/malk/Desktop/Tech/claude/后端/CLAUDE.md

快速开始

# 编译
mvn -pl mjava-mcli -am clean compile

# 打包
mvn -pl mjava-mcli -am clean package -DskipTests

# 启动
java -jar mjava-mcli/target/mjava-mcli.jar --spring.profiles.active=prod

新客户接入

cp -r mjava-mcli mjava-{customer}

# 1. pom.xml: artifactId=mjava-{customer}
# 2. Boot.java: package=com.malk.{customer}, 保留 scanBasePackages={"com.malk"}
# 3. application-*.yml: server.port / context-path / datasource / vendor 凭据
# 4. 根 pom.xml <modules> 追加

mvn -pl mjava-{customer} -am clean compile

详见文档中心 /Users/malk/Desktop/Tech/claude/后端/CLAUDE.md → "子项目接入流程"。

OpenSpec 扩展

本仓库内 openspec/ 驱动演进:

/opsx:propose   # 新 change 提案
/opsx:apply     # 实施 tasks.md
/opsx:archive   # 归档完成的 change + 自动合并稳态 spec
/opsx:explore   # 需求/约束梳理

已归档稳态 capability(位于 openspec/specs/):

capability 覆盖
project-baseline 仓库级基线指针
crypto-utils RSA 加密工具
yida-form-atomic 宜搭表单原子接口(16 方法)
yida-process-atomic 宜搭流程原子接口(13 方法)
dingtalk-contacts-v2 钉钉通讯录 v2 对齐(27 方法)
request-auth + replay-guard 基座 HMAC 鉴权 + 防重放

文档索引

文档 用途
./CLAUDE.md 本仓库 AI 协作入口(opsx 工作流指引 + change 状态)
/Users/malk/Desktop/Tech/claude/后端/CLAUDE.md 后端开发主规范(必读)
/Users/malk/Desktop/Tech/claude/后端/.claude/docs/yida-serverside.md 宜搭 YDClient Java 特化规范
/Users/malk/Desktop/Tech/claude/.claude/docs/data-structures.md 宜搭字段数据结构(前后端通用)
/Users/malk/Desktop/Tech/claude/.claude/docs/search-field-format.md 宜搭查询条件格式
/Users/malk/Desktop/Tech/claude/宜搭/CLAUDE.md 宜搭前端 JS/JSX 规范

远端

https://mc.cloudpure.cn/vibeCoding/mjava-ai.git