提交一次配置文件

This commit is contained in:
2026-06-03 10:27:39 +08:00
parent 99f150be25
commit 7775f6eef4
18 changed files with 281 additions and 31 deletions
+224
View File
@@ -0,0 +1,224 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
---
## 📌 重要提示
**在开始工作前,请务必先阅读 `skills.md` 文件,了解当前任务的具体约束和技术指南。**
- **CLAUDE.md** (本文件): 项目通用知识库,包含架构、技术栈、开发规范等基础信息
- **skills.md**: 当前任务技能包,定义特定任务的范围约束、禁止事项和专项技术指南
---
## 项目概述
新疆油田健康管理平台 - 基于 JeecgBoot 3.6.3.1-plus 框架的微服务架构后端系统。
## 技术栈
- **框架版本**: Spring Boot 2.7.18, Spring Cloud 2021.0.9, Spring Cloud Alibaba 2021.0.6.0
- **JDK**: Java 1.8
- **构建工具**: Maven 3.x
- **服务治理**: Nacos 2.3.2 (配置中心 + 服务发现)
- **持久层**: MyBatis-Plus 3.5.6, MyBatis-Plus Join 1.5.3
- **数据源**: 动态多数据源 (Dynamic Datasource 4.3.0), Druid 1.2.18
- **数据库支持**: 达梦DM8 (主要), MySQL, Oracle, PostgreSQL
- **认证授权**: Shiro 1.13.0, JWT
- **文档**: Knife4j 4.5.0
- **报表**: 积木报表 1.6.1
- **对象存储**: MinIO, 阿里云OSS, 七牛云
## 微服务模块
项目采用多模块微服务架构,各服务独立部署:
| 服务名称 | 模块路径 | 默认端口 | 说明 |
|---------|---------|---------|------|
| health-system | jeecg-system/jeecg-system-start | 7001 | 系统核心服务(用户、角色、权限、租户管理) |
| health-consultation | health-consultation/health-consultation-start | 7010 | 健康咨询服务 |
| health-emergency | health-emergency/health-emergency-start | - | 急救服务 |
| health-watch | health-watch/health-watch-start | - | 手表数据服务 |
| health-im | health-im/health-im-start | - | 即时通讯服务 |
| health-bank | health-bank/health-bank-start | - | 健康银行服务 |
## 核心架构特性
### 1. 多租户(SaaS)架构
- **实现方式**: MyBatis-Plus TenantLineInnerInterceptor 租户拦截器
- **配置位置**: `jeecg-boot-base-core/src/main/java/org/jeecg/config/mybatis/MybatisPlusSaasConfig.java`
- **租户字段**: 数据表通过 `tenant_id` 字段实现租户隔离
- **隔离范围**: 用户、角色、部门、字典、多数据源等系统模块
- **非隔离表**: 菜单表、租户表不做租户隔离
### 2. 动态多数据源
- **配置**: 支持运行时动态切换数据源
- **主要数据库**: 达梦数据库 DM8 (国产数据库)
- **注解切换**: 使用 `@DS("数据源名称")` 注解切换数据源
- **拦截器**: `DmKeywordInterceptor` 处理达梦数据库关键字转义
### 3. 安眼系统集成
- **模块位置**: `functional-modules/xj-anyan-api`
- **执行器**: `AnYanClientExecutor` 实现与安眼系统的API对接
- **功能**: 统一身份认证、用户数据同步、登录集成
### 4. 环境配置
每个微服务启动模块都包含独立的 `.env` 文件用于环境变量配置:
```
PROFILE_NAME=dev # 环境名称
SERVER_PORT=7001 # 服务端口
NACOS_SERVER_ADDR=192.168.1.80:8848 # Nacos地址
NACOS_USERNAME=xjuser # Nacos用户名
NACOS_PASSWORD=Aa135790!123 # Nacos密码
NACOS_NAMESPACE=xjxc-space-common # 配置命名空间
NACOS_NAMESPACE_DISCOVERY=workspace_lian # 服务发现命名空间
NACOS_GROUP=dev # 配置分组
```
**注意**: `.env` 文件包含敏感信息,不应提交到版本控制系统。
## 常用开发命令
### Maven 构建命令
```bash
# 全量编译打包(跳过测试)
mvn clean package -DskipTests
# 编译指定模块
mvn clean package -pl jeecg-system/jeecg-system-start -am -DskipTests
# 安装到本地仓库
mvn clean install -DskipTests
# 分包打包(依赖和应用分离,用于Docker部署)
mvn clean package -P divide-package -DskipTests
# 依赖漏洞分析
mvn clean package -P bom-analysis
```
### 启动服务
```bash
# 方式1: IDE直接运行启动类
# 例如: org.jeecg.JeecgSystemCloudApplication
# 方式2: 使用 spring-boot-maven-plugin 启动
cd jeecg-system/jeecg-system-start
mvn spring-boot:run
# 方式3: 打包后启动
java -jar jeecg-system/jeecg-system-start/target/jeecg-system-start.jar
```
### Docker 部署
```bash
# 构建 Docker 镜像(在各服务的 start 模块目录执行)
cd jeecg-system/jeecg-system-start
docker build -t health-system:latest .
# 运行容器
docker run -d \
-p 7001:7001 \
-e PROFILE_NAME=dev \
-e NACOS_SERVER_ADDR=nacos:8848 \
--name health-system \
health-system:latest
```
## 代码规范
### 包结构约定
```
com.renkang / org.jeecg
├── modules
│ └── [模块名]
│ ├── controller # 控制器层
│ ├── service # 服务层
│ │ └── impl # 服务实现
│ ├── mapper # 数据访问层
│ │ └── xml # MyBatis XML映射文件
│ ├── entity # 实体类
│ ├── vo # 视图对象
│ └── dto # 数据传输对象
```
### Mapper扫描路径
`MybatisPlusSaasConfig.java` 中配置了全局 Mapper 扫描:
```java
@MapperScan(value = {"org.jeecg.modules.**.mapper*", "com.renkang.**.mapper*", "com.jeecg.**.mapper*"})
```
### MyBatis XML 映射文件位置
- **方式1**: 放在 `src/main/resources/mapper``src/main/resources/mapper/xml`
- **方式2**: 与 Mapper 接口同目录,在 `src/main/java` 下 (已配置资源过滤)
### 多租户开发注意事项
1. 新增业务表时,需要添加 `tenant_id` 字段用于租户隔离
2. 如果某些表不需要租户隔离,需要在 `MybatisPlusSaasConfig``TenantLineHandler` 中排除
3. 租户ID由拦截器自动注入,业务代码无需手动设置
### 动态数据源使用
```java
@Service
public class UserService {
@DS("slave") // 切换到从库
public List<User> queryUsers() {
// ...
}
@DS("master") // 切换到主库
public void saveUser(User user) {
// ...
}
}
```
## 项目特定依赖
- **Aspose Words**: 文档处理库,用于生成Word报告
- **EasyExcel**: Excel导入导出
- **POI-TL**: Word模板引擎
- **极光推送**: 消息推送服务
- **微信小程序**: 小程序API集成
- **北郊工具**: 膳食摄入算法工具 (`yixiong-tools`)
- **重庆风险评估**: 健康风险评估工具 (`cqRisk`)
## 重要配置文件
- **根 pom.xml**: 定义所有依赖版本和Maven仓库配置
- **application.yml**: 各服务启动配置,从Nacos加载配置
- **.env**: 环境变量配置,控制Nacos连接和服务端口
- **Dockerfile**: 各服务的容器化配置
## 开发工具推荐
- **IDE**: IntelliJ IDEA
- **数据库工具**: DM数据库客户端 (达梦官方), Navicat (支持达梦插件)
- **API测试**: Knife4j Web UI (启动服务后访问 `/doc.html`)
- **服务监控**: Nacos 控制台
## 调试建议
1. 确保 Nacos 服务已启动并可访问
2. 检查 `.env` 文件中的 Nacos 配置是否正确
3. 在 Nacos 配置中心确认对应的配置文件存在 (`jeecg.yaml`, `health-system-dev.yaml` 等)
4. 查看日志目录 `logs/` 下的服务日志文件
5. 多租户问题排查: 检查请求Header中的 `tenant-id``X-Access-Token` (从Token解析租户ID)
+12
View File
@@ -0,0 +1,12 @@
-- 手表用户绑定数据视图
-- 关联 QH_WAT_DEVICE QH_SYS_USER查询已绑定用户的手表设备信息
CREATE OR REPLACE VIEW V_WATCH_USER_BIND AS
SELECT
u.WORK_NO AS employee_num,
d.WATCH_NO AS watch_no,
u.REALNAME AS real_name,
d.BIND_DATE AS bind_date
FROM QH_WAT_DEVICE d
INNER JOIN QH_SYS_USER u ON d.BIND_USER_ID = u.ID
WHERE d.BIND_USER_ID IS NOT NULL
AND d.BIND_USER_ID <> '';
@@ -8,7 +8,8 @@ ENV SERVER_PORT 7010
ENV NACOS_SERVER_ADDR nacos:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_NAMESPACE xjxc-space-prod
ENV NACOS_NAMESPACE_DISCOVERY xjxc-space-prod
ENV NACOS_GROUP dev
@@ -22,4 +23,4 @@ EXPOSE 7010
ADD ./target/health-consultation-start.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-consultation-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Duser.timezone=Asia/Shanghai -Djava.security.egd=file:/dev/./urandom -jar health-consultation-start.jar
@@ -3,7 +3,7 @@ SERVER_PORT=7010
NACOS_SERVER_ADDR=192.168.1.80:8848
NACOS_USERNAME=xjuser
NACOS_PASSWORD=Aa135790!123
NACOS_NAMESPACE=xjxc-space-common
NACOS_NAMESPACE_DISCOVERY=xjxc-space-common
NACOS_NAMESPACE=xjxc-space-prod
NACOS_NAMESPACE_DISCOVERY=workspace_lian
NACOS_GROUP=dev
FILE_SERVER_URL=http://fileserver.yg.dt.io
@@ -8,6 +8,8 @@ spring:
- optional:nacos:jeecg.yaml
- optional:nacos:${spring.application.name}-${PROFILE_NAME}.yaml
cloud:
inetutils:
preferred-networks: 192.168
nacos:
server-addr: ${NACOS_SERVER_ADDR}
username: ${NACOS_USERNAME:nacos}
@@ -21,7 +23,7 @@ spring:
password: ${spring.cloud.nacos.password}
discovery:
enabled: true
namespace: ${NACOS_NAMESPACE_DISCOVERY:}
namespace: ${NACOS_NAMESPACE_DISCOVERY:${NACOS_NAMESPACE}}
group: ${NACOS_GROUP:DEFAULT_GROUP}
server-addr: ${spring.cloud.nacos.server-addr}
username: ${spring.cloud.nacos.username}
@@ -8,7 +8,8 @@ ENV SERVER_PORT 7011
ENV NACOS_SERVER_ADDR nacos:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_NAMESPACE xjxc-space-prod
ENV NACOS_NAMESPACE_DISCOVERY xjxc-space-prod
ENV NACOS_GROUP dev
@@ -22,4 +23,4 @@ EXPOSE 7011
ADD ./target/health-emergency-start.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-emergency-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Duser.timezone=Asia/Shanghai -Djava.security.egd=file:/dev/./urandom -jar health-emergency-start.jar
@@ -3,7 +3,7 @@ SERVER_PORT=7011
NACOS_SERVER_ADDR=192.168.1.80:8848
NACOS_USERNAME=xjuser
NACOS_PASSWORD=Aa135790!123
NACOS_NAMESPACE=xjxc-space-common
NACOS_NAMESPACE_DISCOVERY=xjxc-space-common
NACOS_NAMESPACE=xjxc-space-prod
NACOS_NAMESPACE_DISCOVERY=workspace_lian
NACOS_GROUP=dev
FILE_SERVER_URL=http://fileserver.yg.dt.io
@@ -21,7 +21,7 @@ spring:
password: ${spring.cloud.nacos.password}
discovery:
enabled: true
namespace: ${NACOS_NAMESPACE_DISCOVERY:}
namespace: ${NACOS_NAMESPACE_DISCOVERY:${NACOS_NAMESPACE}}
group: ${NACOS_GROUP:DEFAULT_GROUP}
server-addr: ${spring.cloud.nacos.server-addr}
username: ${spring.cloud.nacos.username}
+3 -2
View File
@@ -8,7 +8,8 @@ ENV SERVER_PORT 7012
ENV NACOS_SERVER_ADDR nacos:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_NAMESPACE xjxc-space-prod
ENV NACOS_NAMESPACE_DISCOVERY xjxc-space-prod
ENV NACOS_GROUP dev
@@ -22,4 +23,4 @@ EXPOSE 7012
ADD ./target/health-im-start.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-im-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Duser.timezone=Asia/Shanghai -Djava.security.egd=file:/dev/./urandom -jar health-im-start.jar
@@ -1,8 +1,8 @@
PROFILE_NAME=dev
SERVER_PORT=7012
NACOS_SERVER_ADDR=localhost:8848
NACOS_USERNAME=nacos
NACOS_PASSWORD=nacos
NACOS_NAMESPACE=f3f65fb2-303b-4bf7-bccb-4755886503c1
NACOS_SERVER_ADDR=192.168.1.80:8848
NACOS_USERNAME=xjuser
NACOS_PASSWORD=Aa135790!123
NACOS_NAMESPACE=xjxc-space-prod
NACOS_NAMESPACE_DISCOVERY=workspace_lian
NACOS_GROUP=dev
FILE_SERVER_URL=http://fileserver.yg.dt.io
@@ -23,7 +23,7 @@ spring:
password: ${spring.cloud.nacos.password}
discovery:
enabled: true
namespace: ${NACOS_NAMESPACE_DISCOVERY:}
namespace: ${NACOS_NAMESPACE_DISCOVERY:${NACOS_NAMESPACE}}
group: ${NACOS_GROUP:DEFAULT_GROUP}
server-addr: ${spring.cloud.nacos.server-addr}
username: ${spring.cloud.nacos.username}
+3 -2
View File
@@ -8,7 +8,8 @@ ENV SERVER_PORT 7098
ENV NACOS_SERVER_ADDR nacos:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_NAMESPACE xjxc-space-prod
ENV NACOS_NAMESPACE_DISCOVERY xjxc-space-prod
ENV NACOS_GROUP dev
@@ -22,4 +23,4 @@ EXPOSE 7098
ADD ./target/health-watch-start.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar health-watch-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Duser.timezone=Asia/Shanghai -Djava.security.egd=file:/dev/./urandom -jar health-watch-start.jar
@@ -3,7 +3,7 @@ SERVER_PORT=7098
NACOS_SERVER_ADDR=192.168.1.80:8848
NACOS_USERNAME=xjuser
NACOS_PASSWORD=Aa135790!123
NACOS_NAMESPACE=xjxc-space-common
NACOS_NAMESPACE_DISCOVERY=workspace_lian
NACOS_NAMESPACE=xjxc-space-prod
NACOS_NAMESPACE_DISCOVERY=xjxc-space-prod
NACOS_GROUP=dev
FILE_SERVER_URL=http://fileserver.yg.dt.io
@@ -8,6 +8,8 @@ spring:
- optional:nacos:jeecg.yaml
- optional:nacos:${spring.application.name}-${PROFILE_NAME}.yaml
cloud:
inetutils:
preferred-networks: 192.168
nacos:
server-addr: ${NACOS_SERVER_ADDR}
username: ${NACOS_USERNAME:nacos}
@@ -21,7 +23,7 @@ spring:
password: ${spring.cloud.nacos.password}
discovery:
enabled: true
namespace: ${NACOS_NAMESPACE_DISCOVERY:}
namespace: ${NACOS_NAMESPACE_DISCOVERY:${NACOS_NAMESPACE}}
group: ${NACOS_GROUP:DEFAULT_GROUP}
server-addr: ${spring.cloud.nacos.server-addr}
username: ${spring.cloud.nacos.username}
+3 -2
View File
@@ -8,7 +8,8 @@ ENV SERVER_PORT 7001
ENV NACOS_SERVER_ADDR nacos:8848
ENV NACOS_USERNAME xjuser
ENV NACOS_PASSWORD Aa135790!123
ENV NACOS_NAMESPACE 3af98a54-4a44-4576-8e28-bf5781c0dccf
ENV NACOS_NAMESPACE xjxc-space-prod
ENV NACOS_NAMESPACE_DISCOVERY xjxc-space-prod
ENV NACOS_GROUP dev
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
@@ -21,4 +22,4 @@ EXPOSE 7001
ADD ./target/jeecg-system-start.jar ./
CMD sleep 1;java -Dfile.encoding=utf-8 -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start.jar
CMD sleep 1;java -Dfile.encoding=utf-8 -Duser.timezone=Asia/Shanghai -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start.jar
@@ -3,6 +3,6 @@ SERVER_PORT=7001
NACOS_SERVER_ADDR=192.168.1.80:8848
NACOS_USERNAME=xjuser
NACOS_PASSWORD=Aa135790!123
NACOS_NAMESPACE=xjxc-space-common
NACOS_NAMESPACE_DISCOVERY=xjxc-space-common
NACOS_NAMESPACE=xjxc-space-prod
NACOS_NAMESPACE_DISCOVERY=xjxc-space-prod
NACOS_GROUP=dev
@@ -8,6 +8,8 @@ spring:
- optional:nacos:jeecg.yaml
- optional:nacos:${spring.application.name}-${PROFILE_NAME}.yaml
cloud:
inetutils:
preferred-networks: 192.168
nacos:
server-addr: ${NACOS_SERVER_ADDR}
username: ${NACOS_USERNAME:nacos}
@@ -21,8 +23,11 @@ spring:
password: ${spring.cloud.nacos.password}
discovery:
enabled: true
namespace: ${NACOS_NAMESPACE_DISCOVERY:}
namespace: ${NACOS_NAMESPACE_DISCOVERY:${NACOS_NAMESPACE}}
group: ${NACOS_GROUP:DEFAULT_GROUP}
server-addr: ${spring.cloud.nacos.server-addr}
username: ${spring.cloud.nacos.username}
password: ${spring.cloud.nacos.password}
# ip: 192.168.1.80
# port: 27101
+1 -1
View File
@@ -709,7 +709,7 @@
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<!--<exclude>.env</exclude>-->
<exclude>.env</exclude>
<exclude>rebel.xml</exclude>
</excludes>
</resource>