gz-oarms/CLAUDE.md

146 lines
6.5 KiB
Markdown
Raw Normal View History

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Build & Run
```bash
# 编译(开发阶段跳过 checkstyle
mvn compile -Dcheckstyle.skip=true
# 完整编译(含 checkstyle
mvn compile
# 打包(默认跳过测试)
mvn clean package
# 本地运行(因 ZIP layout 无法用 spring-boot:run
mvn dependency:build-classpath -Dmdep.outputFile=classpath.txt
java -cp "target/classes;$(cat classpath.txt)" -Dfile.encoding=UTF-8 com.chinaweal.youfool.prj.YoufoolApplication
```
- 默认端口 `8081`(环境变量 `PRJ_PORT` 可覆盖)
- Context Path 可通过环境变量 `PRJ_CONTEXT_PATH` 设置
- 环境切换:`spring.profiles.active` 设为 `dev``prod`,对应 `application-dev.yml` / `application-prod.yml`
- API 文档:`/doc.html`Knife4jDruid 监控:`/druid`,账号 admin/123456
- 公司私有仓库:`-Pcompany-nexus` profile
## Architecture
OARMS — 广州市户外广告监管系统后端Spring Boot 3.4.5 + JDK 21 + 达梦 DM8 数据库。
### 业务域与模块
5 大业务域、10 个模块,按域组织在 `modules/` 下:
| 域 | 模块 | 包路径 | 表前缀 |
|----|------|--------|--------|
| BS 基础 | 大屏管理 | `modules/screen` | `bs_` |
| LB 法律 | 法律法规 | `modules/law` | `lb_` |
| MR 监测 | 监测规则 | `modules/rule` | `mr_` |
| AM 监控 | 录屏设置/任务/画面监控 | `modules/monitor/{config,task,record}` | `am_` |
| CW 取证 | 固化取证/规则关联/线索生成/线索转办 | `modules/evidence/{record,relation,clue,transfer}` | `cw_` |
核心实体依赖链:`SCREEN(BS-1)` → `AM-1/2/3`、`CW-1``MONITORING_RULE(MR-1)` → `CW-2`、`CW-3``EVIDENCE_RECORD(CW-1)` → `CW-2/3/4`
### 分层结构
每个模块遵循 Controller → Service → Mapper 三层,实体包内分 `query/`、`req/`、`vo/`
```
modules/{module}/
├── entity/ # Entity + query/ + req/ + vo/
├── mapper/ # extends BaseMapper<Entity>
├── service/ # I{Entity}Service + impl/
└── controller/
```
### 关键约定
- **事务**:必须用 `@DSTransactional`,不能用 `@Transactional`(动态数据源要求)
- **数据源**`@DS("master")` + `@TableName(schema = "OARMS", value = "表名")`
- **Entity**:继承 `SuperEntity`(含 createBy/createTime/createName/updateBy/updateTime/updateName不含 id
- **DI**`@AllArgsConstructor` + `private final`
- **返回值**`RestResult.ok(data)` / `RestResult.ok()`
- **日志**`log.info("[OK] 操作描述: key={}", value)`
- **Mapper 扫描**`com.chinaweal.youfool.prj.**.mapper`,新模块放此包下自动注册
- **API 路径**:所有接口以 `/api/` 开头
- **对象映射**:新模块推荐 `BeanUtils.copyProperties`,而非 MapStruct
- **删除接口**:用 `Map<String, String>` 接收 id
- **选项接口**:返回 `List<Map<String, Object>>`label + valuevalue 保持自然类型Integer 状态码 / String ID
### 数据源
两个数据源,通过 dynamic-datasource 切换:
- `master`primary→ OARMS schema业务数据
- `youfool` → YOUFOOL schema框架日志restLog
连接配置在 `application-dev.yml` / `application-prod.yml`,不提交敏感信息到主配置。
### MyBatis 配置
- 配置文件:`mybatis/mybatis-config.xml`
- 开启 `mapUnderscoreToCamelCase`DB 列名自动转驼峰映射 Java 字段
- 分页插件:`MybatisPlusInterceptor` + `PaginationInnerInterceptor`
- XML mapper 路径:`classpath*:mybatis/mapper/**/*.xml`(当前模块未使用 XML均为注解方式
### DM8 数据库要点
- DDL/COMMENT/INDEX 中表名列名必须大写INSERT 中列名可用小写
- 日期字段:`@JsonFormat(pattern = DateUtil.DATE_DEFAULT_FORMAT, timezone = "GMT+8")`
- 日期时间字段:`@JsonFormat(pattern = DateUtil.DATETIME_DEFAULT_FORMAT, timezone = "GMT+8")`
- DDL 文件放在 `docs/db/sql/`,命名 `V{版本号}__{模块描述}_{ddl|init_data}.sql`
- DM8 精度上限 38`DECIMAL` 超过会报错,经纬度用 `DECIMAL(10,6)`
- CLOB 字段存 JSON 数组时Entity 返回 String前端需 `JSON.parse()`
- DDL 执行使用 Python + JayDeBeApi 连接 DM8详见 `docs/backend-module-dev-guide.md` B2 节)
### Checkstyle 要点
配置文件 `checkstyle-v1.0.xml`,开发阶段可用 `-Dcheckstyle.skip=true` 跳过。关键规则:
- 行宽 200 字符,文件最大 2000 行,方法最大 300 行
- 类名/方法名/成员变量:驼峰,最长 30 字符;参数名:最长 19 字符
- 静态常量:全大写下划线,最长 50 字符
- 非法访问成员:只能 `private``static final` 除外)
- 方法参数上限 7 个
- switch 必须有 default字符串比较必须用 `equals()`
### Swagger 分组
`application.yml` 中配置 `springdoc.group-configs`**当前仅配置了"基础框架"和"登录相关"两个分组**。新增模块需添加分组:
```yaml
- group: '新模块名'
paths-to-match: '/**'
packages-to-scan: com.chinaweal.youfool.prj.modules.新模块包名.controller
```
### 认证白名单
Sa-Token 拦截器在 `SpringMvcConfig`,白名单路径免登录:`/user/auth/**`、`/test/**`、`/doc.html**`、`/swagger*`、`/cms/**`、`/network/ping`
## PRD 文档路径
需求文档在 `gz-oarms-web/docs/prd-llm/` 目录下,按业务域组织:
```
gz-oarms-web/docs/prd-llm/
├── BS-大屏基础库域/BS-1_大屏基础信息管理/ # s1需求分析 s2实体定义 s4-api设计 s4-编码任务
├── LB-法律法规库域/LB-1_法律法规管理/
├── MR-监测规则库域/MR-1_监测规则管理/
├── AM-广告监控域/AM-{1,2,3}_*/
├── CW-内容预警域/CW-{1,2,3,4}_*/
└── DM-全局数据模型/全局实体字典.md # 核心实体跨域引用
```
## Development Guide
详细开发指南见 `docs/backend-module-dev-guide.md`,包含:
- A. 运行环境技术栈、数据源、Maven 配置)
- B. 工具编译命令、Python + JayDeBeApi 数据库执行工具、SQL 版本号分配)
- C. 记忆Entity/Controller/Service/Mapper/Query 模板代码、DM8 类型映射、初始数据约定)
- D. 评估(编译验证、数据库验证、模块完成检查清单)
- E. 边界(数据库/代码/编译禁忌)
- F. Harness Engineering全流程、模块开发进度总表、核心实体跨域依赖、待开发任务建议顺序
前后端联调指南见 `docs/前后端联调指南.md`,包含 10 个模块的接口清单、DTO 字段、数据库表映射及高频错误模式。