若依框架修改模板,添加通过excel导入数据功能

article/2025/7/12 23:09:27

版本:我后端使用的是RuoYi-Vue-fast版本,前端是RuoYi-Vue3

需求:

我需要每个侧边栏功能都需要具有导入excel功能,但是若依只有用户才具备,我需要代码生成的每个功能都拥有导入功能。

每次生成一个一个改实在是太麻烦了。索性直接修改生成模板

1.后端修改

首先找到自动生成的内容,目录是src/main/resources/vm/java,我们需要改的是下面框起来的三个类。

在controller.java.vm中添加:

  /*** 导入${functionName}数据*/@PreAuthorize("@ss.hasPermi('${permissionPrefix}:import')")@Log(title = "${functionName}", businessType = BusinessType.IMPORT)@PostMapping("/importData")public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception{ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class);List<${ClassName}> ${className}List = util.importExcel(file.getInputStream());String operName = getUsername();String message = ${className}Service.import${ClassName}(${className}List, updateSupport, operName);return success(message);}/*** 下载${functionName}导入模板*/@PostMapping("/importTemplate")public void importTemplate(HttpServletResponse response){ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class);util.importTemplateExcel(response, "${functionName}");}

在service.java.vm中添加:

/*** 导入${functionName}数据** @param ${className}List ${functionName}数据列表* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据* @param operName 操作用户* @return 结果*/public String import${ClassName}(List<${ClassName}> ${className}List, Boolean isUpdateSupport, String operName);

在serviceImpl.java.vm中添加:

在顶部添加

