# RuoYi-Vue **Repository Path**: zwwcy/RuoYi-Vue ## Basic Information - **Project Name**: RuoYi-Vue - **Description**: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: http://ruoyi.vip - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 32390 - **Created**: 2025-08-15 - **Last Updated**: 2025-11-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

logo

RuoYi v3.9.0

基于SpringBoot+Vue前后端分离的Java快速开发框架

## 平台简介 若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。 * 前端采用Vue、Element UI。 * 后端采用Spring Boot、Spring Security、Redis & Jwt。 * 权限认证使用Jwt,支持多终端认证系统。 * 支持加载动态权限菜单,多方式轻松权限控制。 * 高效率开发,使用代码生成器可以一键生成前后端代码。 * 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://gitcode.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。 * 提供了单应用版本[RuoYi-Vue-fast](https://gitcode.com/yangzongzhuan/RuoYi-Vue-fast),Oracle版本[RuoYi-Vue-Oracle](https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。 * 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud) * 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)   ## 内置功能 1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 3. 岗位管理:配置系统用户所属担任职务。 4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 7. 参数管理:对系统动态配置常用参数。 8. 通知公告:系统通知公告信息发布维护。 9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 10. 登录日志:系统登录日志记录查询包含登录异常。 11. 在线用户:当前系统中活跃用户状态监控。 12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14. 系统接口:根据业务代码自动生成相关的api接口文档。 15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 16. 缓存监控:对系统的缓存信息查询,命令统计等。 17. 在线构建器:拖动表单元素生成相应的HTML代码。 18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 ## 在线体验 - admin/admin123 - 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 演示地址:http://vue.ruoyi.vip 文档地址:http://doc.ruoyi.vip ## 演示图
## 若依前后端分离交流群 QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/已满-101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [![加入QQ群](https://img.shields.io/badge/已满-264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [![加入QQ群](https://img.shields.io/badge/已满-167385320-blue.svg)](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [![加入QQ群](https://img.shields.io/badge/已满-104748341-blue.svg)](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [![加入QQ群](https://img.shields.io/badge/已满-160110482-blue.svg)](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [![加入QQ群](https://img.shields.io/badge/已满-170801498-blue.svg)](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [![加入QQ群](https://img.shields.io/badge/已满-108482800-blue.svg)](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [![加入QQ群](https://img.shields.io/badge/已满-101046199-blue.svg)](https://jq.qq.com/?_wv=1027&k=SpyH2875) [![加入QQ群](https://img.shields.io/badge/已满-136919097-blue.svg)](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [![加入QQ群](https://img.shields.io/badge/已满-143961921-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [![加入QQ群](https://img.shields.io/badge/已满-174951577-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [![加入QQ群](https://img.shields.io/badge/已满-161281055-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [![加入QQ群](https://img.shields.io/badge/已满-138988063-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [![加入QQ群](https://img.shields.io/badge/已满-151450850-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) [![加入QQ群](https://img.shields.io/badge/已满-224622315-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=F58bgRa-Dp-rsQJThiJqIYv8t4-lWfXh&authKey=UmUs4CVG5OPA1whvsa4uSespOvyd8%2FAr9olEGaWAfdLmfKQk%2FVBp2YU3u2xXXt76&noverify=0&group_code=224622315) [![加入QQ群](https://img.shields.io/badge/已满-287842588-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Nxb2EQ5qozWa218Wbs7zgBnjLSNk_tVT&authKey=obBKXj6SBKgrFTJZx0AqQnIYbNOvBB2kmgwWvGhzxR67RoRr84%2Bus5OadzMcdJl5&noverify=0&group_code=287842588) [![加入QQ群](https://img.shields.io/badge/已满-187944233-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=numtK1M_I4eVd2Gvg8qtbuL8JgX42qNh&authKey=giV9XWMaFZTY%2FqPlmWbkB9g3fi0Ev5CwEtT9Tgei0oUlFFCQLDp4ozWRiVIzubIm&noverify=0&group_code=187944233) [![加入QQ群](https://img.shields.io/badge/已满-228578329-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=G6r5KGCaa3pqdbUSXNIgYloyb8e0_L0D&authKey=4w8tF1eGW7%2FedWn%2FHAypQksdrML%2BDHolQSx7094Agm7Luakj9EbfPnSTxSi2T1LQ&noverify=0&group_code=228578329) [![加入QQ群](https://img.shields.io/badge/191164766-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=GsOo-OLz53J8y_9TPoO6XXSGNRTgbFxA&authKey=R7Uy%2Feq%2BZsoKNqHvRKhiXpypW7DAogoWapOawUGHokJSBIBIre2%2FoiAZeZBSLuBc&noverify=0&group_code=191164766) 点击按钮入群。 # 若依管理系统 (RuoYi-Vue) ## 项目简介 若依管理系统是一个基于SpringBoot + Vue.js的前后端分离管理系统,提供完整的权限管理、用户管理、角色管理等功能。 ## 技术架构 - **后端**: Spring Boot 2.5.15 + MyBatis + Spring Security - **前端**: Vue.js + Element UI - **数据库**: MySQL - **缓存**: Redis - **权限**: Spring Security + JWT ## 模块结构 ``` ruoyi/ ├── ruoyi-admin # 后台服务入口 ├── ruoyi-common # 通用工具模块 ├── ruoyi-framework # 核心框架模块 ├── ruoyi-system # 系统管理模块 ├── ruoyi-quartz # 定时任务模块 ├── ruoyi-generator # 代码生成模块 └── ruoyi-wms # WMS仓储管理模块 (已升级为MyBatis-Plus) ├── 故障抢修管理 # 故障抢修工单管理 ├── 账号变更申请 # 账号变更申请管理 └── 商品类别管理 # 商品类别设置 ``` ## MyBatis-Plus 升级说明 ### 升级背景 为了提升开发效率和代码质量,我们将WMS模块从传统的MyBatis升级为MyBatis-Plus。 ### 升级内容 #### 1. 依赖配置 - 在父pom.xml中添加了MyBatis-Plus依赖管理 - 在ruoyi-wms模块中添加了MyBatis-Plus启动器依赖 #### 2. 实体类改造 (WmsCategory.java) ```java @Data // Lombok注解,自动生成getter/setter/toString等方法 @EqualsAndHashCode(callSuper = true) // Lombok注解,生成equals和hashCode方法 @TableName("wms_category") // 指定表名 public class WmsCategory extends BaseEntity { @TableId(value = "category_id", type = IdType.AUTO) // 主键配置 private Long categoryId; // 以下字段无需@TableField注解,MyBatis-Plus自动进行驼峰命名转换 // categoryName -> category_name, parentId -> parent_id 等 private Long parentId; private String categoryName; private String categoryCode; private Integer orderNum; private String status; @TableLogic // 逻辑删除 private String delFlag; @Version // 乐观锁版本号 private Long version; } ``` #### 3. Mapper接口改造 (WmsCategoryMapper.java) ```java // 继承BaseMapper,自动获得基础的CRUD方法 public interface WmsCategoryMapper extends BaseMapper { // 无需手动定义基础的增删改查方法 // 如需自定义复杂查询,可在此添加 } ``` #### 4. Service接口改造 (IWmsCategoryService.java) ```java // 继承IService,自动获得基础的业务方法 public interface IWmsCategoryService extends IService { // 无需手动定义基础的业务方法 // 如需自定义业务逻辑,可在此添加 } ``` #### 5. Service实现类改造 (WmsCategoryServiceImpl.java) ```java // 继承ServiceImpl,自动实现基础的业务方法 @Service public class WmsCategoryServiceImpl extends ServiceImpl implements IWmsCategoryService { // 无需手动实现基础的CRUD业务逻辑 // 如需自定义业务逻辑,可在此重写或添加方法 } ``` #### 6. Controller改造 (WmsCategoryController.java) ```java @RestController @RequestMapping("/wms/category") public class WmsCategoryController extends BaseController { @GetMapping("/list") public TableDataInfo list(WmsCategory wmsCategory) { startPage(); // 使用MyBatis-Plus的QueryWrapper构建查询条件 QueryWrapper queryWrapper = new QueryWrapper<>(); if (wmsCategory.getCategoryName() != null) { queryWrapper.like("category_name", wmsCategory.getCategoryName()); } // 使用MyBatis-Plus的list方法查询 List list = wmsCategoryService.list(queryWrapper); return getDataTable(list); } @GetMapping("/{categoryId}") public AjaxResult getInfo(@PathVariable Long categoryId) { // 使用MyBatis-Plus的getById方法 WmsCategory wmsCategory = wmsCategoryService.getById(categoryId); return success(wmsCategory); } @PostMapping public AjaxResult add(@RequestBody WmsCategory wmsCategory) { // 使用MyBatis-Plus的save方法 boolean result = wmsCategoryService.save(wmsCategory); return toAjax(result ? 1 : 0); } @PutMapping public AjaxResult edit(@RequestBody WmsCategory wmsCategory) { // 使用MyBatis-Plus的updateById方法 boolean result = wmsCategoryService.updateById(wmsCategory); return toAjax(result ? 1 : 0); } @DeleteMapping("/{categoryIds}") public AjaxResult remove(@PathVariable Long[] categoryIds) { // 使用MyBatis-Plus的removeByIds方法 boolean result = wmsCategoryService.removeByIds(Arrays.asList(categoryIds)); return toAjax(result ? 1 : 0); } } ``` ### 升级优势 #### 1. 开发效率提升 - **自动CRUD**: 无需编写基础的增删改查SQL - **条件构造器**: 使用QueryWrapper构建复杂查询条件 - **分页插件**: 内置分页功能,无需手动实现 - **Lombok支持**: 自动生成getter/setter/toString等方法,减少样板代码 - **驼峰命名**: 自动进行数据库字段名与Java属性名的驼峰转换 #### 2. 代码质量提升 - **类型安全**: 编译时类型检查,减少运行时错误 - **代码简洁**: 减少重复代码,提高可维护性 - **性能优化**: 内置性能优化,如批量操作 #### 3. 功能增强 - **逻辑删除**: 支持软删除,数据不丢失 - **乐观锁**: 内置版本号控制,防止并发冲突 - **自动填充**: 支持创建时间、更新时间等字段自动填充 ### 使用说明 #### 1. 基础查询 ```java // 根据ID查询 WmsCategory category = wmsCategoryService.getById(1L); // 查询所有 List allCategories = wmsCategoryService.list(); // 条件查询 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("status", "0").like("category_name", "商品"); List categories = wmsCategoryService.list(queryWrapper); ``` #### 2. 分页查询 ```java // 分页查询 Page page = new Page<>(1, 10); Page result = wmsCategoryService.page(page, queryWrapper); ``` #### 3. 批量操作 ```java // 批量插入 List categories = Arrays.asList(category1, category2); wmsCategoryService.saveBatch(categories); // 批量更新 wmsCategoryService.updateBatchById(categories); // 批量删除 wmsCategoryService.removeByIds(Arrays.asList(1L, 2L, 3L)); ``` ### 注意事项 1. **版本兼容性**: 确保MyBatis-Plus版本与Spring Boot版本兼容 2. **数据库字段**: 实体类字段名应与数据库字段名保持一致(支持驼峰自动转换) 3. **事务管理**: 复杂业务逻辑仍需手动管理事务 4. **性能考虑**: 大数据量查询时注意分页和索引优化 5. **Lombok使用**: 确保IDE安装了Lombok插件,否则编译时可能报错 6. **驼峰转换**: 默认启用驼峰命名转换,如categoryName自动映射到category_name ## 故障抢修管理模块 ### 功能概述 故障抢修管理模块是WMS系统的重要组成部分,用于管理电力系统的故障抢修工单。该模块提供了完整的故障抢修流程管理,包括工单创建、任务分配、处理跟踪和记录管理。 ### 数据库设计 #### 1. 故障抢修主表 (wms_fault_repair) 存储故障抢修的基本信息,包括: - **工单编号**: 唯一标识每个故障抢修工单 - **任务名称**: 故障抢修任务的名称 - **时间管理**: 开始时间、结束时间、发起时间 - **风险等级**: 五级、六级、七级风险分类 - **专业信息**: 所属专业(默认主网) - **停电信息**: 是否停电、停电范围 - **位置信息**: 工作地点 - **人员信息**: 故障专责、发起人 - **内容信息**: 抢修内容、附件 - **状态管理**: 工单状态(待处理、处理中、已完成、已取消) #### 2. 故障抢修处理记录表 (wms_fault_repair_record) 记录故障抢修的处理过程,包括: - **关联关系**: 通过外键关联主表 - **处理人员**: 处理人信息 - **处理类型**: 接单、开始处理、处理完成、取消处理 - **处理状态**: 处理中、处理成功、处理失败 - **处理意见**: 处理过程中的意见和说明 - **时间记录**: 处理时间 ### 字典数据 系统自动初始化以下字典数据: - **故障抢修状态**: 工单状态管理 - **风险等级**: 五级、六级、七级风险分类 - **处理类型**: 处理操作类型 - **处理状态**: 处理结果状态 ### 索引优化 - **主键索引**: 自动创建主键索引 - **唯一索引**: 工单编号唯一索引,防止重复 - **外键索引**: 处理记录表的外键索引 - **查询索引**: 处理人、处理时间等常用查询字段索引 ### 数据完整性 - **外键约束**: 处理记录表与主表的级联关系 - **非空约束**: 关键字段的非空验证 - **默认值**: 合理的默认值设置 - **字符集**: UTF8MB4字符集支持 ## 账号变更申请管理模块 ### 功能概述 账号变更申请管理模块是WMS系统的重要组成部分,用于管理企业内部账号的变更申请流程。该模块提供了完整的申请流程管理,包括申请提交、审核审批、处理跟踪和详细的操作记录管理。 ### 数据库设计 #### 1. 账号变更申请抬头表 (wms_account_change_apply) 存储账号变更申请的基本信息,包括: - **申请单编号**: 唯一标识每个申请单 - **申请类型**: 新增、修改、删除、停用、启用等类型 - **申请信息**: 申请标题、申请原因、申请人信息 - **时间管理**: 申请时间、期望完成时间、完成时间 - **优先级**: 高、中、低优先级分类 - **状态管理**: 申请状态(待审核、审核中、已通过、已拒绝、已完成、已取消) - **处理信息**: 当前处理人、处理部门、审批结果 - **统计信息**: 明细记录总数 #### 2. 账号变更申请明细表 (wms_account_change_detail) 存储具体的账号变更明细信息,包括: - **账号信息**: 账号类型、账号名称、账号描述、账号状态 - **账号属性**: 账号所有者、所属部门、账号角色、账号权限 - **时间信息**: 账号过期时间、最后登录时间、最后密码修改时间 - **变更信息**: 变更类型、变更原因、变更详情、变更前后值 - **处理信息**: 处理状态、处理结果、处理时间、处理人 - **行号管理**: 明细行号,支持排序和显示 #### 3. 账号变更申请操作记录表 (wms_account_change_record) 详细记录每一步操作过程,包括: - **操作信息**: 操作类型、操作名称、操作人、操作时间 - **关联关系**: 与申请单和明细记录的关联 - **状态变更**: 操作前后状态、处理人变更 - **数据变更**: 操作前后数据(JSON格式)、变更字段列表 - **操作详情**: 操作意见、操作详情、操作结果 - **附件关联**: 相关附件信息 #### 4. 账号变更申请附件表 (wms_account_change_attachment) 管理申请相关的附件文件,包括: - **文件信息**: 文件名、文件路径、文件大小、文件类型 - **上传信息**: 上传人、上传时间 - **关联关系**: 与申请单、明细记录和操作记录的关联 - **附件类型**: 申请附件、审核附件、处理附件 ### 操作记录详细设计 #### 操作类型覆盖 系统支持以下操作类型的详细记录: 1. **提交申请**: 记录申请提交的详细信息 2. **审核**: 记录审核过程和结果 3. **审批**: 记录审批决策和意见 4. **处理**: 记录具体处理过程 5. **完成**: 记录完成状态和结果 6. **拒绝**: 记录拒绝原因和意见 7. **取消**: 记录取消原因 8. **转派**: 记录转派给其他处理人 9. **退回**: 记录退回原因和要求 #### 数据变更追踪 - **JSON格式存储**: 使用JSON格式存储操作前后的完整数据 - **字段级变更**: 记录具体变更的字段列表 - **状态流转**: 详细记录状态变更过程 - **处理人变更**: 记录处理人的变更历史 ### 主子表设计优势 #### 1. **数据结构清晰** - **抬头表**: 存储申请单的基本信息和流程状态 - **明细表**: 存储具体的账号变更明细,支持多行数据 - **操作记录表**: 记录每个操作的历史轨迹 - **附件表**: 管理相关的附件文件 #### 2. **业务逻辑完整** - **一对多关系**: 一个申请单可以包含多个账号变更明细 - **明细级操作**: 可以对每个明细行进行独立的操作记录 - **状态管理**: 抬头和明细都有独立的状态管理 - **数据完整性**: 通过外键约束保证数据一致性 #### 3. **操作记录详细** - **抬头级操作**: 记录申请单级别的操作(提交、审核、审批等) - **明细级操作**: 记录具体账号变更的操作(处理、完成等) - **数据变更追踪**: 使用JSON格式记录操作前后的完整数据 - **字段级变更**: 记录具体变更的字段列表 ### 字典数据 系统自动初始化以下字典数据: - **申请类型**: 新增、修改、删除、停用、启用 - **申请状态**: 待审核、审核中、已通过、已拒绝、已完成、已取消 - **优先级**: 高、中、低优先级 - **账号类型**: 系统账号、邮箱账号、应用账号、数据库账号 - **账号状态**: 正常、停用、锁定 - **变更类型**: 新增、修改、删除、停用、启用、重置密码 - **处理状态**: 待处理、处理中、已完成、处理失败 - **操作类型**: 各种操作类型的详细分类 - **操作结果**: 成功、失败状态 - **附件类型**: 申请附件、审核附件、处理附件 ### 索引优化 - **主键索引**: 自动创建主键索引 - **唯一索引**: 申请单编号唯一索引,防止重复 - **外键索引**: 明细表、操作记录表和附件表的外键索引 - **查询索引**: 申请类型、状态、时间、处理人等常用查询字段索引 - **明细索引**: 明细行号、账号类型、账号名称、处理状态等索引 - **复合索引**: 支持多条件组合查询的复合索引 ### 数据完整性 - **外键约束**: 明细表、操作记录表和附件表与抬头表的级联关系 - **非空约束**: 关键字段的非空验证 - **默认值**: 合理的默认值设置 - **字符集**: UTF8MB4字符集支持 - **JSON支持**: 支持JSON格式数据存储和查询 - **行号管理**: 明细表支持行号排序和显示 ### 使用示例 #### 主子表关联查询 ```sql -- 查询申请单及其明细 SELECT a.APPLY_NO, a.APPLY_TITLE, a.STATUS, d.DETAIL_NO, d.ACCOUNT_NAME, d.ACCOUNT_TYPE, d.CHANGE_TYPE, d.HANDLE_STATUS FROM wms_account_change_apply a LEFT JOIN wms_account_change_detail d ON a.ID = d.APPLY_ID WHERE a.APPLY_NO = 'APP202401001' ORDER BY d.DETAIL_NO; -- 查询操作记录 SELECT r.OPERATION_NAME, r.OPERATOR, r.OPERATION_TIME, r.OPERATION_OPINION, d.ACCOUNT_NAME, d.CHANGE_TYPE FROM wms_account_change_record r LEFT JOIN wms_account_change_detail d ON r.DETAIL_ID = d.ID WHERE r.APPLY_ID = 1 ORDER BY r.OPERATION_TIME; ``` #### 明细级操作记录 ```sql -- 记录明细处理操作 INSERT INTO wms_account_change_record ( APPLY_ID, DETAIL_ID, OPERATION_TYPE, OPERATION_NAME, OPERATOR, OPERATION_TIME, OPERATION_RESULT, OPERATION_OPINION, BEFORE_STATUS, AFTER_STATUS, BEFORE_DATA, AFTER_DATA ) VALUES ( 1, 1, '4', '处理账号变更', 'admin', NOW(), '1', '账号变更处理完成', '0', '2', '{"handleStatus":"0"}', '{"handleStatus":"2","handleResult":"处理成功"}' ); ``` ## 运行说明 ### 环境要求 - JDK 1.8+ - Maven 3.6+ - MySQL 5.7+ - Redis 3.0+ ### 启动步骤 1. 导入数据库脚本 `sql/ry_20250522.sql` 2. 修改 `ruoyi-admin/src/main/resources/application-druid.yml` 数据库连接配置 3. 修改 `ruoyi-admin/src/main/resources/application.yml` Redis配置 4. 运行 `ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java` ### 前端启动 ```bash cd ruoyi-ui npm install npm run dev ``` ## 许可证 本项目采用MIT许可证,详见 [LICENSE](LICENSE) 文件。 ## 联系方式 - 官方网站: http://www.ruoyi.vip - 技术交流: 欢迎提交Issue和Pull Request