diff --git a/.gitignore b/.gitignore index 3685992..6fe5bd8 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ deploy/docker/.last-version *.jar sql/ docs.zip +deploy/docker-app/.current-version diff --git a/backend/ARCHITECTURE.md b/backend/ARCHITECTURE.md new file mode 100644 index 0000000..78ae61f --- /dev/null +++ b/backend/ARCHITECTURE.md @@ -0,0 +1,258 @@ +# App 后台架构文档 + +> 本文档记录小趣智清洁 App 后台的架构现状、数据访问层设计、冻结规范和新项目开发规范。 +> 维护人:Tony | 创建时间:2026-04-21 | 关联需求:REQ-20260421-0011 + +## 1. 模块概览 + +| 模块 | Java 文件数 | groupId | 框架 | 打包 | 状态 | +|------|-----------|---------|------|------|------| +| `xiaoqu-public` | 147 | me.iiv.xiaoqu | 纯 Java | jar | 冻结 | +| `elasticsearchpublic` | 21 | me.iiv.xiaoqu | Spring 5.0 | jar | 冻结 | +| `xiaoqu-complex` | 1,176 | me.iiv.xiaoqu | Spring 5.0 + 原生 MVC | war | 冻结 | +| `xiaoqu-mall` | 1,007 | me.iiv.xiaoqu | Spring 5.0 + 原生 MVC | war | 冻结 | +| `xiaoqu-intellectual-public` | 537 | xiaoqu.home.open | Spring Boot 2.4 | jar | **持续维护** | + +## 2. 依赖关系 + +``` +xiaoqu-app-parent (pom, 统一版本管理) [冻结] + ├── xiaoqu-public (jar) [冻结] + ├── ElasticsearchPublic (jar) [冻结] ── 依赖 xiaoqu-public + ├── xiaoqu-complex (war) [冻结] ── 依赖 xiaoqu-public + ElasticsearchPublic + intellectual-public + └── xiaoqu-mall (war) [冻结] ── 依赖 xiaoqu-public + +xiaoqu-intellectual-public (jar) [持续维护] ── 唯一数据访问层 + ├── 被 Web 后台依赖(intellectual-web/task/base/task-mgmt/attendance) + ├── 被旧 App(xiaoqu-complex)依赖 + └── 被新项目依赖 +``` + +### 构建顺序 + +```bash +# 1. 先安装 intellectual-public(属于 Web 后台父 POM) +cd backend && mvn clean install -pl xiaoqu-intellectual-public -DskipTests + +# 2. 构建全部 App 模块 +cd backend/xiaoqu-app-parent && mvn clean package -DskipTests + +# 3. 验证 Web 后台(可选) +cd backend && mvn clean package -DskipTests +``` + +> 必须使用 Java 8 编译和运行。 + +## 3. xiaoqu-complex 三套并行数据访问层 + +xiaoqu-complex 内部存在三套独立的���据访问机制,连接两个数据库: + +``` +xiaoqu-complex (App 主服务) +┌──────────────────────────────────────────────────────────────────────┐ +│ Controller Layer │ +│ (me.iiv.iivframework.controller.*) │ +└──────┬───────────────────────┬───────────────────────┬───────────────┘ + │ │ │ + ▼ ▼ ▼ +┌──────────────────┐ ┌────────────────────────┐ ┌──────────────────┐ +│ ① 自有 DAO 层 │ │ ② intellectual-public │ │ ③ org.home.open │ +│ (MyBatis) │ │ (MyBatis-Plus) │ │ (JdbcTemplate) │ +│ │ │ │ │ │ +│ me.iiv.*.dao │ │ mapper.db1 → 同库 │ │ org.home.open.* │ +│ me.iiv.*.entity │ │ mapper.db2 → 跨库 │ │ ~48 个文件 │ +│ 41 DAO + 151 XML │ │ 51+61 Service │ │ │ +│ │ │ │ │ │ +│ sqlSessionFactory│ │ sqlSessionFactory2(db1) │ │ jdbcTemplate │ +│ → dataSource │ │ → dataSource (同库) │ │ → dataSource │ +│ │ │ sqlSessionFactory1(db2) │ │ │ +│ │ │ → dataSource1 (跨库) │ │ │ +└────────┬─────────┘ └─────────┬──────┬───────┘ └────────┬─────────┘ + │ │ │ │ + ▼ ▼ ▼ ▼ + xiaoqu_complex xiaoqu_ xiaoqu_ xiaoqu_complex + 库 complex intellectual 库 + 库 库 +``` + +### 数据库连接 + +| 数据源 | 连接数据库 | 使用方 | +|--------|-----------|--------| +| `dataSource` → `${servers.jdbc.jdbcUrl}` | `xiaoqu_complex` | ① 自有 DAO + ② db1 + ③ JdbcTemplate | +| `dataSource1` → `${servers.jdbc.jdbcUrl1}` | `xiaoqu_intellectual` | ② db2(保洁任务) | + +### SqlSessionFactory 映射 + +| SqlSessionFactory | 数据源 | ORM | 扫描包 | +|-------------------|--------|-----|--------| +| `sqlSessionFactory` | dataSource | MyBatis + PageHelper | `mappers/*.xml` | +| `sqlSessionFactory1` | dataSource1 | MyBatis-Plus | `xiaoqu.home.open.mapper.db2` | +| `sqlSessionFactory2` | dataSource | MyBatis-Plus | `xiaoqu.home.open.mapper.db1` | + +### 文件统计 + +| 层 | 包名 | 文件数 | ORM | 数据库 | 状态 | +|----|------|--------|-----|--------|------| +| ① 自有 DAO | `me.iiv.iivframework.dao` + `mappers/*.xml` | 41 DAO + 151 XML | MyBatis + PageHelper | xiaoqu_complex | 冻结 | +| ② intellectual db1 | `xiaoqu.home.open.*.db1` | 51×3 (mapper/service/model) | MyBatis-Plus | xiaoqu_complex(同库) | 由 intellectual-public 维护 | +| ② intellectual db2 | `xiaoqu.home.open.*.db2` | 61×3 (mapper/service/model) | MyBatis-Plus | xiaoqu_intellectual | 由 intellectual-public 维护 | +| ③ JdbcTemplate | `org.home.open.dao` | ~48 | JdbcTemplate | xiaoqu_complex | 冻结 | + +## 4. Spring 组件扫描隔离机制 + +xiaoqu-complex 使用 Spring XML 配置,组件扫描是**显式声明**的,精确控制只扫描以下 4 个包: + +**beans.xml:** +```xml + + + + +``` + +**springmvc.xml:** +```xml + + + + + + +``` + +### 同名 @Component 类的运行时隔离 + +xiaoqu-complex 与 intellectual-public 存在 10 个同名基础设施类。**当前不存在运行时冲突**: + +| 文件 | intellectual-public 包 | complex 包 | 有 @Component? | 被 complex 扫描? | +|------|----------------------|-----------|---------------|-----------------| +| SystemInterceptor | xiaoqu.home.open.config | me.iiv.iivframework.core | 是 | **否** | +| RepeatSubmitAspect | xiaoqu.home.open.aop | me.iiv.iivframework.aop | 是 | **否** | +| RedisDistributedLock | xiaoqu.home.open.redis | me.iiv.iivframework.redis | 是 | **否** | +| RedisService5 | xiaoqu.home.open.service | me.iiv.iivframework.redis | 是 | **否** | +| AvoidRepeatSubmit | xiaoqu.home.open.aop | me.iiv.iivframework.aop | 注解类 | 否 | +| Constants | xiaoqu.home.open.constant | me.iiv.iivframework.Constants | 无 | 否 | +| XxlJobInfo | xiaoqu.home.open.config | me.iiv.iivframework.entity | 无 | 否 | +| IpUtils | xiaoqu.home.open.utils | me.iiv.iivframework.utils | 无 | 否 | +| FileUtil | xiaoqu.home.open.utils | me.iiv.iivframework.utils | 无 | 否 | +| UserUtils | xiaoqu.home.open.utils | me.iiv.iivframework.utils | 无 | 否 | + +intellectual-public 的 `config`、`aop`、`redis`、`utils`、`service`(父包)均**不在** complex 的扫描范围内。 + +> **重要警告**:如果未来有人尝试将 xiaoqu-complex 升级到 Spring Boot 并使用 `@SpringBootApplication` 默认扫描,上述 4 个 @Component 类会被自动注册,导致 Bean 名冲突(双实例)。**不要这样做**——旧项目已冻结,不做框架升级。 + +## 5. 同名文件(108 个) + +xiaoqu-complex 与 intellectual-public 有 108 个同名 Java 文件。根本原因:**同一张数据库表有两套 ORM 映射**。 + +示例: +- `me.iiv.iivframework.entity.User`(complex 自有,MyBatis) +- `xiaoqu.home.open.model.db1.User`(intellectual-public,MyBatis-Plus) + +两个版本字段集合不完全相同,是各自独立演化的结果。 + +**处置方式:冻结原样,不做收敛。** 旧项目冻结后同名文件只做 bug 修复。 + +## 6. 旧项目冻结规范 + +Phase 1(Maven 治理)完成后,以下模块进入冻结状态: + +### 允许的变更 + +- Bug 修复 +- 安全补丁(如依赖版本升级修复 CVE) + +### 禁止的变更 + +- 新增功能、新增接口 +- 重构代码、统一包名 +- 框架升级(Spring Boot 等) +- 新增 DAO/Mapper/Entity +- 收敛同名文件 + +### 旧 DAO 层冻结说明 + +| DAO 层 | 冻结说明 | +|--------|---------| +| ① 自有 MyBatis(41 DAO + 151 XML) | 仅修复已有查询的 bug,不新增 mapper | +| ② intellectual-public 的 db1/db2 | 由 intellectual-public 统一维护 | +| ③ org.home.open JdbcTemplate(~48 文件) | 冻结,不新增 JDBC 直写代码 | + +### 冻结代码变更流程 + +1. 确认是 bug 修复(非新功能) +2. 评估是否可在新项目中通过新接口绕过 +3. 如必须改旧代码:最小化改动,不做"顺手重构" +4. 代码评审时标注"冻结项目 bug 修复" + +## 7. 新项目开发规范 + +### 技术栈 + +| 层级 | 技术 | +|------|------| +| 框架 | Spring Boot 2.4.8 + Java 8 | +| ORM | MyBatis-Plus 3.4(通过 intellectual-public) | +| 数据访问 | **仅使用 intellectual-public 的 DAO 层** | +| 数据库 | xiaoqu_complex + xiaoqu_intellectual(通过 db1/db2) | + +### 依赖关系 + +``` +新项目 (Spring Boot 2.4 + Java 8) + └── xiaoqu-intellectual-public (jar) + ├── mapper/service/model.db1 → xiaoqu_complex 库 + └── mapper/service/model.db2 → xiaoqu_intellectual 库 +``` + +**不依赖**:xiaoqu-complex、xiaoqu-mall、xiaoqu-public、elasticsearchpublic。 + +### 数据库变更维护规则 + +| 变更类型 | 操作位置 | 说明 | +|---------|---------|------| +| 新增表 | intellectual-public(新增 Entity + Mapper + Service) | 新表只在 intellectual-public 中建 ORM 映射 | +| 修改已有表(加字段) | intellectual-public(修改 Entity) | 旧项目 complex 的同名 Entity 不改 | +| 删除表/字段 | intellectual-public | 旧项目对应代码冻结不删 | + +### intellectual-public 变更注意事项 + +intellectual-public 同时被三方依赖: + +| 依赖方 | 影响评估 | +|--------|---------| +| Web 后台(intellectual-web/task 等) | 主要消费方,变更需确保兼容 | +| 旧 App(xiaoqu-complex) | 冻结状态,新增内容对其无影响 | +| 新项目 | 新功能的主要数据访问通道 | + +**变更原则:** +- 新增 Entity/Mapper/Service → 安全,不影响已有代码 +- 修改已有 Entity 字段 → 需评估 Web 后台影响 +- 修改已有 Service 方法签名 → 高风险,需评估所有依赖方 +- 删除任何内容 → 禁止(除非确认所有依赖方已移除引用) + +## 8. 环境配置 + +### 数据库连接 + +| 数据源 | 测试环境 | 生产环境 | +|--------|---------|---------| +| dataSource (xiaoqu_complex) | `192.168.1.181:3306/xiaoqu_comples_d` | Aliyun RDS `xiaoqu_complex` | +| dataSource1 (xiaoqu_intellectual) | `192.168.1.181:3306/xiaoqu_intellectual_d` | Aliyun RDS `xiaoqu_intellectual` | + +### Maven 构建 + +- App 模块由 `xiaoqu-app-parent/pom.xml` 统一管理 +- Web 后台由 `backend/pom.xml` 统一管理 +- 两套父 POM 互不干扰,intellectual-public 是唯一交叉点 + +## 9. 包名空间 + +xiaoqu-complex 内部存在三套包名,历史原因导致,冻结后不做统一: + +| 包名 | 来源 | 用途 | +|------|------|------| +| `me.iiv.iivframework.*` | complex 自有 | Controller、DAO、Entity、AOP、拦截器 | +| `xiaoqu.home.open.*` | intellectual-public | MyBatis-Plus Service/Mapper/Model (db1/db2) | +| `org.home.open.*` | complex 内 JdbcTemplate 层 | JDBC 直写 DAO | diff --git a/backend/elasticsearchpublic/pom.xml b/backend/elasticsearchpublic/pom.xml new file mode 100644 index 0000000..7f9f956 --- /dev/null +++ b/backend/elasticsearchpublic/pom.xml @@ -0,0 +1,58 @@ + + 4.0.0 + + + + + me.iiv.xiaoqu + xiaoqu-app-parent + 1.0-SNAPSHOT + ../xiaoqu-app-parent/pom.xml + + + ElasticsearchPublic + 0.0.1-SNAPSHOT + jar + + ElasticsearchPublic + + + + me.iiv.xiaoqu + xiaoqu-public + + + org.elasticsearch + elasticsearch + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + + + org.elasticsearch.plugin + transport-netty4-client + + + com.alibaba + fastjson + + + org.springframework + spring-core + + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + + org.springframework + spring-context-support + + + diff --git a/backend/xiaoqu-app-parent/pom.xml b/backend/xiaoqu-app-parent/pom.xml new file mode 100644 index 0000000..7a77a97 --- /dev/null +++ b/backend/xiaoqu-app-parent/pom.xml @@ -0,0 +1,423 @@ + + + 4.0.0 + + me.iiv.xiaoqu + xiaoqu-app-parent + 1.0-SNAPSHOT + pom + xiaoqu-app-parent + App modules parent POM - unified dependency management + + + ../xiaoqu-public + ../elasticsearchpublic + ../xiaoqu-complex + ../xiaoqu-mall + + + + UTF-8 + 1.8 + 1.8 + UTF-8 + + + 5.0.0.RELEASE + 2.2.3.RELEASE + + + 3.4.0 + 3.3.2 + 2.1.1 + 3.7.5 + 2.2 + + + 5.1.49 + 1.2.27 + + + 3.1.0 + 3.10.6 + + + 7.7.1 + + + 1.2.83 + 2.10.0 + + + 2.9.2 + 1.5.21 + 1.9.6 + + + 1.2.17 + 1.7.7 + + + 3.4 + 1.3.1 + 1.9 + 2.6 + 3.1 + 4.4.6 + 4.5.2 + + + 1.18.18 + 5.8.4 + 1.8.4 + 3.8.0 + 3.19.0-GA + 1.1.0.Final + 7.0.68 + 1.10.1 + 2.1.0 + + + 1.0-SNAPSHOT + 0.0.1-SNAPSHOT + 0.0.1-SNAPSHOT + + + + + + + me.iiv.xiaoqu + xiaoqu-public + ${xiaoqu-public.version} + + + me.iiv.xiaoqu + ElasticsearchPublic + ${elasticsearchpublic.version} + + + xiaoqu.home.open + xiaoqu-intellectual-public + ${xiaoqu-intellectual-public.version} + + + + + org.springframework + spring-core + ${springframework.version} + + + org.springframework + spring-web + ${springframework.version} + + + org.springframework + spring-webmvc + ${springframework.version} + + + org.springframework + spring-context-support + ${springframework.version} + + + org.springframework + spring-tx + ${springframework.version} + + + org.springframework + spring-aop + ${springframework.version} + + + org.springframework + spring-orm + ${springframework.version} + + + org.springframework + spring-websocket + ${springframework.version} + + + org.springframework + spring-messaging + ${springframework.version} + + + org.springframework + spring-test + ${springframework.version} + + + org.springframework.data + spring-data-redis + ${spring-data-redis.version} + + + + + com.baomidou + mybatis-plus + ${mybatis-plus.version} + + + com.baomidou + mybatis-plus-generator + ${mybatis-plus-generator.version} + + + org.mybatis + mybatis-spring + ${mybatis-spring.version} + + + com.github.pagehelper + pagehelper + ${pagehelper.version} + + + org.apache.velocity + velocity-engine-core + ${velocity.version} + + + + + mysql + mysql-connector-java + ${mysql-connector.version} + + + com.alibaba + druid + ${druid.version} + + + + + redis.clients + jedis + ${jedis.version} + + + org.redisson + redisson + ${redisson.version} + + + + + org.elasticsearch + elasticsearch + ${elasticsearch.version} + + + org.elasticsearch.client + elasticsearch-rest-high-level-client + ${elasticsearch.version} + + + org.elasticsearch.plugin + transport-netty4-client + ${elasticsearch.version} + + + + + com.alibaba + fastjson + ${fastjson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.dataformat + jackson-dataformat-avro + ${jackson.version} + + + + + io.springfox + springfox-swagger2 + ${springfox-swagger.version} + + + io.springfox + springfox-swagger-ui + ${springfox-swagger.version} + + + io.springfox + springfox-bean-validators + ${springfox-swagger.version} + + + io.swagger + swagger-models + ${swagger-models.version} + + + com.github.xiaoymin + swagger-bootstrap-ui + ${swagger-bootstrap-ui.version} + + + + + log4j + log4j + ${log4j.version} + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + commons-fileupload + commons-fileupload + ${commons-fileupload.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + commons-io + commons-io + ${commons-io.version} + + + commons-httpclient + commons-httpclient + ${commons-httpclient.version} + + + org.apache.httpcomponents + httpcore + ${httpcore.version} + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + org.apache.httpcomponents + httpmime + ${httpclient.version} + + + + + org.projectlombok + lombok + ${lombok.version} + + + cn.hutool + hutool-all + ${hutool.version} + + + org.aspectj + aspectjrt + ${aspectj.version} + + + org.aspectj + aspectjweaver + ${aspectj.version} + + + com.aliyun.oss + aliyun-sdk-oss + ${aliyun-oss.version} + + + org.javassist + javassist + ${javassist.version} + + + javax.validation + validation-api + ${javax.validation.version} + + + org.apache.tomcat + tomcat-servlet-api + ${tomcat-servlet-api.version} + + + org.jsoup + jsoup + ${jsoup.version} + + + se.jiderhamn.classloader-leak-prevention + classloader-leak-prevention-servlet + ${classloader-leak.version} + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + + + + diff --git a/backend/xiaoqu-complex/pom.xml b/backend/xiaoqu-complex/pom.xml new file mode 100644 index 0000000..189d53a --- /dev/null +++ b/backend/xiaoqu-complex/pom.xml @@ -0,0 +1,689 @@ + + + + + me.iiv.xiaoqu + xiaoqu-app-parent + 1.0-SNAPSHOT + ../xiaoqu-app-parent/pom.xml + + + 4.0.0 + xiaoqu-complex + 0.0.1-SNAPSHOT + war + + + 7.0.68 + deploy + + + + + test181 + + true + + + test181 + test181 + 8091 + DEBUG + http://192.168.1.181:8091 + + + NO_LOGGING + http://192.168.1.181:8091/manager/text + + http://192.168.1.181:8087/device/ + + http://192.168.1.182:8093/ + + ./log/app.log + + http://192.168.1.181:8088 + + 192.168.1.181 + 6379 + kaixinjiuhao + 5 + 13 + + root + kaixinjiuhao + jdbc:mysql://192.168.1.181:3306/xiaoqu_comples_d + + root + kaixinjiuhao + jdbc:mysql://192.168.1.181:3306/xiaoqu_intellectual_d + + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + test190/ + + 192.168.1.152 + 9200 + + + + 192.168.1.152 + 9200 + + + + xiaoqu + 123456 + xiaoquadvise + 541500 + http://192.168.1.182:9080/xxl-job + xiaoqu-franchisee + + + + test182 + + test182 + test182 + 8089 + DEBUG + http://192.168.1.182:8086 + + + NO_LOGGING + http://192.168.1.182:8086/manager/text + + http://192.168.1.181:8087/device/ + + http://192.168.1.182:8093/ + + ./log/app.log + + http://192.168.1.181:8088 + + 192.168.1.181 + 6379 + kaixinjiuhao + 5 + 13 + + root + kaixinjiuhao + jdbc:mysql://192.168.1.181:3306/xiaoqu_comples_d + + + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + test190/ + + 192.168.1.152 + 9200 + + + + 192.168.1.152 + 9200 + + + + xiaoqu + 123456 + xiaoquadvise + 541500 + http://192.168.1.182:9080/xxl-job + xiaoqu-franchisee + + + + pre + + pre + pre + 8089 + DEBUG + http://192.168.1.241:8086 + + + NO_LOGGING + http://192.168.1.241:8086/manager/text + + http://192.168.1.241:8087/device/ + + http://192.168.1.182:8093/ + + ./log/app.log + + http://192.168.1.241:8088 + + 192.168.1.181 + 6379 + kaixinjiuhao + 5 + 13 + + root + Kaixinjiuhao2019 + jdbc:mysql://192.168.1.181:3306/xiaoqu_comples + + root + Kaixinjiuhao2019 + jdbc:mysql://192.168.1.181:3306/xiaoqu_intellectual + + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + test190/ + + 192.168.1.241 + 9200 + + + + 192.168.1.241 + 9200 + + + + xiaoqu + 123456 + xiaoquadvise + 541500 + http://192.168.1.241:9080/xxl-job + xiaoqu-franchisee + + + + prd + + prd + prd + 6080 + DEBUG + + http://background.xiaoqukeji.com:8080 + + NO_LOGGING + + http://172.16.0.183:8080/manager/text + + http://www.ququtec.com/device/ + + http://webserver.ququtech.cn:9480/ + + http://fileserver.xiaoqukeji.com:8082 + + r-2zeq2rwmlmequod12f.redis.rds.aliyuncs.com + 6379 + Xdny7dvk + 5 + 14 + + xiaoqu_yanfa + Xdny7dvk + jdbc:mysql://rm-2zerw72wwh56sj214.mysql.rds.aliyuncs.com:3306/xiaoqu_complex + + kaifa + zuo!QAZ2wsx!@#$ + jdbc:mysql://rm-2zeqo70cga7961912.mysql.rds.aliyuncs.com:3306/xiaoqu_intellectual + + ./logs/app.log + + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + + http://oss-cn-beijing-internal.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + online/ + + es-cn-oew1s2nrv00110ppc.elasticsearch.aliyuncs.com + 9200 + elastic + HKtG0VJt8rsR7zIF + + 114.253.9.110 + 19800 + elastic + 0a0sp22b4O0Q + + xqyuyin + qazwsx + xiaoquadvise + 541500 + http://job.ququtech.cn:9380/xxl-job + xiaoqu-franchisee + + + + docker + + docker + docker + 8091 + DEBUG + http://localhost:8091 + NO_LOGGING + http://localhost:8091/manager/text + http://host.docker.internal:8087/device/ + http://host.docker.internal:8093/ + ./log/app.log + http://host.docker.internal:8088 + host.docker.internal + 6379 + kaixinjiuhao + 5 + 13 + root + kaixinjiuhao + jdbc:mysql://host.docker.internal:3306/xiaoqu_comples_d + root + kaixinjiuhao + jdbc:mysql://host.docker.internal:3306/xiaoqu_intellectual_d + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + test190/ + host.docker.internal + 9200 + + + host.docker.internal + 9200 + + + xiaoqu + 123456 + xiaoquadvise + 541500 + + xiaoqu-franchisee + + + + + + + com.baomidou + mybatis-plus + + + com.baomidou + mybatis-plus-generator + + + org.apache.velocity + velocity-engine-core + + + xiaoqu.home.open + xiaoqu-intellectual-public + + + + com.yookue.forkextension.pinyin4j + pinyin4j + 2.6.1 + compile + + + me.iiv.xiaoqu + ElasticsearchPublic + + + org.springframework + spring-core + + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + + org.springframework + spring-context-support + + + org.springframework + spring-tx + + + org.springframework + spring-aop + + + org.springframework.data + spring-data-redis + + + org.aspectj + aspectjrt + + + org.aspectj + aspectjweaver + runtime + + + me.iiv.xiaoqu + xiaoqu-public + + + + + javax.servlet + servlet-api + 3.0-alpha-1 + provided + + + javax.servlet.jsp + jsp-api + 2.2.1-b03 + + + javax.servlet + jstl + 1.2 + + + log4j + log4j + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + + + mysql + mysql-connector-java + + + org.mybatis + mybatis-spring + + + com.alibaba + druid + + + com.alibaba + fastjson + + + com.github.pagehelper + pagehelper + + + org.springframework + spring-orm + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + org.apache.commons + commons-lang3 + + + commons-fileupload + commons-fileupload + + + org.apache.commons + commons-math3 + 3.3 + + + commons-codec + commons-codec + + + commons-httpclient + commons-httpclient + + + commons-io + commons-io + + + + org.jdom + jdom + 1.1 + + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.13 + + + + net.sf.flexjson + flexjson + 2.1 + + + + org.apache.httpcomponents + httpcore + + + org.apache.httpcomponents + httpclient + + + org.apache.httpcomponents + httpmime + + + + net.coobird + thumbnailator + 0.4.7 + + + org.apache.directory.studio + org.apache.commons.io + 2.4 + + + org.apache.tomcat + tomcat-servlet-api + provided + + + com.aliyun.oss + aliyun-sdk-oss + + + javax.validation + validation-api + + + org.springframework + spring-websocket + + + org.springframework + spring-messaging + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-annotations + + + com.fasterxml.jackson.dataformat + jackson-dataformat-avro + + + + com.fasterxml + classmate + 1.5.1 + + + + redis.clients + jedis + + + io.springfox + springfox-swagger2 + + + io.swagger + swagger-models + + + + + io.swagger + swagger-models + + + com.github.xiaoymin + swagger-bootstrap-ui + + + io.springfox + springfox-swagger-ui + + + io.springfox + springfox-bean-validators + + + + + + org.jsoup + jsoup + + + se.jiderhamn.classloader-leak-prevention + classloader-leak-prevention-servlet + + + org.springframework + spring-test + provided + + + xerces + xercesImpl + 2.12.0 + + + org.redisson + redisson + + + org.javassist + javassist + + + org.apache.logging.log4j + log4j-to-slf4j + 2.8.2 + + + + + ROOT + + + src/main/resources + true + + + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + ${tomcatUrl} + _qfbAdmin + _qfb2587 + / + true + + + + + org.eclipse.jetty + jetty-maven-plugin + 9.4.8.v20171121 + + + ${webserver.port} + + + / + src/test/resources/webdefault.xml + + + + org.mortbay.util.URI.charset + ${project.build.sourceEncoding} + + + + + + + diff --git a/backend/xiaoqu-mall/pom.xml b/backend/xiaoqu-mall/pom.xml new file mode 100644 index 0000000..615bd54 --- /dev/null +++ b/backend/xiaoqu-mall/pom.xml @@ -0,0 +1,723 @@ + + + + + me.iiv.xiaoqu + xiaoqu-app-parent + 1.0-SNAPSHOT + ../xiaoqu-app-parent/pom.xml + + + 4.0.0 + xiaoqu-mall + 0.0.1-SNAPSHOT + war + + + 7.0.68 + deploy + + + + + test181 + + true + + + test181 + test181 + 8090 + DEBUG + + + NO_LOGGING + http://192.168.1.152:8086/manager/text + + ./logs/mall.log + + /user/local/font/ + + 192.168.1.181 + 6379 + kaixinjiuhao + 5 + 13 + + root + kaixinjiuhao + jdbc:mysql://192.168.1.181:3306/xiaoqu_comples_d + root + kaixinjiuhao + jdbc:mysql://192.168.1.181:3306/xiaoqu_mall_d + root + kaixinjiuhao + jdbc:mysql://192.168.1.181:3306/xiaoqu_franchisee_d + + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + test190/ + + 192.168.1.152 + 9200 + + + + http://192.168.1.152:8086/open/mailVerification/ + + https://openapi.alipay.com/gateway.do + 2021001189634432 + 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 + http://114.253.9.110:8086/alipay/asyncPayNotify + + xiaoquadvise + 541500 + + wxe9ca033dd79a1c99 + 1603299889 + 0D89A48337D9215817A9EECA26F5F878 + 114.253.9.110 + http://114.253.9.110:8086/weiXin/asyncPayNotify + http://192.168.1.182:8887/xiaoqu/verifyReceivable + + http://192.168.1.182:8093/ + + + + pre + + pre + pre + 8089 + DEBUG + http://192.168.1.241:8089 + NO_LOGGING + http://192.168.1.241:8089/manager/text + + ./logs/mall.log + + /user/local/font/ + + 192.168.1.181 + 6379 + kaixinjiuhao + 5 + 13 + + root + Kaixinjiuhao2019 + jdbc:mysql://192.168.1.181:3306/xiaoqu_comples + root + Kaixinjiuhao2019 + jdbc:mysql://192.168.1.181:3306/xiaoqu_mall + root + Kaixinjiuhao2019 + jdbc:mysql://192.168.1.181:3306/xiaoqu_franchisee + + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + test190/ + + 192.168.1.241 + 9200 + + + + http://192.168.1.241:8086/open/mailVerification/ + + https://openapi.alipay.com/gateway.do + 2021001189634432 + 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 + http://114.253.9.110:8086/alipay/asyncPayNotify + + xiaoquadvise + 541500 + + wxe9ca033dd79a1c99 + 1603299889 + 0D89A48337D9215817A9EECA26F5F878 + 114.253.9.110 + http://114.253.9.110:20000/weiXin/asyncPayNotify + http://192.168.1.182:8887/xiaoqu/verifyReceivable + + http://192.168.1.182:8093/ + + + + prdw + + prdw + prdw + 6080 + DEBUG + + http://www.xqzhipin.com:8666 + + http://172.16.0.178:8666/manager/text + + ./logs/mall.log + + /user/local/font/ + + r-2zeq2rwmlmequod12fpd.redis.rds.aliyuncs.com + 6379 + Xdny7dvk + 5 + 14 + + xiaoqu_yanfa + Xdny7dvk + jdbc:mysql://rm-2zerw72wwh56sj214xo.mysql.rds.aliyuncs.com:3306/xiaoqu_complex + xiaoqu_yanfa + Xdny7dvk + jdbc:mysql://rm-2zerw72wwh56sj214xo.mysql.rds.aliyuncs.com:3306/xiaoqu_mall + xiaoqu_yanfa + Xdny7dvk + jdbc:mysql://rm-2zerw72wwh56sj214xo.mysql.rds.aliyuncs.com:3306/xiaoqu_franchisee + + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + online/ + + es-cn-oew1s2nrv00110ppc.elasticsearch.aliyuncs.com + 9200 + elastic + HKtG0VJt8rsR7zIF + + http://www.xqzhipin.com:8666/open/mailVerification/ + + + https://openapi.alipay.com/gateway.do + 2021001189634432 + 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 + http://www.xqzhipin.com:8666/alipay/asyncPayNotify + + xiaoquadvise + 541500 + + wxe9ca033dd79a1c99 + 1603299889 + 0D89A48337D9215817A9EECA26F5F878 + 39.106.48.85 + http://www.xqzhipin.com:8666/weiXin/asyncPayNotify + >http://192.168.1.182:8887/xiaoqu/verifyReceivable + + http://webserver.ququtech.cn:9480/ + + + + prd + + prd + prd + 6080 + DEBUG + + http://www.xqzhipin.com:8666 + + http://172.16.0.178:8666/manager/text + + ./logs/mall.log + + /user/local/font/ + + r-2zeq2rwmlmequod12f.redis.rds.aliyuncs.com + 6379 + Xdny7dvk + 5 + 14 + + xiaoqu_yanfa + Xdny7dvk + jdbc:mysql://rm-2zerw72wwh56sj214.mysql.rds.aliyuncs.com:3306/xiaoqu_complex + xiaoqu_yanfa + Xdny7dvk + jdbc:mysql://rm-2zerw72wwh56sj214.mysql.rds.aliyuncs.com:3306/xiaoqu_mall + xiaoqu_yanfa + Xdny7dvk + jdbc:mysql://rm-2zerw72wwh56sj214.mysql.rds.aliyuncs.com:3306/xiaoqu_franchisee + + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + online/ + + es-cn-oew1s2nrv00110ppc.elasticsearch.aliyuncs.com + 9200 + elastic + HKtG0VJt8rsR7zIF + + http://www.xqzhipin.com:8666/open/mailVerification/ + + + https://openapi.alipay.com/gateway.do + 2021001189634432 + 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 + http://www.xqzhipin.com:8666/alipay/asyncPayNotify + + xiaoquadvise + 541500 + + wxe9ca033dd79a1c99 + 1603299889 + 0D89A48337D9215817A9EECA26F5F878 + 39.106.48.85 + http://www.xqzhipin.com:8666/weiXin/asyncPayNotify + http://114.253.9.110:8888/xiaoqu/verifyReceivable + + http://webserver.ququtech.cn:9480/ + + + + docker + + docker + docker + 8090 + DEBUG + NO_LOGGING + http://localhost:8090/manager/text + ./logs/mall.log + /user/local/font/ + host.docker.internal + 6379 + kaixinjiuhao + 5 + 13 + root + kaixinjiuhao + jdbc:mysql://host.docker.internal:3306/xiaoqu_comples_d + root + kaixinjiuhao + jdbc:mysql://host.docker.internal:3306/xiaoqu_mall_d + root + kaixinjiuhao + jdbc:mysql://host.docker.internal:3306/xiaoqu_franchisee_d + xOz8D11yhk5PXPo62Or6W2 + zFrU26Tzbm9gSP5rHYDo9A + V2u3Z9FZce7As9cUgFsCW7 + maip9e0W3e9s273OLalVk2 + http://oss-cn-beijing.aliyuncs.com + LTAI5tCmbdJj3dymcia6CbZs + pZZaztTROhMc4ntRyuKg4cgITD3yo3 + contractpic + test190/ + host.docker.internal + 9200 + + + http://localhost:8086/open/mailVerification/ + https://openapi.alipay.com/gateway.do + 2021001189634432 + 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 + http://localhost:8086/alipay/asyncPayNotify + xiaoquadvise + 541500 + wxe9ca033dd79a1c99 + 1603299889 + 0D89A48337D9215817A9EECA26F5F878 + 127.0.0.1 + http://localhost:8086/weiXin/asyncPayNotify + http://host.docker.internal:8887/xiaoqu/verifyReceivable + http://host.docker.internal:8093/ + + + + + + + + com.itextpdf + itextpdf + 5.5.10 + + + com.itextpdf + itext-asian + 5.2.0 + + + org.xhtmlrenderer + flying-saucer-pdf-itext5 + 9.0.3 + + + + com.alipay.sdk + alipay-sdk-java + 4.10.97.ALL + + + com.baomidou + mybatis-plus + + + com.baomidou + mybatis-plus-generator + + + org.apache.velocity + velocity-engine-core + + + org.springframework + spring-core + + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + + org.springframework + spring-context-support + + + org.springframework + spring-tx + + + org.springframework + spring-aop + + + org.springframework.data + spring-data-redis + + + org.aspectj + aspectjrt + + + org.aspectj + aspectjweaver + runtime + + + me.iiv.xiaoqu + xiaoqu-public + + + + javax.servlet + servlet-api + 3.0-alpha-1 + provided + + + javax.servlet.jsp + jsp-api + 2.2.1-b03 + + + javax.servlet + jstl + 1.2 + + + log4j + log4j + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + + + mysql + mysql-connector-java + + + com.alibaba + druid + + + com.alibaba + fastjson + + + + org.springframework + spring-orm + + + net.sf.json-lib + json-lib + 2.4 + jdk15 + + + org.apache.commons + commons-lang3 + + + commons-fileupload + commons-fileupload + + + org.apache.commons + commons-math3 + 3.3 + + + commons-codec + commons-codec + + + commons-httpclient + commons-httpclient + + + commons-io + commons-io + + + + org.jdom + jdom + 1.1 + + + + org.codehaus.jackson + jackson-mapper-asl + 1.9.13 + + + + net.sf.flexjson + flexjson + 2.1 + + + + org.apache.httpcomponents + httpcore + + + org.apache.httpcomponents + httpclient + + + + net.coobird + thumbnailator + 0.4.7 + + + org.apache.directory.studio + org.apache.commons.io + 2.4 + + + + javax.mail + mail + 1.4.7 + + + + org.apache.tomcat + tomcat-servlet-api + provided + + + com.aliyun.oss + aliyun-sdk-oss + + + javax.validation + validation-api + + + org.springframework + spring-websocket + + + org.springframework + spring-messaging + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.core + jackson-annotations + + + com.fasterxml.jackson.dataformat + jackson-dataformat-avro + + + + com.fasterxml + classmate + 1.5.1 + + + + redis.clients + jedis + + + io.springfox + springfox-swagger2 + + + io.swagger + swagger-models + + + + + io.swagger + swagger-models + + + com.github.xiaoymin + swagger-bootstrap-ui + + + io.springfox + springfox-swagger-ui + + + io.springfox + springfox-bean-validators + + + + + + org.jsoup + jsoup + + + se.jiderhamn.classloader-leak-prevention + classloader-leak-prevention-servlet + + + org.springframework + spring-test + provided + + + + junit + junit + 4.12 + test + + + org.javassist + javassist + + + org.projectlombok + lombok + + + + + ROOT + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.2 + + ${tomcatUrl} + _qfbAdmin + _qfb2587 + / + true + + + + + org.eclipse.jetty + jetty-maven-plugin + 9.4.8.v20171121 + + + ${webserver.port} + + + / + src/test/resources/webdefault.xml + + + + org.mortbay.util.URI.charset + ${project.build.sourceEncoding} + + + + + + + diff --git a/backend/xiaoqu-public/pom.xml b/backend/xiaoqu-public/pom.xml new file mode 100644 index 0000000..7daa0cc --- /dev/null +++ b/backend/xiaoqu-public/pom.xml @@ -0,0 +1,33 @@ + + + + me.iiv.xiaoqu + xiaoqu-app-parent + 1.0-SNAPSHOT + ../xiaoqu-app-parent/pom.xml + + + 4.0.0 + xiaoqu-public + + + + com.alibaba + fastjson + + + cn.hutool + hutool-all + + + io.swagger + swagger-models + + + org.projectlombok + lombok + + + \ No newline at end of file diff --git a/deploy/docker-app/.env b/deploy/docker-app/.env new file mode 100644 index 0000000..4c8d450 --- /dev/null +++ b/deploy/docker-app/.env @@ -0,0 +1,11 @@ +# SmartClean App Docker 部署环境变量 + +# 版本号(由 deploy.sh 自动设置) +VERSION=latest + +# 宿主机端口映射 +COMPLEX_PORT=18091 +MALL_PORT=18086 + +# 飞书通知 +FEISHU_WEBHOOK=https://open.feishu.cn/open-apis/bot/v2/hook/5703e8cc-6998-46a6-af9d-8c5102cc8c1e diff --git a/deploy/docker-app/Dockerfile.complex b/deploy/docker-app/Dockerfile.complex new file mode 100644 index 0000000..673cd7f --- /dev/null +++ b/deploy/docker-app/Dockerfile.complex @@ -0,0 +1,6 @@ +FROM tomcat:8.5-jdk8-temurin +RUN rm -rf /usr/local/tomcat/webapps/* \ + && mkdir -p /app/logs \ + && apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* +COPY backend/xiaoqu-complex/target/ROOT.war /usr/local/tomcat/webapps/ +EXPOSE 8080 diff --git a/deploy/docker-app/Dockerfile.mall b/deploy/docker-app/Dockerfile.mall new file mode 100644 index 0000000..2b45288 --- /dev/null +++ b/deploy/docker-app/Dockerfile.mall @@ -0,0 +1,6 @@ +FROM tomcat:8.5-jdk8-temurin +RUN rm -rf /usr/local/tomcat/webapps/* \ + && mkdir -p /app/logs \ + && apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* +COPY backend/xiaoqu-mall/target/ROOT.war /usr/local/tomcat/webapps/ +EXPOSE 8080 diff --git a/deploy/docker-app/deploy.sh b/deploy/docker-app/deploy.sh new file mode 100755 index 0000000..58cd1b2 --- /dev/null +++ b/deploy/docker-app/deploy.sh @@ -0,0 +1,365 @@ +#!/bin/bash +# +# SmartClean App 后台一键部署脚本(Docker 本地版) +# +# 用法: +# ./deploy.sh # 构建并部署 complex + mall +# ./deploy.sh complex # 仅构建部署 xiaoqu-complex +# ./deploy.sh mall # 仅构建部署 xiaoqu-mall +# ./deploy.sh rollback # 回滚到上一版本 +# ./deploy.sh status # 查看容器状态 +# ./deploy.sh logs [服务名] # 查看日志 +# ./deploy.sh stop # 停止所有容器 +# ./deploy.sh clean # 停止并清理(含数据卷) + +set -e + +DEPLOY_DIR="$(cd "$(dirname "$0")" && pwd)" +ROOT_DIR="$(dirname "$(dirname "$DEPLOY_DIR")")" +source "$DEPLOY_DIR/.env" + +# ===== 版本号 ===== +GIT_HASH=$(cd "$ROOT_DIR" && git rev-parse --short HEAD) +TIMESTAMP=$(date +%Y%m%d-%H%M%S) +VERSION="${TIMESTAMP}-${GIT_HASH}" +BRANCH=$(cd "$ROOT_DIR" && git rev-parse --abbrev-ref HEAD) +COMMIT=$(cd "$ROOT_DIR" && git log -1 --format='%h %s') + +BACKUP_FILE="$DEPLOY_DIR/.last-version" +CURRENT_FILE="$DEPLOY_DIR/.current-version" + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +CYAN='\033[0;36m' +NC='\033[0m' + +log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } +log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } +log_error() { echo -e "${RED}[ERROR]${NC} $1"; } +log_step() { echo -e "${CYAN}[STEP]${NC} $1"; } + +if docker compose version > /dev/null 2>&1; then + DC="docker compose -f $DEPLOY_DIR/docker-compose.yml" +else + DC="docker-compose -f $DEPLOY_DIR/docker-compose.yml" +fi + +# ===== 飞书通知 ===== +notify_feishu() { + local title="$1" content="$2" color="$3" + [ -z "$FEISHU_WEBHOOK" ] && return + curl -s -X POST "$FEISHU_WEBHOOK" \ + -H "Content-Type: application/json" \ + -d "{ + \"msg_type\": \"interactive\", + \"card\": { + \"header\": {\"title\":{\"tag\":\"plain_text\",\"content\":\"$title\"},\"template\":\"$color\"}, + \"elements\": [{\"tag\":\"markdown\",\"content\":\"$content\"}] + } + }" > /dev/null 2>&1 +} + +# ===== 检查 Docker ===== +check_docker() { + if ! command -v docker &> /dev/null; then + log_error "Docker 未安装" + exit 1 + fi + if ! docker info > /dev/null 2>&1; then + log_error "Docker 未启动" + exit 1 + fi +} + +# ===== 备份当前版本号 ===== +backup_version() { + if [ -f "$CURRENT_FILE" ]; then + cp "$CURRENT_FILE" "$BACKUP_FILE" + log_info "已备份当前版本: $(cat "$BACKUP_FILE")" + fi +} + +# ===== 本地构建产物 ===== +build_local() { + local target="${1:-all}" + local start_time=$(date +%s) + + # 切换 Java 8 + export JAVA_HOME="$HOME/.sdkman/candidates/java/8.0.432-zulu" + export PATH="$JAVA_HOME/bin:$PATH" + + cd "$ROOT_DIR/backend" + + # 先安装 intellectual-public(complex 依赖它) + if [ "$target" = "all" ] || [ "$target" = "complex" ]; then + log_info " 安装 xiaoqu-intellectual-public..." + mvn clean install -pl xiaoqu-intellectual-public -DskipTests -q + fi + + # 从 app-parent 用 docker profile 构建 + cd "$ROOT_DIR/backend/xiaoqu-app-parent" + + case "$target" in + complex) + log_step "构建 xiaoqu-complex (-P docker)..." + mvn clean package -pl ../xiaoqu-complex -am -P docker -DskipTests -q + ;; + mall) + log_step "构建 xiaoqu-mall (-P docker)..." + mvn clean package -pl ../xiaoqu-mall -am -P docker -DskipTests -q + ;; + all) + log_step "构建全部 App 模块 (-P docker)..." + mvn clean package -P docker -DskipTests -q + ;; + esac + + # 验证产物 + case "$target" in + complex|all) + [ ! -f "$ROOT_DIR/backend/xiaoqu-complex/target/ROOT.war" ] && log_error "complex ROOT.war 不存在" && exit 1 + log_info " complex: $(du -h "$ROOT_DIR/backend/xiaoqu-complex/target/ROOT.war" | cut -f1)" + ;;& + mall|all) + [ ! -f "$ROOT_DIR/backend/xiaoqu-mall/target/ROOT.war" ] && log_error "mall ROOT.war 不存在" && exit 1 + log_info " mall: $(du -h "$ROOT_DIR/backend/xiaoqu-mall/target/ROOT.war" | cut -f1)" + ;; + esac + + local elapsed=$(( $(date +%s) - start_time )) + log_info "本地构建完成 (${elapsed}s)" +} + +# ===== 打包 Docker 镜像 ===== +build_images() { + local target="${1:-all}" + local start_time=$(date +%s) + + cd "$DEPLOY_DIR" + + case "$target" in + complex) + log_step "打包 Complex 镜像 ($VERSION)..." + $DC build --no-cache complex + docker tag smartclean-complex:latest smartclean-complex:$VERSION 2>/dev/null || true + ;; + mall) + log_step "打包 Mall 镜像 ($VERSION)..." + $DC build --no-cache mall + docker tag smartclean-mall:latest smartclean-mall:$VERSION 2>/dev/null || true + ;; + all) + log_step "打包全部镜像 ($VERSION)..." + $DC build --no-cache + docker tag smartclean-complex:latest smartclean-complex:$VERSION 2>/dev/null || true + docker tag smartclean-mall:latest smartclean-mall:$VERSION 2>/dev/null || true + ;; + esac + + local elapsed=$(( $(date +%s) - start_time )) + log_info "镜像打包完成 (${elapsed}s)" +} + +# ===== 部署服务 ===== +deploy_services() { + local target="${1:-all}" + + cd "$DEPLOY_DIR" + + log_step "部署容器..." + case "$target" in + complex) + $DC up -d --no-deps complex + ;; + mall) + $DC up -d --no-deps mall + ;; + all) + $DC down 2>/dev/null || true + $DC up -d + ;; + esac + + log_info "容器已启动" +} + +# ===== 健康检查 ===== +healthcheck() { + local target="${1:-all}" + local max_retries=30 + local interval=3 + + log_step "健康检查..." + + if [ "$target" = "all" ] || [ "$target" = "complex" ]; then + log_info " 检查 Complex (http://localhost:$COMPLEX_PORT)..." + for i in $(seq 1 $max_retries); do + if curl -sf "http://localhost:$COMPLEX_PORT/" > /dev/null 2>&1; then + log_info " Complex 健康 (第${i}次检查通过)" + break + fi + if [ $i -eq $max_retries ]; then + log_error " Complex 健康检查失败" + return 1 + fi + printf "." + sleep $interval + done + fi + + if [ "$target" = "all" ] || [ "$target" = "mall" ]; then + log_info " 检查 Mall (http://localhost:$MALL_PORT)..." + for i in $(seq 1 $max_retries); do + if curl -sf "http://localhost:$MALL_PORT/" > /dev/null 2>&1; then + log_info " Mall 健康 (第${i}次检查通过)" + break + fi + if [ $i -eq $max_retries ]; then + log_error " Mall 健康检查失败" + return 1 + fi + printf "." + sleep $interval + done + fi + + log_info "健康检查通过" + return 0 +} + +# ===== 回滚 ===== +rollback() { + if [ ! -f "$BACKUP_FILE" ]; then + log_error "没有可回滚的版本" + exit 1 + fi + + local old_version=$(cat "$BACKUP_FILE") + log_warn "回滚到版本: $old_version" + + local has_images=true + docker image inspect smartclean-complex:$old_version > /dev/null 2>&1 || has_images=false + docker image inspect smartclean-mall:$old_version > /dev/null 2>&1 || has_images=false + + if [ "$has_images" = false ]; then + log_error "旧版本镜像不存在 ($old_version),无法回滚" + exit 1 + fi + + export VERSION="$old_version" + cd "$DEPLOY_DIR" + $DC down 2>/dev/null || true + $DC up -d + + echo "$old_version" > "$CURRENT_FILE" + log_info "回滚完成" + + notify_feishu "SmartClean App 已回滚 (Docker)" \ + "**回滚版本:** $old_version" \ + "yellow" +} + +# ===== 清理旧镜像 ===== +cleanup_images() { + log_info "清理旧镜像(保留最近 5 个版本)..." + for name in smartclean-complex smartclean-mall; do + docker images "$name" --format "{{.Tag}}" | grep -v "latest" | sort -r | tail -n +6 | while read tag; do + docker rmi "$name:$tag" 2>/dev/null && echo " 删除 $name:$tag" + done + done +} + +# ===== 主流程 ===== +TARGET="${1:-all}" +DEPLOY_START=$(date +%s) + +case "$TARGET" in + status) + $DC ps + exit 0 + ;; + logs) + shift + $DC logs -f $@ + exit 0 + ;; + stop) + log_info "停止所有容器..." + $DC down + log_info "已停止" + exit 0 + ;; + clean) + log_warn "停止所有容器并清理数据卷..." + $DC down -v --rmi all + log_info "已清理" + exit 0 + ;; + rollback) + check_docker + rollback + exit 0 + ;; + all|complex|mall) + ;; + *) + echo "用法: $0 {all|complex|mall|rollback|status|logs|stop|clean}" + exit 1 + ;; +esac + +echo "" +log_info "======================================" +log_info " SmartClean App 部署 (Docker)" +log_info " 版本: $VERSION" +log_info " 分支: $BRANCH" +log_info " 提交: $COMMIT" +log_info " 目标: $TARGET" +log_info "======================================" +echo "" + +# 1. 检查 Docker +check_docker + +# 2. 备份当前版本号 +backup_version + +# 3. 本地构建(Maven -P docker) +build_local "$TARGET" + +# 4. 打包 Docker 镜像 +build_images "$TARGET" + +# 5. 部署容器 +deploy_services "$TARGET" + +# 6. 健康检查 +if healthcheck "$TARGET"; then + echo "$VERSION" > "$CURRENT_FILE" + cleanup_images + + ELAPSED=$(( $(date +%s) - DEPLOY_START )) + + echo "" + log_info "======================================" + log_info " App 部署成功!" + log_info " 版本: $VERSION" + log_info " 耗时: ${ELAPSED}s" + log_info " Complex: http://localhost:$COMPLEX_PORT" + log_info " Mall: http://localhost:$MALL_PORT" + log_info "======================================" + + notify_feishu "SmartClean App 部署成功 (Docker)" \ + "**版本:** $VERSION\\n**分支:** $BRANCH\\n**提交:** $COMMIT\\n**目标:** $TARGET\\n**耗时:** ${ELAPSED}s\\n**Complex:** http://localhost:$COMPLEX_PORT\\n**Mall:** http://localhost:$MALL_PORT" \ + "green" +else + log_error "健康检查失败,自动回滚..." + rollback + + ELAPSED=$(( $(date +%s) - DEPLOY_START )) + notify_feishu "SmartClean App 部署失败 (Docker,已回滚)" \ + "**版本:** $VERSION\\n**分支:** $BRANCH\\n**提交:** $COMMIT\\n**耗时:** ${ELAPSED}s\\n**状态:** 健康检查失败,已自动回滚" \ + "red" + exit 1 +fi diff --git a/deploy/docker-app/docker-compose.yml b/deploy/docker-app/docker-compose.yml new file mode 100644 index 0000000..258f9b4 --- /dev/null +++ b/deploy/docker-app/docker-compose.yml @@ -0,0 +1,52 @@ +services: + complex: + image: smartclean-complex:${VERSION:-latest} + container_name: smartclean-complex + build: + context: ../.. + dockerfile: deploy/docker-app/Dockerfile.complex + ports: + - "${COMPLEX_PORT:-18091}:8080" + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: + - complex_logs:/app/logs + healthcheck: + test: ["CMD", "curl", "-sf", "http://localhost:8080/"] + interval: 15s + timeout: 5s + retries: 5 + start_period: 90s + restart: on-failure:3 + networks: + - smartclean-app + + mall: + image: smartclean-mall:${VERSION:-latest} + container_name: smartclean-mall + build: + context: ../.. + dockerfile: deploy/docker-app/Dockerfile.mall + ports: + - "${MALL_PORT:-18086}:8080" + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: + - mall_logs:/app/logs + healthcheck: + test: ["CMD", "curl", "-sf", "http://localhost:8080/"] + interval: 15s + timeout: 5s + retries: 5 + start_period: 90s + restart: on-failure:3 + networks: + - smartclean-app + +volumes: + complex_logs: + mall_logs: + +networks: + smartclean-app: + driver: bridge