@Autowiredprotected Validator validator;
 /*** 导入${functionName}数据** @param ${className}List ${functionName}数据列表* @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据* @param operName 操作用户* @return 结果*/@Overridepublic String import${ClassName}(List<${ClassName}> ${className}List, Boolean isUpdateSupport, String operName){if (StringUtils.isNull(${className}List) || ${className}List.size() == 0){throw new ServiceException("导入数据不能为空!");}int successNum = 0;int failureNum = 0;StringBuilder successMsg = new StringBuilder();StringBuilder failureMsg = new StringBuilder();for (${ClassName} ${className} : ${className}List){try{// 验证是否存在这个数据${ClassName} exist${ClassName} = ${className}Mapper.select${ClassName}ById(${className}.get${pkColumn.capJavaField}());if (StringUtils.isNull(exist${ClassName})){BeanValidators.validateWithException(validator, ${className});${className}.setCreateBy(operName);this.insert${ClassName}(${className});successNum++;successMsg.append("<br/>" + successNum + "、数据 " + ${className}.get${pkColumn.capJavaField}() + " 导入成功");}else if (isUpdateSupport){BeanValidators.validateWithException(validator, ${className});${className}.setUpdateBy(operName);this.update${ClassName}(${className});successNum++;successMsg.append("<br/>" + successNum + "、数据 " + ${className}.get${pkColumn.capJavaField}() + " 更新成功");}else{failureNum++;failureMsg.append("<br/>" + failureNum + "、数据 " + ${className}.get${pkColumn.capJavaField}() + " 已存在");}}catch (Exception e){failureNum++;String msg = "<br/>" + failureNum + "、数据 " + ${className}.get${pkColumn.capJavaField}() + " 导入失败:";failureMsg.append(msg + e.getMessage());}}if (failureNum > 0){failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");throw new ServiceException(failureMsg.toString());}else{successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");}return successMsg.toString();}

这样后端的工作就完成了。什么都不用修改

将需要的直接生成,放到自己的项目中,然后来修改生成后的前端内容。

2.前端

前端可以仿照若依自己的来写,因为他的用户添加是写好的,以下我展示的是要修改的地方,如有地方没有指出,还请在评论区补充。

首先是在我们生成的代码里添加导入按钮:

然后是导入信息导入对话框

修改导入参数,一般只要修改成生成的地址就可以,后面的/importData不动

导入按钮操作:

文件上传成功处理

3.总结

修改之后应该就可以了,因为做的时间有点久了,可能有些部分遗漏,还请各位程序猿大佬评论区补充。


http://www.hkcw.cn/article/cPFfKlGNhZ.shtml

相关文章

ECS-7000能耗监测系统能耗数据管理机

一、能耗系统介绍 能耗监测系统通过计算机和通讯网络&#xff0c;配电房的现场设备连接为一个有机的整体&#xff0c;实现电网设备运行的远程监控和集中管理。设计中充分体现系统的可用性、先进性、方便性、安全性、可靠性、可扩展性及系统性价比的合理性。 厂家&#xff1a;…

分层模态内相关学习用于无标签三维语义分割

摘要 Recent methods for label-free 3D semantic segmentation aim to assist 3D model training by leveraging the openworld recognition ability of pre-trained vision language models. However, these methods usually suffer from inconsistent and noisy pseudo-lab…

[C++]vc6.0在win10或者win11上下载安装和简单使用教程

VC6.0&#xff0c;即Microsoft Visual C 6.0&#xff0c;是微软公司于1998年推出的一款经典的集成开发环境&#xff08;IDE&#xff09;&#xff0c;在Windows平台软件开发领域具有重要地位。 它支持C和C语言编程&#xff0c;功能强大且全面。其核心优势在于集成了高效的编译器…

TEC温度控制平台的核心技术解析

TEC-2580-500W-24V TEC温度控制平台是一种基于半导体制冷片&#xff08;TEC&#xff09;的高性能温度控制系统&#xff0c;该平台通常由TEC制冷片、温度传感器、控制器、散热系统等部分组成&#xff0c;具有高精度、快速响应、易于集成等优点。具有高精度、高稳定度、长寿命、体…

Spring MVC 框架

目录 1.MVC的定义 2.SpringMVC的实际应用 &#xff08;1&#xff09;建立连接 1.RequestMapping注解介绍 2.RequestMapping注解的请求方式 GET请求&#xff1a; POST请求&#xff1a; 指定GET/POST方法类型&#xff1a; &#xff08;2&#xff09;请求 传递参数 1.传…

Python+GEE+AI,从基础到实战,全面掌握遥感云大数据分析与可视化!涵盖森林监测、洪涝灾害、干旱评估、植被变化等热点领域的实际应用方案

&#x1f50d; 遥感技术的飞跃与挑战 随着航空、航天以及近地空间遥感平台的持续发展&#xff0c;遥感技术近年来取得了显著进步。遥感数据的空间分辨率、时间分辨率、光谱分辨率以及数据量都大幅提升&#xff0c;呈现出典型的大数据特征。这为相关研究带来了新的机遇&#xff…

迈迪工具集添加标准件

上次介绍了外购件的选型软件&#xff0c;这次来介绍一下标准件选型工具-迈迪工具集。 机械设计插件-CSDN博客 比如我要给这里的法兰添加螺栓和螺母&#xff0c;就可以打开迈迪工具集&#xff0c;它有丰富的标准件库&#xff0c;挑选自己需要的标准件&#xff0c;然后双击图片&…

零硬件成本玩转嵌入式通信!嵌入式仿真实验教学平台解锁STM8S串口黑科技

一、串口通信的核心原理与教学挑战 异步串行通信&#xff08;UART&#xff09;作为嵌入式系统的基础通信协议&#xff0c;其技术内涵远超简单的数据收发。该协议通过精确的时序框架实现设备对话&#xff1a;起始位标志传输开始&#xff0c;8-9位数据位承载信息&#xff0c;停止…

C++ —— B/类与对象(中)

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》|《史上最强C讲解》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 目录 一、类的6个默认成员…

2024 CKA模拟系统制作 | Step-By-Step | 17、题目搭建-排查故障节点

目录 免费获取题库配套 CKA_v1.31_模拟系统 一、题目 二、考点分析 1. Kubernetes 节点状态诊断 2. 节点故障修复技能 3. 持久化修复方案 4. SSH 特权操作 三、考点详细讲解 1. 节点状态机制详解 2. 常见故障原因深度分析 3. 永久修复技术方案 四、实验环境搭建步骤…

Java EE初阶——网络初识

1. 网络初始 网络互联&#xff1a;&#xff1a;将多台计算机连接在⼀起&#xff0c;完成数据共享。 数据共享本质是⽹络数据传输&#xff0c;即计算机之间通过⽹络来传输数据&#xff0c;也称为⽹络通信。 根据⽹络互连的规模不同&#xff0c;可以划分为局域⽹和⼴域⽹。 1. 局…

机试 | STL | string | 统计单词数

题目&#xff1a; P1308 [NOIP 2011 普及组] 统计单词数 - 洛谷 输入 输入格式 共 2 行。 第 1 行为一个字符串&#xff0c;其中只含字母&#xff0c;表示给定单词&#xff1b; 第 2 行为一个字符串&#xff0c;其中只可能包含字母和空格&#xff0c;表示给定的文章。 第二行的…

nginx源码下载和测试

官网&#xff1a;nginx 源码包&#xff1a; nginx-1.19.3.tar.gz 源码包下载&#xff1a; wget http://nginx.org/download/nginx-1.19.3.tar.gz -P /usr/src 进入官网 以1.27.5为例 第一步&#xff0c;创建nginx的文件夹 mkdir /usr/local/nginxcd ~ 第二步创立文件后拖入…

2025南师附中特长生考试 人工智能加试T1

题目描述 在 x □ 1 □ 2 □ 3 □ 4 □ 5 □ 6 □ 7 □ 8 □ 9 x\square1\square2\square3\square4\square5\square6\square7\square8\square9 x□1□2□3□4□5□6□7□8□9 的 □ \square □ 内填入 或 − - −. (1) 求证&#xff1a; 27 27 27 可以被这样表示&…

老旧设备数据采集破局 AI图像解析如何让质检LIMS系统焕发新生

在实验室数字化进程中&#xff0c;大量服役超过 10 年的老旧设备成为数据采集的 “拦路虎”&#xff1a;指针式仪表盘需人工读取、纸质原始记录靠手工录入、非标准接口设备数据无法自动获取…… 某化工实验室因 15 台老旧设备数据采集耗时占比达 40%&#xff0c;检测效率长期滞…

PyQt6基础_QCharts绘制饼状图

前置&#xff1a; PyQt6中没有QtCharts包&#xff0c;需要安装 pip install PyQt6-Charts 结果&#xff1a; 1 高亮内容固定突出&#xff0c;并显示文本 2 鼠标悬浮在其他扇区&#xff0c;临时突出显示并显示文本 代码&#xff1a; import sys from PyQt6.QtCore import Q…

Cache数据库的高可用架构设计与选择

一、Cache数据库的高可用架构 对于Cache数据库的高可用性最佳实践&#xff0c;官方提供了以下几种策略&#xff1a; 集成基于操作系统级HA软件以及搭配共享存储的故障转移集群 基于操作系统的HA软件&#xff0c;搭配共享存储的方案&#xff0c;Cache实例安装在共享存储中&#…

开源协议:构建全球技术协作的基石

文章目录 一、开源协议的本质与存在价值&#xff08;一&#xff09;开源协议的定义与法律属性&#xff08;二&#xff09;开源协议的历史演进&#xff08;三&#xff09;开源协议的核心价值 二、主流开源协议分类与核心特性&#xff08;一&#xff09;宽松协议&#xff08;Perm…

MySQL事务及其原理

事务是一组操作的集合&#xff0c;这组集合要么同时成功&#xff0c;要么同时失败 MySQL事务默认是自动提交的&#xff0c;也就是说每一条sql语句就是一条事务 查看/设置事务提交方式 关闭自动提交只有在其所在的查询窗口有效 select autocommit; --查看提交方式 SET autoc…

Spring生命周期中织入代理逻辑

在Spring生命周期中织入代理逻辑 一&#xff0c;AOP 自动代理的实现机制如何判断某个 Bean 是否需要被代理&#xff1f;代理对象在哪个生命周期节点创建&#xff1f; 二&#xff0c;底层实现逻辑1&#xff0c;自动代理的实现实例化AwareBeanPostProcessorSmartInstantiationAwa…