# 蓝牙耳机TWS系统 **Repository Path**: wenyan-zhang/BluetoothMES ## Basic Information - **Project Name**: 蓝牙耳机TWS系统 - **Description**: 实训蓝牙耳机TWS项目。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-08 - **Last Updated**: 2026-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BluetoothMES 蓝牙耳机制造执行系统 BluetoothMES 是面向蓝牙耳机生产场景的 MES 后端项目,提供基础资料、订单、生产计划、工单、工艺路线、生产执行、质量、设备、仓储、安灯异常、通知中心和运营分析等接口。 ## 技术栈 - Java 17 - Spring Boot 3.5.16 - MyBatis-Plus 3.5.12 - MySQL 8 - Redis 5 - Log4j2 - Maven Wrapper ## 后端分层 ```text 前端 -> Controller 接收 HTTP 请求 -> Service 定义业务接口 -> ServiceImpl 实现业务、事务、校验和缓存 -> Mapper 操作数据库 -> MySQL / Redis ``` 主要目录: ```text src/main/java/com/mes/bluetoothmes ├── controller HTTP 接口 ├── service 业务接口 ├── service/impl 业务实现 ├── mapper MyBatis-Plus 数据访问 ├── entity 数据库实体及接口请求/响应对象 ├── config Redis、跨域和异常配置 ├── common 公共返回结果和缓存名称 └── util 密码和手机号等工具 ``` ## 环境准备 1. 安装 Java 17 和 MySQL 8。 2. 执行 `src/main/sql/bluetooth_mes.sql` 创建数据库和初始化数据。 3. 配置 MySQL 密码环境变量 `MYSQL_PASSWORD`。 4. 需要缓存功能时启动 Redis,默认地址为 `localhost:6379`。 MySQL 和 Redis 密码通过环境变量读取;本实习项目的 DeepSeek 密钥按小组约定在 `application.yml` 中配置。 项目使用的环境变量: | 环境变量 | 必填 | 说明 | |---|---|---| | `MYSQL_PASSWORD` | 是 | MySQL root 用户密码 | | `REDIS_HOST` | 否 | Redis 地址,默认 `localhost` | | `REDIS_PORT` | 否 | Redis端口,默认 `6379` | | `REDIS_PASSWORD` | 否 | Redis密码,本地无密码时留空 | | `REDIS_DATABASE` | 否 | Redis数据库编号,默认 `0` | ## 启动项目 在 IDEA 或 VS Code 中运行: ```text src/main/java/com/mes/bluetoothmes/BluetoothMesApplication.java ``` 也可以在项目根目录执行: ```powershell .\mvnw.cmd spring-boot:run ``` 默认服务地址: ```text http://localhost:8080 ``` 连通性测试: ```http GET http://localhost:8080/test ``` 如果提示端口 8080 被占用,说明已经有一个后端进程正在运行,不要重复启动。 ## Redis 缓存 基础资料模块的工厂、仓库、产品和物料查询使用 Redis 缓存,缓存默认保留 30 分钟。新增、修改或删除数据时会自动清理相应缓存。 Redis 不可用时,基础资料查询会跳过缓存并继续访问 MySQL。 缓存管理接口: | 方法 | 地址 | 说明 | |---|---|---| | GET | `/cache/status` | 检查 Redis 连接状态 | | DELETE | `/cache` | 清理全部业务缓存 | | DELETE | `/cache/{cacheName}` | 清理指定缓存 | ## 接口测试 项目根目录的 `api.http` 包含主要接口测试请求。 - IDEA:打开 `api.http`,点击请求左侧绿色三角形。 - VS Code:安装 REST Client,点击 `Send Request`。 - POST、PUT、DELETE 会修改数据库,重复测试前需要修改 `testSuffix`。 ## 生产记录字段说明 `ProductionRecord.java` 对应数据库 `productionrecord` 表。 | 字段名 | Java属性 | 类型 | 允许为空 | 默认值 | 说明 | |---|---|---|---|---|---| | `record_id` | `recordId` | varchar(32) | 否 | 无 | 生产记录主键 | | `workorder_id` | `workorderId` | varchar(32) | 是 | NULL | 所属生产工单ID,关联 `workorder` | | `process_id` | `processId` | varchar(32) | 是 | NULL | 当前工序ID,关联 `process` | | `equipment_id` | `equipmentId` | varchar(32) | 是 | NULL | 执行工序使用的设备ID | | `operator_id` | `operatorId` | varchar(32) | 是 | NULL | 执行工序的操作员ID | | `start_time` | `startTime` | datetime | 是 | NULL | 工序开始时间 | | `end_time` | `endTime` | datetime | 是 | NULL | 工序结束时间 | | `qty_good` | `qtyGood` | int | 是 | NULL | 本次报工的良品数量 | | `qty_ng` | `qtyNg` | int | 是 | NULL | 本次报工的不良品数量 | | `remark` | `remark` | varchar(255) | 是 | NULL | 生产报工备注 | | `process_status` | `processStatus` | varchar(20) | 是 | NULL | 工序执行状态 | `process_status` 可选值: | 状态值 | 含义 | |---|---| | `START` | 开始 | | `CREATED` | 工单创建 | | `PLANNED` | 计划已安排 | | `RELEASED` | 已下发车间 | | `MATERIAL_READY` | 物料准备完成 | | `RUNNING` | 生产中 | | `INSPECTION` | 产品质量检验 | | `COMPLETED` | 工单完成 | 数据库使用下划线命名,例如 `process_status`;Java 使用驼峰命名,例如 `processStatus`。MyBatis-Plus 根据 `map-underscore-to-camel-case` 自动完成映射。 ## 主要接口模块 | 模块 | 接口前缀 | |---|---| | 用户 | `/user` | | 系统管理 | `/system` | | 基础资料 | `/basic` | | 客户订单 | `/orders` | | 生产计划与执行 | `/production` | | 生产工单 | `/workorder` | | 工艺路线 | `/process` | | 质量管理 | `/quality` | | 设备管理 | `/equipment` | | 仓储物流 | `/inventory` | | 安灯异常 | `/andon/events` | | 运营分析 | `/analysis` | | AI问答 | `/ai` | ## 编译与测试 编译: ```powershell .\mvnw.cmd -DskipTests compile ``` 运行 Spring 上下文和接口注册测试: ```powershell .\mvnw.cmd -Dtest=BluetoothMesApplicationTests test ``` 真实数据库集成测试需要正确配置 `MYSQL_PASSWORD` 并提前导入 `src/main/sql/bluetooth_mes.sql`。 ## 日志 运行日志使用项目相对路径: ```text logs/bluetooth-mes.log ``` 日志按日期和文件大小滚动,`logs/` 已加入 `.gitignore`。