若依框架修改模板,添加通过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.总结

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

相关推荐
零千叶14 分钟前
【面试】Java JVM 调优面试手册
java·开发语言·jvm
代码充电宝23 分钟前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
li37149089027 分钟前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
摇滚侠31 分钟前
Spring Boot 项目, idea 控制台日志设置彩色
java·spring boot·intellij-idea
Aevget1 小时前
「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)
java·ide·java-ee·eclipse·myeclipse
黄昏晓x1 小时前
C++----多态
java·jvm·c++
Brookty1 小时前
【算法】前缀和
java·学习·算法·前缀和·动态规划
少许极端2 小时前
算法奇妙屋(七)-字符串操作
java·开发语言·数据结构·算法·字符串操作
懒羊羊不懒@2 小时前
Java基础语法—字面量、变量详解、存储数据原理
java·开发语言
望获linux2 小时前
【实时Linux实战系列】实时 Linux 的自动化基准测试框架
java·大数据·linux·运维·网络·elasticsearch·搜索引擎