commit 5d45ed8aa3df6d1136ddb0f97fbe4d8524277c37 Author: yy <1137267053@qq.com> Date: Fri Sep 11 09:37:50 2026 +0000 上传文件至「/」 diff --git a/README.md b/README.md new file mode 100644 index 0000000..cd46f30 --- /dev/null +++ b/README.md @@ -0,0 +1,230 @@ +有色再生资源交易平台 - 后端项目架构设计文档 +项目代号:METALLOOP / metalloop +文档版本:v1.0 +创建时间:2026-09-09 +技术基座:Spring Boot 3.x + Sa-Token + MyBatis-Plus + MySQL 8.0 + Redis 6.0 + +1. 项目概述 + 本后端服务于“有色再生资源交易平台”,提供用户认证、权限管理、企业认证、产品目录管理、供应/求购信息发布与审核、即时聊天集成等核心业务 API。系统采用 RBAC(基于角色的访问控制) 权限模型,通过 Sa-Token 实现认证与鉴权,具备高扩展性和可维护性。 + +1.1 核心业务目标 +支持企业注册、认证(营业执照 + 法人信息)、入驻平台; + +支持企业发布供应信息与求购信息; + +支持管理员审核交易信息与企业认证资料; + +支持基于 RBAC 的后台管理权限体系; + +支持与 OpenIM 集成,实现买卖双方在线即时沟通; + +支持多环境部署(开发、测试、生产)。 + +2. 技术栈选型 + 组件 选型 版本 说明 + JDK Oracle OpenJDK 17 LTS 长期支持版本,兼容 Spring Boot 3.x + 开发框架 Spring Boot 3.2.x 核心基础框架 + 安全认证 Sa-Token 1.37.x 轻量级权限认证框架,支持 RBAC、分布式会话 + ORM 框架 MyBatis-Plus 3.5.x 增强 MyBatis,提供代码生成、分页、逻辑删除等 + 数据库 MySQL 8.0+ 关系型数据库,支持事务、窗口函数等 + 缓存 / 会话存储 Redis 6.0+ 用于 Sa-Token 分布式会话、接口防刷、热点数据缓存 + API 文档 Knife4j / Swagger 4.x 在线接口调试与文档生成 + 工具库 Hutool 5.8.x 常用工具类集合(日期、加密、Bean 拷贝等) + JSON 处理 Jackson (Spring Boot 内置) 序列化/反序列化 + 日志 SLF4J + Logback (Spring Boot 内置) 日志门面 + 实现 + 连接池 HikariCP (Spring Boot 内置) 高性能数据库连接池 + 构建工具 Maven 3.6+ 项目构建与依赖管理 +3. 系统模块划分(Maven 多模块) + 项目采用 Maven 多模块结构,便于后续拆分微服务或模块独立部署。 + +text +metalloop-backend/ +├── pom.xml # 父 POM,统一版本管理 +├── metalloop-common/ # 公共模块(无业务依赖) +│ ├── src/main/java/ +│ │ └── com.metalloop.common/ +│ │ ├── annotation/ # 自定义注解 +│ │ ├── constant/ # 常量、枚举类 +│ │ ├── exception/ # 自定义异常 +│ │ ├── model/ # 统一返回模型(Result、PageResult) +│ │ └── utils/ # 工具类(MD5、JWT、DateUtil 等) +│ └── pom.xml +│ +├── metalloop-framework/ # 框架配置模块 +│ ├── src/main/java/ +│ │ └── com.metalloop.framework/ +│ │ ├── config/ # 通用配置(Jackson、线程池、CORS) +│ │ ├── satoken/ # Sa-Token 配置、权限拦截器 +│ │ ├── mybatis/ # MyBatis-Plus 配置(分页、填充、逻辑删除) +│ │ └── swagger/ # Knife4j 配置 +│ └── pom.xml +│ +├── metalloop-dao/ # 数据访问层 +│ ├── src/main/java/ +│ │ └── com.metalloop.dao/ +│ │ ├── entity/ # 数据库实体类(对应每张表) +│ │ ├── mapper/ # MyBatis-Plus Mapper 接口 +│ │ ├── dto/ # 数据传输对象(业务层入参/出参) +│ │ └── vo/ # 视图对象(Controller 返回专用) +│ └── pom.xml +│ +├── metalloop-service/ # 业务逻辑层 +│ ├── src/main/java/ +│ │ └── com.metalloop.service/ +│ │ ├── auth/ # 认证服务 +│ │ ├── user/ # 用户服务 +│ │ ├── enterprise/ # 企业服务(含认证审核) +│ │ ├── product/ # 产品、品种、材质服务 +│ │ ├── trade/ # 供应/求购信息服务 +│ │ ├── permission/ # 权限与角色服务 +│ │ ├── im/ # OpenIM 集成服务 +│ │ └── impl/ # 各服务实现类(按模块分包) +│ └── pom.xml +│ +├── metalloop-api/ # API 接口定义(可选,用于 Feign 或微服务) +│ ├── src/main/java/ +│ │ └── com.metalloop.api/ # 对外暴露的 API 接口 +│ └── pom.xml +│ +└── metalloop-web/ # Web 启动模块 +├── src/main/java/ +│ └── com.metalloop.web/ +│ ├── controller/ # REST Controller(按模块分包) +│ ├── interceptor/ # 全局拦截器 +│ ├── filter/ # 过滤器 +│ └── advice/ # 全局异常处理器 +├── src/main/resources/ +│ ├── application.yml # 主配置文件 +│ ├── application-dev.yml # 开发环境配置 +│ ├── application-prod.yml # 生产环境配置 +│ ├── logback-spring.xml # 日志配置 +│ └── mapper/ # MyBatis XML 映射文件(可选) +└── pom.xml + +4. 包结构设计(单模块方案) + 若采用单模块结构,推荐按业务模块分包,清晰隔离各领域: + +text +com.metalloop +│ +├── common # 公共组件(可独立为 common 模块) +│ ├── annotation # 自定义注解 +│ │ ├── @RequirePermission # 权限校验注解(可选,Sa-Token 自带 @SaCheckPermission) +│ │ └── @LogOperation # 操作日志注解 +│ ├── constant # 常量与枚举 +│ │ ├── ApiCode.java # API 响应码枚举 +│ │ ├── AuditStatusEnum.java # 审核状态枚举 +│ │ └── UserStatusEnum.java # 用户状态枚举 +│ ├── exception # 异常处理 +│ │ ├── BusinessException.java # 业务异常 +│ │ └── GlobalExceptionHandler.java # 全局异常拦截 +│ ├── model # 统一响应模型 +│ │ ├── Result.java # 统一返回结构 +│ │ └── PageResult.java # 分页返回结构 +│ └── utils # 工具类 +│ ├── RedisUtil.java # Redis 工具封装 +│ ├── SecurityUtil.java # 加密工具(BCrypt、MD5) +│ └── BeanCopyUtil.java # 对象拷贝工具 +│ +├── framework # 框架集成(可独立为 framework 模块) +│ ├── satoken +│ │ ├── SaTokenConfig.java # Sa-Token 配置类 +│ │ ├── StpInterfaceImpl.java # 权限/角色数据源实现 +│ │ └── SaTokenInterceptor.java # 全局鉴权拦截器(可选) +│ ├── mybatis +│ │ ├── MybatisPlusConfig.java # 分页、乐观锁配置 +│ │ ├── MetaObjectHandler.java # 自动填充(createTime、updateTime) +│ │ └── LogicDeleteConfig.java # 逻辑删除配置(若使用) +│ ├── redis +│ │ └── RedisConfig.java # Redis 序列化配置(Jackson2Json) +│ └── swagger +│ └── Knife4jConfig.java # API 文档配置 +│ +├── modules # 业务模块 +│ │ +│ ├── auth # 认证模块 +│ │ ├── controller +│ │ │ └── AuthController.java # 登录、登出、刷新 Token +│ │ ├── service +│ │ │ ├── AuthService.java +│ │ │ └── impl +│ │ │ └── AuthServiceImpl.java +│ │ ├── model +│ │ │ ├── LoginDTO.java # 登录请求参数 +│ │ │ └── LoginVO.java # 登录响应(含 Token) +│ │ └── mapper # (复用 dao 层 Mapper) +│ │ +│ ├── user # 用户管理模块 +│ │ ├── controller +│ │ │ └── UserController.java # 用户 CRUD、禁用/启用 +│ │ ├── service +│ │ └── model +│ │ +│ ├── enterprise # 企业管理模块 +│ │ ├── controller +│ │ │ └── EnterpriseController.java # 企业认证、审核、查询 +│ │ ├── service +│ │ ├── model +│ │ │ ├── EnterpriseSubmitDTO.java # 提交认证资料 +│ │ │ └── EnterpriseAuditDTO.java # 审核操作 +│ │ └── mapper +│ │ +│ ├── product # 产品目录模块 +│ │ ├── controller +│ │ │ ├── ProductController.java +│ │ │ ├── VarietyController.java +│ │ │ └── MaterialController.java +│ │ ├── service +│ │ └── model +│ │ +│ ├── trade # 交易信息模块 +│ │ ├── controller +│ │ │ ├── SupplyController.java # 供应信息 +│ │ │ └── PurchaseController.java # 求购信息 +│ │ ├── service +│ │ └── model +│ │ +│ ├── permission # 权限管理模块(后台) +│ │ ├── controller +│ │ │ ├── RoleController.java # 角色 CRUD +│ │ │ └── PermissionController.java # 权限/菜单管理 +│ │ ├── service +│ │ └── model +│ │ +│ └── im # 即时聊天模块(OpenIM 集成) +│ ├── controller +│ │ └── IMController.java # 获取 IM Token、Webhook 接收 +│ ├── service +│ │ ├── IMService.java # OpenIM API 调用封装 +│ │ └── WebhookService.java # 处理 OpenIM 回调事件 +│ └── model +│ +└── web # Web 层公共配置 +├── config +│ └── WebMvcConfig.java # 跨域、静态资源、拦截器注册 +├── filter +│ └── RequestLogFilter.java # 请求日志过滤器 +└── MainApplication.java # Spring Boot 启动类 +5. 数据库表清单 + 5.1 系统权限模块(sys_*) + 表名 说明 关键字段 + sys_user 用户表 id, username, password, phone, enterprise_id, auth_status, user_status + sys_role 角色表 id, role_name, status, is_system, sort + sys_permission 权限表(菜单 + 按钮) id, name, code, type, parent_id, api_path, route_path + sys_user_role 用户-角色关联表 user_id, role_id + sys_role_permission 角色-权限关联表 role_id, permission_id + 5.2 企业模块(sys_enterprise 系列) + 注:根据现有数据库,企业表实际前缀为 sys_,与系统模块共用,逻辑上可按业务域区分。 + +表名 说明 关键字段 +sys_enterprise 企业信息主表 id, enterprise_name, legal_person, unified_social_credit_code, audit_status, credit_limit +sys_enterprise_image 企业图片附件表 id, enterprise_id, image_type, image_url +5.3 业务交易模块(biz_*) +表名 说明 关键字段 +biz_product 产品基础表 id, product_name, product_code, unit, status +biz_variety 品种表(支持层级) id, variety_name, parent_id, variety_grade +biz_material 材质基础表 id, material_name +biz_enterprise_product 企业经营产品表 id, enterprise_id, variety_id, material_id, unit_price, weight +biz_purchase_request 求购信息表 id, create_user_id, title, quantity, unit_price, audit_status, expire_time +biz_supply_info 发布信息表(供应) id, create_user_id, title, quantity, unit_price, audit_status, expire_time +biz_product_element_detail 产品材质详情表 id, product_id, element_name, element_content \ No newline at end of file