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

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

需求:

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

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

1.后端修改

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

在controller.java.vm中添加:

java 复制代码
  /**
     * 导入${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中添加:

java 复制代码
/**
     * 导入${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中添加:

在顶部添加

java 复制代码
@Autowired
    protected Validator validator;
java 复制代码
 /**
     * 导入${functionName}数据
     *
     * @param ${className}List ${functionName}数据列表
     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
     * @param operName 操作用户
     * @return 结果
     */
    @Override
    public 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.总结

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

相关推荐
Sweet锦5 分钟前
SpringBoot 3.5 集成 InfluxDB 1.8
spring boot·时序数据库
我是大猴子14 分钟前
事务失效的几种情况以及是为什么(详解)
java·开发语言
wertyuytrewm1 小时前
Java面试——Java基础
java·jvm·面试
Java水解1 小时前
Spring Boot 消息队列与异步处理
spring boot·后端
czlczl200209251 小时前
RAG实现思路流程
java·jvm
带娃的IT创业者1 小时前
WeClaw_40_系统监控与日志体系:多层次日志架构与Trace追踪
java·开发语言·python·架构·系统监控·日志系统·链路追踪
Y001112361 小时前
JDBC原理
java·开发语言·数据库·jdbc
程序员侠客行1 小时前
Tomcat 从陌生到熟悉
java·tomcat·web
wertyuytrewm1 小时前
Java 异常|Java Exceptions
java·开发语言
ProgramHelpOa2 小时前
Amazon SDE Intern OA 2026 最新复盘|70分钟两题 Medium-Hard
java·前端·javascript