Showing
4 changed files
with
397 additions
and
0 deletions
.gitignore
0 → 100644
| 1 | +# 编译输出 | ||
| 2 | +target/ | ||
| 3 | +dist/ | ||
| 4 | +build/ | ||
| 5 | +out/ | ||
| 6 | + | ||
| 7 | +# 依赖包 | ||
| 8 | +node_modules/ | ||
| 9 | +.m2/ | ||
| 10 | + | ||
| 11 | +# IDE文件 | ||
| 12 | +.idea/ | ||
| 13 | +.vscode/ | ||
| 14 | +*.iml | ||
| 15 | +*.ipr | ||
| 16 | +*.iws | ||
| 17 | +.settings/ | ||
| 18 | +.project | ||
| 19 | +.classpath | ||
| 20 | + | ||
| 21 | +# 操作系统文件 | ||
| 22 | +.DS_Store | ||
| 23 | +Thumbs.db | ||
| 24 | +*.swp | ||
| 25 | +*.swo | ||
| 26 | +*~ | ||
| 27 | + | ||
| 28 | +# 日志文件 | ||
| 29 | +*.log | ||
| 30 | +logs/ | ||
| 31 | +log/ | ||
| 32 | + | ||
| 33 | +# 临时文件 | ||
| 34 | +*.tmp | ||
| 35 | +*.temp | ||
| 36 | +.tmp/ | ||
| 37 | +.temp/ | ||
| 38 | + | ||
| 39 | +# 环境配置文件 | ||
| 40 | +.env | ||
| 41 | +.env.local | ||
| 42 | +.env.development.local | ||
| 43 | +.env.test.local | ||
| 44 | +.env.production.local | ||
| 45 | + | ||
| 46 | +# 数据库文件 | ||
| 47 | +*.db | ||
| 48 | +*.sqlite | ||
| 49 | +*.sqlite3 | ||
| 50 | + | ||
| 51 | +# 备份文件 | ||
| 52 | +*.bak | ||
| 53 | +*.backup | ||
| 54 | + | ||
| 55 | +# 缓存文件 | ||
| 56 | +.cache/ | ||
| 57 | +.parcel-cache/ | ||
| 58 | +.eslintcache | ||
| 59 | + | ||
| 60 | +# 覆盖率报告 | ||
| 61 | +coverage/ | ||
| 62 | +.nyc_output/ | ||
| 63 | + | ||
| 64 | +# 测试文件 | ||
| 65 | +test-results/ | ||
| 66 | +playwright-report/ | ||
| 67 | + | ||
| 68 | +# Docker文件 | ||
| 69 | +.dockerignore | ||
| 70 | + | ||
| 71 | +# 其他 | ||
| 72 | +*.pid | ||
| 73 | +*.seed | ||
| 74 | +*.pid.lock | ||
| 75 | +.npm | ||
| 76 | +.yarn-integrity |
README.md
0 → 100644
| 1 | +# Apple经销商ERP系统对接项目 | ||
| 2 | + | ||
| 3 | +## 项目简介 | ||
| 4 | + | ||
| 5 | +Apple经销商ERP系统对接项目是一个专门为Apple经销商设计的ERP系统集成平台,实现与Apple系统的数据对接,提供订单管理、出库查询、发票管理、返利管理、异常处理等核心功能。 | ||
| 6 | + | ||
| 7 | +## 项目结构 | ||
| 8 | + | ||
| 9 | +``` | ||
| 10 | +apple-dealer-erp/ | ||
| 11 | +├── 📁 docs/ # 项目文档 | ||
| 12 | +│ ├── 📁 requirements/ # 需求文档 | ||
| 13 | +│ ├── 📁 design/ # 设计文档 | ||
| 14 | +│ ├── 📁 development/ # 开发文档 | ||
| 15 | +│ ├── 📁 deployment/ # 部署文档 | ||
| 16 | +│ └── 📁 maintenance/ # 维护文档 | ||
| 17 | +├── 📁 database/ # 数据库相关 | ||
| 18 | +│ ├── 📁 scripts/ # 数据库脚本 | ||
| 19 | +│ ├── 📁 backup/ # 备份目录 | ||
| 20 | +│ └── 📁 docs/ # 数据库文档 | ||
| 21 | +├── 📁 scripts/ # 脚本工具 | ||
| 22 | +├── 📁 docker/ # Docker配置 | ||
| 23 | +├── 📁 tests/ # 测试目录 | ||
| 24 | +├── 📁 logs/ # 日志目录 | ||
| 25 | +├── 📁 config/ # 配置文件 | ||
| 26 | +├── 📁 backend/ # 后端项目(待开发) | ||
| 27 | +├── 📁 frontend/ # 前端项目(待开发) | ||
| 28 | +└── 📄 docker-compose.yml # 整体容器编排 | ||
| 29 | +``` | ||
| 30 | + | ||
| 31 | +## 技术栈 | ||
| 32 | + | ||
| 33 | +### 后端技术栈 | ||
| 34 | +- **框架**: Spring Boot 2.7.x | ||
| 35 | +- **数据库**: MySQL 8.0 | ||
| 36 | +- **缓存**: Redis 6.0 | ||
| 37 | +- **ORM**: MyBatis Plus 3.5.x | ||
| 38 | +- **安全**: Spring Security + JWT | ||
| 39 | +- **构建工具**: Maven 3.8.x | ||
| 40 | +- **JDK版本**: OpenJDK 8 | ||
| 41 | + | ||
| 42 | +### 前端技术栈 | ||
| 43 | +- **框架**: Vue 3.3+ | ||
| 44 | +- **构建工具**: Vite 4.0+ | ||
| 45 | +- **UI组件**: Element Plus 2.3+ | ||
| 46 | +- **状态管理**: Pinia 2.1+ | ||
| 47 | +- **路由**: Vue Router 4.2+ | ||
| 48 | +- **HTTP客户端**: Axios 1.4+ | ||
| 49 | +- **图表**: ECharts 5.4+ | ||
| 50 | +- **语言**: TypeScript 5.0+ | ||
| 51 | + | ||
| 52 | +## 核心功能模块 | ||
| 53 | + | ||
| 54 | +### 业务功能 | ||
| 55 | +- **订单管理**: 订单录入、查询、修改、删除 | ||
| 56 | +- **出库查询**: 出库单查询、状态跟踪 | ||
| 57 | +- **发票管理**: 发票录入、查询、统计 | ||
| 58 | +- **返利管理**: 返利计算、查询、统计 | ||
| 59 | +- **异常处理**: 异常工单创建、处理、跟踪 | ||
| 60 | +- **产品管理**: 产品信息维护 | ||
| 61 | +- **经销商管理**: 经销商信息维护 | ||
| 62 | + | ||
| 63 | +### 系统管理 | ||
| 64 | +- **用户管理**: 用户CRUD、密码管理 | ||
| 65 | +- **角色管理**: 角色CRUD、权限分配 | ||
| 66 | +- **菜单管理**: 菜单树结构、权限控制 | ||
| 67 | +- **字典管理**: 数据字典维护 | ||
| 68 | +- **日志管理**: 操作日志、登录日志 | ||
| 69 | + | ||
| 70 | +## 开发计划 | ||
| 71 | + | ||
| 72 | +项目采用两周开发计划,详细内容请参考: | ||
| 73 | +- [两周开发计划](docs/development/Apple经销商ERP系统对接项目-两周开发计划.md) | ||
| 74 | +- [前端开发计划](docs/development/Apple经销商ERP前端开发计划.md) | ||
| 75 | + | ||
| 76 | +## 快速开始 | ||
| 77 | + | ||
| 78 | +### 环境要求 | ||
| 79 | +- JDK 8+ | ||
| 80 | +- Node.js 16+ | ||
| 81 | +- MySQL 8.0+ | ||
| 82 | +- Redis 6.0+ | ||
| 83 | +- Maven 3.8+ | ||
| 84 | + | ||
| 85 | +### 开发环境搭建 | ||
| 86 | +1. 克隆项目 | ||
| 87 | +2. 配置数据库连接 | ||
| 88 | +3. 执行初始化脚本 | ||
| 89 | +4. 启动后端服务 | ||
| 90 | +5. 启动前端服务 | ||
| 91 | + | ||
| 92 | +详细步骤请参考 [部署指南](docs/deployment/部署指南.md) | ||
| 93 | + | ||
| 94 | +## 文档说明 | ||
| 95 | + | ||
| 96 | +- **需求文档**: [Apple 经销商 ERP 系统对接项目](docs/requirements/Apple%20经销商%20ERP%20系统对接项目.md) | ||
| 97 | +- **技术架构**: [技术架构设计](docs/design/技术架构设计.md) | ||
| 98 | +- **数据库设计**: [数据库设计文档](docs/design/数据库设计文档.md) | ||
| 99 | +- **开发计划**: [两周开发计划](docs/development/Apple经销商ERP系统对接项目-两周开发计划.md) | ||
| 100 | + | ||
| 101 | +## 许可证 | ||
| 102 | + | ||
| 103 | +本项目采用 MIT 许可证,详情请参考 [LICENSE](LICENSE) 文件。 | ||
| 104 | + | ||
| 105 | +## 联系方式 | ||
| 106 | + | ||
| 107 | +如有问题,请联系开发团队。 |
docker-compose.yml
0 → 100644
| 1 | +version: '3.8' | ||
| 2 | + | ||
| 3 | +services: | ||
| 4 | + # MySQL数据库 | ||
| 5 | + mysql: | ||
| 6 | + image: mysql:8.0 | ||
| 7 | + container_name: apple-erp-mysql | ||
| 8 | + restart: always | ||
| 9 | + environment: | ||
| 10 | + MYSQL_ROOT_PASSWORD: MySQL@123 | ||
| 11 | + MYSQL_DATABASE: apple_erp | ||
| 12 | + MYSQL_USER: apple_erp | ||
| 13 | + MYSQL_PASSWORD: apple_erp123 | ||
| 14 | + ports: | ||
| 15 | + - "3306:3306" | ||
| 16 | + volumes: | ||
| 17 | + - mysql_data:/var/lib/mysql | ||
| 18 | + - ./database/scripts:/docker-entrypoint-initdb.d | ||
| 19 | + command: --default-authentication-plugin=mysql_native_password | ||
| 20 | + networks: | ||
| 21 | + - apple-erp-network | ||
| 22 | + | ||
| 23 | + # Redis缓存 | ||
| 24 | + redis: | ||
| 25 | + image: redis:6.0-alpine | ||
| 26 | + container_name: apple-erp-redis | ||
| 27 | + restart: always | ||
| 28 | + ports: | ||
| 29 | + - "6379:6379" | ||
| 30 | + volumes: | ||
| 31 | + - redis_data:/data | ||
| 32 | + command: redis-server --appendonly yes | ||
| 33 | + networks: | ||
| 34 | + - apple-erp-network | ||
| 35 | + | ||
| 36 | + # 后端服务 | ||
| 37 | + backend: | ||
| 38 | + build: | ||
| 39 | + context: ./backend | ||
| 40 | + dockerfile: Dockerfile | ||
| 41 | + container_name: apple-erp-backend | ||
| 42 | + restart: always | ||
| 43 | + ports: | ||
| 44 | + - "8080:8080" | ||
| 45 | + environment: | ||
| 46 | + SPRING_PROFILES_ACTIVE: docker | ||
| 47 | + SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/apple_erp?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai | ||
| 48 | + SPRING_DATASOURCE_USERNAME: apple_erp | ||
| 49 | + SPRING_DATASOURCE_PASSWORD: apple_erp123 | ||
| 50 | + SPRING_REDIS_HOST: redis | ||
| 51 | + SPRING_REDIS_PORT: 6379 | ||
| 52 | + depends_on: | ||
| 53 | + - mysql | ||
| 54 | + - redis | ||
| 55 | + volumes: | ||
| 56 | + - ./logs/backend:/app/logs | ||
| 57 | + - ./config/development:/app/config | ||
| 58 | + networks: | ||
| 59 | + - apple-erp-network | ||
| 60 | + | ||
| 61 | + # 前端服务 | ||
| 62 | + frontend: | ||
| 63 | + build: | ||
| 64 | + context: ./frontend | ||
| 65 | + dockerfile: Dockerfile | ||
| 66 | + container_name: apple-erp-frontend | ||
| 67 | + restart: always | ||
| 68 | + ports: | ||
| 69 | + - "80:80" | ||
| 70 | + depends_on: | ||
| 71 | + - backend | ||
| 72 | + volumes: | ||
| 73 | + - ./logs/frontend:/var/log/nginx | ||
| 74 | + networks: | ||
| 75 | + - apple-erp-network | ||
| 76 | + | ||
| 77 | + # Nginx反向代理 | ||
| 78 | + nginx: | ||
| 79 | + image: nginx:alpine | ||
| 80 | + container_name: apple-erp-nginx | ||
| 81 | + restart: always | ||
| 82 | + ports: | ||
| 83 | + - "443:443" | ||
| 84 | + volumes: | ||
| 85 | + - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf | ||
| 86 | + - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf | ||
| 87 | + - ./docker/nginx/ssl:/etc/nginx/ssl | ||
| 88 | + - ./logs/nginx:/var/log/nginx | ||
| 89 | + depends_on: | ||
| 90 | + - frontend | ||
| 91 | + - backend | ||
| 92 | + networks: | ||
| 93 | + - apple-erp-network | ||
| 94 | + | ||
| 95 | +volumes: | ||
| 96 | + mysql_data: | ||
| 97 | + driver: local | ||
| 98 | + redis_data: | ||
| 99 | + driver: local | ||
| 100 | + | ||
| 101 | +networks: | ||
| 102 | + apple-erp-network: | ||
| 103 | + driver: bridge |
test_api.md
0 → 100644
| 1 | +# API 测试指南 | ||
| 2 | + | ||
| 3 | +## 测试统一响应格式的API接口 | ||
| 4 | + | ||
| 5 | +### 1. 登录接口测试 | ||
| 6 | + | ||
| 7 | +**请求URL**: `POST http://localhost:8083/api/auth/login` | ||
| 8 | + | ||
| 9 | +**请求体**: | ||
| 10 | +```json | ||
| 11 | +{ | ||
| 12 | + "username": "admin", | ||
| 13 | + "password": "password" | ||
| 14 | +} | ||
| 15 | +``` | ||
| 16 | + | ||
| 17 | +**预期响应** (统一响应格式): | ||
| 18 | +```json | ||
| 19 | +{ | ||
| 20 | + "code": 200, | ||
| 21 | + "message": "登录成功", | ||
| 22 | + "data": { | ||
| 23 | + "token": "eyJhbGciOiJIUzUxMiJ9...", | ||
| 24 | + "refreshToken": "eyJhbGciOiJIUzUxMiJ9...", | ||
| 25 | + "username": "admin" | ||
| 26 | + } | ||
| 27 | +} | ||
| 28 | +``` | ||
| 29 | + | ||
| 30 | +### 2. 刷新令牌接口测试 | ||
| 31 | + | ||
| 32 | +**请求URL**: `POST http://localhost:8083/api/auth/refresh` | ||
| 33 | + | ||
| 34 | +**请求体**: | ||
| 35 | +```json | ||
| 36 | +{ | ||
| 37 | + "refreshToken": "从登录响应中获取的refreshToken" | ||
| 38 | +} | ||
| 39 | +``` | ||
| 40 | + | ||
| 41 | +**预期响应**: | ||
| 42 | +```json | ||
| 43 | +{ | ||
| 44 | + "code": 200, | ||
| 45 | + "message": "令牌刷新成功", | ||
| 46 | + "data": { | ||
| 47 | + "token": "eyJhbGciOiJIUzUxMiJ9...", | ||
| 48 | + "refreshToken": "eyJhbGciOiJIUzUxMiJ9...", | ||
| 49 | + "username": "admin" | ||
| 50 | + } | ||
| 51 | +} | ||
| 52 | +``` | ||
| 53 | + | ||
| 54 | +### 3. 获取用户信息接口测试 | ||
| 55 | + | ||
| 56 | +**请求URL**: `GET http://localhost:8083/api/auth/userinfo` | ||
| 57 | + | ||
| 58 | +**请求头**: | ||
| 59 | +``` | ||
| 60 | +Authorization: Bearer {从登录响应中获取的token} | ||
| 61 | +``` | ||
| 62 | + | ||
| 63 | +**预期响应**: | ||
| 64 | +```json | ||
| 65 | +{ | ||
| 66 | + "code": 200, | ||
| 67 | + "message": "获取用户信息成功", | ||
| 68 | + "data": { | ||
| 69 | + "username": "admin", | ||
| 70 | + "authorities": [ | ||
| 71 | + { | ||
| 72 | + "authority": "ROLE_ADMIN" | ||
| 73 | + } | ||
| 74 | + ] | ||
| 75 | + } | ||
| 76 | +} | ||
| 77 | +``` | ||
| 78 | + | ||
| 79 | +### 4. 登出接口测试 | ||
| 80 | + | ||
| 81 | +**请求URL**: `POST http://localhost:8083/api/auth/logout` | ||
| 82 | + | ||
| 83 | +**预期响应**: | ||
| 84 | +```json | ||
| 85 | +{ | ||
| 86 | + "code": 200, | ||
| 87 | + "message": "登出成功", | ||
| 88 | + "data": null | ||
| 89 | +} | ||
| 90 | +``` | ||
| 91 | + | ||
| 92 | +## 改进点 | ||
| 93 | + | ||
| 94 | +1. **类型安全**: 使用强类型对象替代Map,提供编译时类型检查 | ||
| 95 | +2. **参数验证**: 使用@Valid注解和Bean Validation进行参数验证 | ||
| 96 | +3. **统一响应**: 使用ApiRes统一响应格式,包含code、message、data字段 | ||
| 97 | +4. **简化命名**: 使用简化的类名(Req/Res后缀),代码更简洁 | ||
| 98 | +5. **文档完善**: 使用Swagger注解提供完整的API文档 | ||
| 99 | +6. **代码可读性**: 代码更加清晰,易于维护 | ||
| 100 | +7. **错误处理**: 统一的错误响应格式,便于前端处理 | ||
| 101 | + | ||
| 102 | +## 验证清单 | ||
| 103 | + | ||
| 104 | +- [ ] 登录接口返回统一响应格式(ApiRes<LoginRes>) | ||
| 105 | +- [ ] 参数验证正常工作(空用户名/密码会返回验证错误) | ||
| 106 | +- [ ] 刷新令牌接口正常工作,返回统一响应格式 | ||
| 107 | +- [ ] 用户信息接口正常工作,返回统一响应格式 | ||
| 108 | +- [ ] 登出接口正常工作,返回统一响应格式 | ||
| 109 | +- [ ] 错误响应格式统一(包含code、message、data字段) | ||
| 110 | +- [ ] Swagger文档正确显示新的统一响应格式 | ||
| 111 | +- [ ] 所有类名已成功简化为Req/Res后缀 |
-
Please register or login to post a comment