# sem **Repository Path**: AndyWang66/sem ## Basic Information - **Project Name**: sem - **Description**: 智慧后端项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-09 - **Last Updated**: 2026-06-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SEM — 智慧梯管管理系统 > Smart Elevator Management System > 基于 Spring Boot 的多模块电梯物联网管理平台 --- ## 项目简介 智慧梯管管理系统(SEM)是一套面向电梯行业的综合管理平台,涵盖电梯台账管理、维保计划与任务、合同管理、配件仓库、报价订单、摄像头视频监控、企业微信集成、物联网数据采集(MQTT/EMQX)等核心业务功能。 - **项目版本**: 1.0.0 - **项目地址**: http://www.sem.vip --- ## 技术栈 | 类别 | 技术 | 版本 | |------|------|------| | **基础框架** | Spring Boot | **2.5.15** | | **编程语言** | Java / JDK | **1.8** | | **构建工具** | Maven(多模块) | 3.x | | **ORM 框架** | MyBatis-Plus | 3.4.2 | | **分页插件** | PageHelper | 1.4.6 | | **动态数据源** | dynamic-datasource (baomidou) | 3.5.2 | | **数据库连接池** | Druid (Alibaba) | 1.2.16 | | **关系数据库** | MySQL | 5.7+ | | **缓存** | Redis (Lettuce 客户端 + commons-pool2) | — | | **认证鉴权** | Spring Security + JWT | jjwt 0.9.1 | | **密码加密** | BCryptPasswordEncoder | — | | **权限校验** | Apache Shiro (辅助) | 1.7.1 | | **API 文档** | SpringDoc OpenAPI (Swagger 3) | 1.7.0 | | **定时任务** | Quartz Scheduler | — | | **JSON 解析** | Fastjson2 (Alibaba) | 2.0.41 | | **Excel 处理** | Apache POI | 4.1.2 | | **PDF 导出** | iTextPDF + iText-Asian | 5.5.10 / 5.2.0 | | **代码生成** | Apache Velocity | 2.3 | | **工具库** | Hutool / Guava / Commons IO / Commons Lang3 | — | | **系统监控** | OSHI | 6.4.6 | | **验证码** | Kaptcha | 2.3.3 | | **IoT 通信** | Eclipse Paho MQTT v5 | 1.2.5 | | **流媒体** | ZLMediaKit | — | | **企业微信** | qywx-spring-boot-starter | 4.3.0 | | **Lombok** | Project Lombok | 1.18.26 | ### 核心依赖坐标速查 ```xml 2.5.15 1.8 3.4.2 1.2.16 1.4.6 3.5.2 0.9.1 1.7.1 1.2.5 ``` --- ## 数据库配置 ### 数据库类型 | 服务 | 地址 | 说明 | |------|------|------| | **MySQL** | `jdbc:mysql://localhost:3306/sem` | 主库,数据库名 `sem` | | **Redis** | `localhost:6379` | 缓存 / Token 存储 / Session | | **EMQX (MQTT)** | `tcp://transmit.zhitilvke.com:1883` | IoT 设备消息代理 | ### CDBC 连接参数 ``` useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull &useSSL=true&serverTimezone=Asia/Shanghai&allowMultiQueries=true &noTimezoneConversionForDateType=true ``` ### 读写分离(主从) 支持主从数据源(基于 `dynamic-datasource`),默认**从库关闭**: ```yaml spring: datasource: druid: master: # 主库(必配) url: ... slave: enabled: false # 从库默认关闭 ``` ### 连接池参数(Druid) | 参数 | 开发环境 | 生产环境 | |------|----------|----------| | initialSize | 5 | 10 | | minIdle | 10 | 10 | | maxActive | 20 | 50 | | maxWait | 60s | 60s | ### Druid 监控 - **监控页面**: `/druid/*` - **控制台用户名**: `sem` - **生产环境**: 默认关闭 `webStatFilter` 和 `statViewServlet`(安全考虑) --- ## 整体架构 ### 多模块结构 ``` sem-master/ ├── sem-admin/ # 🚀 Web 入口模块(Spring Boot 主启动类) │ ├── web/controller/ # REST 控制器 │ │ ├── common/ # 公共接口(验证码、通用) │ │ ├── ladderinfo/ # 业务接口(电梯、合同、维保、报价等) │ │ ├── monitor/ # 监控接口(缓存、服务器、操作日志等) │ │ ├── system/ # 系统接口(用户、角色、菜单、部门等) │ │ └── tool/ # 工具接口 │ └── resources/ # 配置文件与 MyBatis XML │ ├── sem-framework/ # 🔧 核心框架模块 │ ├── config/ # Spring 配置(Security、Druid、Redis、线程池等) │ ├── security/ # 安全认证(JWT Filter、认证处理等) │ ├── aspectj/ # AOP 切面(日志、数据权限、数据源切换) │ ├── interceptor/ # 拦截器(重复提交、数据源切换) │ ├── web/service/ # 通用服务(权限、密码、注册) │ └── manager/ # 管理器(异步任务、Shiro 会话) │ ├── sem-system/ # 🏗️ 系统模块(用户/角色/菜单/部门/字典/岗位) │ ├── sem-common/ # 📦 通用工具模块 │ ├── annotation/ # 自定义注解(@Log, @DataScope, @Anonymous 等) │ ├── constant/ # 常量定义 │ ├── core/ # 核心类(BaseController, AjaxResult, RedisCache 等) │ ├── enums/ # 枚举 │ ├── exception/ # 异常处理 │ ├── filter/ # 过滤器(XSS) │ └── utils/ # 工具类 │ ├── sem-quartz/ # ⏰ 定时任务模块(Quartz) │ ├── sem-generator/ # 🔨 代码生成模块(Velocity 模板) │ ├── sem-ladderInfo/ # 🏢 电梯业务模块(核心业务逻辑) │ ├── config/ # EMQX/MQTT 客户端 │ ├── handle/ # 消息处理 │ ├── service/ # 业务服务 │ └── domain/ # 业务实体 │ └── sem-extension/ # 🧩 扩展模块(维修工单、报价审批等) ``` ### 模块依赖拓扑 ``` sem-admin(入口) ├─ sem-framework ────── Shiro 辅助鉴权 │ ├─ sem-system ────── sem-common │ └─ sem-ladderInfo ── sem-common + sem-system ├─ sem-quartz ───────── sem-common + sem-ladderInfo ├─ sem-generator ────── sem-common ├─ sem-ladderInfo ──── 直接引用 └─ sem-extension ────── sem-common + sem-framework ``` ### 请求处理流程 ``` 客户端请求 → CorsFilter(跨域) → JwtAuthenticationTokenFilter(Token 验证 + SecurityContext 设置) → UsernamePasswordAuthenticationFilter(Spring Security 认证链) → Controller(@Anonymous 可跳过认证) → AOP: LogAspect / DataScopeAspect / RepeatSubmitInterceptor → Service → Mapper → Database → AjaxResult / TableDataInfo 统一返回 ``` ### 认证体系 - **认证框架**: Spring Security(主)+ Apache Shiro(辅) - **会话策略**: 无状态(`SessionCreationPolicy.STATELESS`) - **Token 机制**: JWT(jjwt 0.9.1),Header: `Authorization` - **密码加密**: BCryptPasswordEncoder - **匿名访问**: `@Anonymous` 注解标记,配置文件中通过 `PermitAllUrlProperties` 管理 --- ## 多环境配置 | Profile | 配置文件 | 激活方式 | |---------|----------|----------| | `dev`(默认) | `application-dev.yml` | `-P dev` 或默认 | | `docker`(测试) | `application-docker.yml` | `-P test` | | `docker-prod`(生产) | `application-docker-prod.yml` | `-P prod` | 环境变量占位符 `@profilesActive@` 在 Maven 打包时由对应 profile 注入。 --- ## 打包与运行 ### 1. 环境要求 | 组件 | 要求 | |------|------| | JDK | **1.8** 或以上 | | Maven | **3.x** 或以上 | | MySQL | **5.7+**(需先创建数据库 `sem` 并导入 SQL) | | Redis | **5.0+** | | EMQX | 可选(IoT 设备通信,如不需要可禁用) | | ZLMediaKit | 可选(摄像头/视频监控,如不需要可禁用) | ### 2. 打包命令 ```bash # 开发环境打包(默认) mvn clean package # 测试环境打包(Docker 部署) mvn clean package -P test # 生产环境打包(Docker 部署,推荐) mvn clean package -P prod # 跳过测试打包 mvn clean package -P prod -DskipTests ``` **打包产物**: `sem-admin/target/sem-admin.jar` ### 3. 运行方式 #### 方式一:直接运行 JAR ```bash java -jar sem-admin/target/sem-admin.jar # 指定环境 java -jar sem-admin/target/sem-admin.jar --spring.profiles.active=dev # 自定义端口 java -jar sem-admin/target/sem-admin.jar --server.port=9090 ``` #### 方式二:Docker 部署(推荐生产环境) 使用 `application-docker-prod.yml`,通过环境变量传入敏感配置: ```bash docker run -d \ --name sem-app \ -p 8080:8080 \ -e MYSQL_URL="jdbc:mysql://mysql-host:3306/sem?..." \ -e MYSQL_USER="sem_user" \ -e MYSQL_PASSWORD="your_password" \ -e REDIS_HOST="redis-host" \ -e REDIS_PORT="6379" \ -e REDIS_PASSWORD="your_redis_password" \ -e TOKEN_SECRET="your-256-bit-secret" \ -e WEIXIN_CP_CORPID="your-corp-id" \ -e WEIXIN_CP_AGENTID="your-agent-id" \ -e WEIXIN_CP_CORPSECRET="your-secret" \ -e MINI_APPID="your-mini-appid" \ -e MINI_APPSECRET="your-mini-appsecret" \ -e SEM_H5_URL="https://your-h5-domain.com" \ -e SEM_URL_ZHITILVKE="https://your-api-domain.com" \ -v /data/sem/uploadPath:/app/uploadPath \ -v /data/sem/logs:/app/logs \ your-registry/sem-admin:1.0.0 ``` ### 4. 打包注意事项 > ⚠️ **以下事项在打包运行前请务必关注:** 1. **JDK 版本**: 项目必须使用 **JDK 1.8** 编译和运行。更高版本可能遇到兼容性问题(如 `javax.xml.bind` 在 JDK 11+ 中被移除)。 2. **数据库初始化**: 首次运行前必须先在 MySQL 中创建库 `sem` 并执行初始化 SQL 脚本(建表 + 基础数据)。 3. **Redis 必须可用**: 系统使用 Redis 存储 Token、缓存和会话信息,Redis 不可用将导致认证失败。 4. **文件上传路径**: - 开发环境: `D:/sem/uploadPath`(Windows)或 `/sem/uploadPath`(Linux) - Docker 生产环境: `/app/uploadPath` - **必须确保路径存在且有写入权限**。 5. **Token 密钥**: 生产环境必须修改 `token.secret`,默认值 `abcdefghijklmnopqrstuvwxyz` **绝对不能用于生产**。 6. **企业微信配置**: 如使用企业微信审批功能,需正确配置 `corp-id`、`agent-id`、`secret`,生产环境通过环境变量传入。 7. **EMQX / MQTT**: 物联网功能依赖 EMQX Broker。如果不需要 IoT 功能,需确认 MQTT 连接失败不会阻塞应用启动。 8. **ZLMediaKit**: 视频监控功能依赖 ZLMediaKit 流媒体服务。如果不需要摄像头功能,确保相关接口做空值防护。 9. **生产环境安全**: - Druid 监控页面默认关闭(`docker-prod`),如需开启应加 IP 白名单 - Spring Boot Actuator 端点生产环境仅暴露 `health, info` - Swagger/OpenAPI 建议在生产环境关闭(`swagger.enabled: false`) 10. **端口**: 开发环境默认端口 **8084**,Docker 环境默认 **8080**。部署时注意防火墙策略。 11. **日志路径**: Docker 环境下日志写入 `/app/logs`,需挂载卷或确保容器内有写入权限。 12. **Excel 模板文件**: 资源目录中的 `.xlsx` 文件不会被 Maven resource filtering 处理(防止二进制损坏),确保这些文件存在于打包后的 classpath 中。 --- ## 内置功能模块 | 模块 | 说明 | |------|------| | 用户管理 | 系统用户 CRUD、角色分配、密码重置 | | 角色管理 | 角色 CRUD、菜单权限、数据权限分配 | | 菜单管理 | 动态菜单树、按钮权限 | | 部门管理 | 组织架构树 | | 字典管理 | 数据字典维护 | | 岗位管理 | 岗位维护 | | 参数配置 | 系统参数键值对 | | 通知公告 | 系统通知发布 | | 操作日志 | 操作日志记录与查询 | | 登录日志 | 登录日志记录与查询 | | 在线用户 | 在线用户踢出 | | 定时任务 | Quartz 定时任务管理(在线增删改、立即执行、暂停/恢复) | | 代码生成 | 数据库表 → 前端/后端 CRUD 代码一键生成 | | 数据监控 | Druid SQL 监控面板 | | 服务监控 | 服务器 CPU/内存/磁盘/JVM 监控 | | 缓存监控 | Redis 缓存查看与清理 | | 电梯台账 | 电梯设备 CRUD、年检记录 | | 维保计划 | 维保计划编制与执行跟踪 | | 维保任务 | 维保工单流转 | | 维保模式 | 维保项模板配置 | | 合同管理 | 合同、费用、维保梯关联 | | 配件仓库 | 配件库存与出入库 | | 报价订单 | 报价单生成、PDF 导出、企业微信审批 | | 摄像头管理 | 电梯摄像头绑定与 ZLMediaKit 视频推流 | | 物联网接入 | MQTT 协议设备数据采集与指令下发 | | 企业微信 | 企业微信 OAuth 登录、消息推送、审批回调 | | 小程序 | 微信小程序登录授权 | | 维修工单 | 故障报修、维修派工、完工确认(扩展模块) | --- ## 常用启动参数 ```bash # 开发环境热部署启动(已配置 spring-boot-devtools) java -jar sem-admin.jar --spring.profiles.active=dev # 跳过企业微信/MQTT 等外部依赖(开发调试用) java -jar sem-admin.jar \ --emqx.broker= \ --zlm.mediaKit-Url= \ --spring.profiles.active=dev # JVM 调优 java -Xms512m -Xmx1024m -XX:+UseG1GC -jar sem-admin.jar ``` --- ## 项目结构速查 ``` src/main/resources/ ├── application.yml # 主配置(公共 + Profile 切换) ├── application-dev.yml # 开发环境(本地 MySQL/Redis) ├── application-docker.yml # 测试环境(Docker,环境变量注入) ├── application-docker-prod.yml # 生产环境(Docker,安全加固) ├── mybatis/ │ └── mybatis-config.xml # MyBatis 全局配置 ├── i18n/ │ └── messages.properties # 国际化资源 └── META-INF/ └── spring-devtools.properties ``` --- ## 相关链接 - **Spring Boot 2.5.x**: https://docs.spring.io/spring-boot/docs/2.5.x/reference/html/ - **MyBatis-Plus**: https://baomidou.com/ - **Druid**: https://github.com/alibaba/druid - **EMQX**: https://www.emqx.io/ - **ZLMediaKit**: https://github.com/ZLMediaKit/ZLMediaKit --- > 📄 *本文档由项目分析自动生成,请根据实际部署情况补充 SQL 初始化步骤、Dockerfile 构建、CI/CD 流程等运维信息。*