BaseMapper<T>,lambda 查询用 Wrappers.lambdaQuery())solon-serialization-jackson)solon-view-thymeleaf)org.sqlite.JDBC)、DuckDB(case 库,通过 duckdb_jdbc)、RocksDB(本地 KV 存储)com.qingjian/
├── App.java # 入口:Solon.start(),端口 8980,contextPath "!/js/a/"
├── common/ # 公共层
│ ├── cache/ # 缓存:GlobalCache(表/字段元数据)、CaseDataCache(人员/卡号映射)
│ ├── config/ # 配置:WebConfig(数据源/CORS)、MybatisPlusConfig(分页插件)
│ ├── constants/ # 常量(StrConsts, PathConst, RegConst)
│ ├── enums/ # 枚举
│ ├── model/<module>/ # 按模块组织的 DTO/Entity/Query,MapStruct 转换器
│ ├── rocksdb/ # RocksDB 封装(运营商归属、银行卡归属查询)
│ └── utils/ # 工具:GlobalPool(线程池)、Json、DataUtil、SlowDownProgress
└── module/ # 业务模块(每个含 controller/mapper/service)
├── ai/ # AI(Solon AI agent、chat、skill)
├── call/ # 通话记录
├── dm/ # 数据管理(文件导入、清洗、缓存构建)
├── govern/ # 数据治理(关系边计算、去重、时序图、分类树)
├── graph/ # 图谱/关系图
├── otg/ # 对象轨迹生成
├── person/ # 人员信息(基本信息和证件号/手机号/银行卡号库)
├── plat/ # 平台(SSE 推送、表管理、配置)
├── track/ # 轨迹追踪
└── trans/ # 交易记录
@EqualsAndHashCode(callSuper = true) 注解UserController、OrderService)findUserById、isOrderValid)MAX_RETRY_ATTEMPTS、DEFAULT_PAGE_SIZE)com.example.user.domain)com.qingjian.common.base.Query,示例:RequestQuery数据源通过 Solon 的 DynamicDataSource("db1") 管理,在 app.yml 的 qingjian.db1 下配置:
| 数据源 key | 数据库 | 用途 |
|---|---|---|
plat |
SQLite | 平台配置、表字段元数据、运营商/银行字典 |
case |
DuckDB | 案件数据(通话/交易记录、关系边、去重中间表) |
切换数据源使用 DynamicDsKey.with(StrConsts.DS_KEY_PLAT, () -> ...) 或在注入时指定。
# 编译项目
mvn compile -f pom.xml
代码编写完成后,使用 IDEA MCP 工具进行代码编译验证。