若依(微服务版)导入导出关联动态字典值

这篇具有很好参考价值的文章主要介绍了若依(微服务版)导入导出关联动态字典值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

需求背景:
     业务系统需要做EXCEL的导入和导出功能,某些字段是系统字典值,改造之前只能应用@Excel注解的combo属性来做下拉限制,用readConverterExp属性来做表达式实际值和显示值的转换。

每当运维人员在系统增加一个字典值的时候,都要来修改代码,太麻烦了。

期望效果:

能够根据系统字典值,动态限制下拉框内容,动态进行实际值和显示值的转换,无需每次都修改代码。同时保留readConverterExp和combo属性的效果

单体版若依

单体版若依网上有很多,这里不在赘述,上连接

  • 文章1:

https://blog.csdn.net/wangmj518/article/details/128438841?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-128438841-blog-126104814.235%5Ev38%5Epc_relevant_sort_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-128438841-blog-126104814.235%5Ev38%5Epc_relevant_sort_base3&utm_relevant_index=2

  • 文章2:

https://blog.csdn.net/wcnmbbbb/article/details/117952232

两个文章内容基本一样,下边的微服务版,也是这种思路,不过需要做一点特殊处理

微服务版若依

在网上找了很多都是单体版的解决方式,微服务版目前,官方目前还没有给出解决思路,这里就套用一下单体版的修改做一点修改

整体思路

  1. 修改或者新建一个新的@Excel进行修改

  2. 转移或者新建ExcelUtil.java,并进行修改

  3. 新建DictUtils.java

  4. 想办法让ExcelUtil.java中可以调用DictUtils.java(坑点)

  5. 修改RedisService.java,添加方法(坑点)

    若依(微服务版)导入导出关联动态字典值

    若依(微服务版)导入导出关联动态字典值

    若依(微服务版)导入导出关联动态字典值

套用单体版修改会有两大坑:

坑一

这里主要是针对上述中的第4点( 想办法让ExcelUtil.java中可以调用DictUtils.java )

若依(微服务版)把@Excel注解写在了[ruoyi-common-core] 模块,这是一个底层模块,但是我们需要拿缓存,即需要操作redis,

把单体版的操作,转移到[ruoyi-common-redis]模块

所以我们有两种思路解决

  • 思路一: 不如大胆的在别的模块再搞一个@Excel

优点:不影响原来的注解,完全独立,改动小

缺点: 以后使用注解的时候要注意导包不要导错,使用ExcelUtil也要注意要使用自己新创建的

  • 思路二: 转移 [ExcelUtil.java]文件位置到可以操作的转移到[ruoyi-common-redis]模块下

优点:直接在原注解上进行操作,不会出现两个@Excel注解

缺点:需要把我们之前所有引用过ExcelUtil.java的包都改成自己的,改动文件很多

选什么自己决定把,这里就不做推荐了,最后的完整代码是使用的思路一

坑二

这里针对的上述的第5点(修改RedisService.java,添加方法(坑点))

当我们解决完坑一的时候,就遇到了坑二

若依(微服务版)导入导出关联动态字典值

其中DictUtils.java有一个方法

     /**
      * 获取字典缓存
      *
      * @param key 参数键
      * @return dictDatas 字典数据列表
      */
     public static List<SysDictData> getDictCache(String key)
    {
         Object cacheObj = SpringUtils.getBean(RedisService.class).getCacheObject(getCacheKey(key));
         if (StringUtils.isNotNull(cacheObj))
        {
             // 这一步在转类型 会报转换异常 失败原因主要是redis里有一个 @type 会规定必须转换的包一致
             List<SysDictData> dictDatas = StringUtils.cast(cacheObj);
             return dictDatas;
        }
         return null;
    }

知道了原因,就好搞了,具体解决办法网上有很多

https://blog.csdn.net/weixin_42169734/article/details/119609957

 
 // 修改getDictCache
     public static List<SysDictData> getDictCache(String key)
    {
         List<JSONArray> cacheListString = SpringUtils.getBean(RedisService.class).getCacheListString(getCacheKey(key));
 
         if (StringUtils.isNotNull(cacheListString)){
             JSONArray objects = cacheListString.get(0);
             List<SysDictData> sysDictData = JSONArray.parseArray(objects.toJSONString(), SysDictData.class);
             return sysDictData;
        }
         return null;
    }

// 在RedisService类中方法中添加getCacheListString方法

     public  List<JSONArray>   getCacheListString(final String key)
    {
         return  redisTemplate.opsForValue().multiGet(Arrays.asList(key));
    }

完整代码

Excel注解文章来源地址https://www.toymoban.com/news/detail-609040.html

 /**
  * 自定义导出Excel数据注解
  *
  */
 @Retention(RetentionPolicy.RUNTIME)
 @Target(ElementType.FIELD)
 public @interface Excel
 {
     /**
      * 导出时在excel中排序
      */
     public int sort() default Integer.MAX_VALUE;
 
     /**
      * 导出到Excel中的名字.
      */
     public String name() default "";
 
     /**
      * 日期格式, 如: yyyy-MM-dd
      */
     public String dateFormat() default "";
 
     /**
      * 读取内容转表达式 (如: 0=男,1=女,2=未知)
      */
     public String readConverterExp() default "";
     /**
      * 如果是字典类型,请设置字典的type值
      * >>>>>>>特别提醒,如若配置该字段,则“combo”和“readConverterExp”不启用
      */
     public String dictType() default "";
     /**
      * 分隔符,读取字符串组内容
      */
     public String separator() default ",";
 
     /**
      * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化)
      */
     public int scale() default -1;
 
     /**
      * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN
      */
     public int roundingMode() default BigDecimal.ROUND_HALF_EVEN;
 
     /**
      * 导出类型(0数字 1字符串)
      */
     public ColumnType cellType() default ColumnType.STRING;
 
     /**
      * 导出时在excel中每个列的高度 单位为字符
      */
     public double height() default 14;
 
     /**
      * 导出时在excel中每个列的宽 单位为字符
      */
     public double width() default 16;
 
     /**
      * 文字后缀,如% 90 变成90%
      */
     public String suffix() default "";
 
     /**
      * 当值为空时,字段的默认值
      */
     public String defaultValue() default "";
 
     /**
      * 提示信息
      */
     public String prompt() default "";
 
     /**
      * 设置只能选择不能输入的列内容.
      */
     public String[] combo() default {};
 
     /**
      * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
      */
     public boolean isExport() default true;
 

到了这里,关于若依(微服务版)导入导出关联动态字典值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Go】excelize库实现excel导入导出封装(一),自定义导出样式、隔行背景色、自适应行高、动态导出指定列、动态更改表头

    最近在学go操作excel,毕竟在web开发里,操作excel是非常非常常见的。这里我选择用 excelize 库来实现操作excel。 为了方便和通用,我们需要把导入导出进行封装,这样以后就可以很方便的拿来用,或者进行扩展。 我参考的是这篇文章:【GO】excelize导入导出封装 这个导入导出封

    2024年02月04日
    浏览(49)
  • avue-crud 组件,form中实现树形下拉框联动输入框数据,省市区字典联动

    使用的是avue-crud组件 参数配置: 官网示例: https://avuejs.com/crud/crud-dic/#%E5%AD%97%E5%85%B8%E8%81%94%E5%8A%A8 注意点:2.9.0+ 用cascader,以下用cascaderItem 联动只支持dicUrl远程字典

    2024年02月15日
    浏览(50)
  • 若依字典使用

    此文章使用的若依是 大于3.7.0 版本的 main.js中引入全局变量和方法 DictData.js配置 可以从DictData.js中看出在install方法中调用了字典查询接口,在install方法中可以做以下操作: (1)修改字典接口为你的字典接口,或者去api/dict/data.js中修改getDicts方法 (2)配置label和value对应的后

    2024年02月16日
    浏览(31)
  • 若依vue框架+element ui 组件路由跳转与菜单联动

    在后台管理系统中当点击某一按钮时,页面发生跳转(路由发生跳转,跳转到与按钮对应的页面),在跳转的同时在侧边栏中打开与之对应模块的菜单项 1.点击按钮跳转到/pay/PayIndex页面 2.在后台管理系统中侧边栏使用的是element ui 中的NavMenu导航菜单组件,在后台管理系统 src/l

    2024年02月14日
    浏览(53)
  • 若依(ruoyi)字典管理插件实现思路探究

     一个UI表单的构成,避免不了下拉框,多选框等标签,在开发这些标签时,通常会请求后台接口获取字典值进行动态渲染。定制化开发虽然实现简单,但会产生大量重复工作,解决这类问题的思路有哪些?文章对若依字典管理插件实现思路进行了探究,以此来开阔思路。 探

    2024年01月18日
    浏览(41)
  • 【Java】若依的使用代码生成及字典的使用

            若依管理系统是一款基于 Java 语言开发的 开源管理系统 。它采用了 Spring Boot 框架,使得开发更加 快速和高效 。同时,它还集成了 MyBatis Plus ,进一步简化了数据库操作。若依管理系统的界面简洁美观,且支持多语言,可以满足不同用户的需求。此外,它还提供

    2024年02月05日
    浏览(31)
  • 若依在表格中如何将字典的键值转为中文

    一、需求: 后端有时候返回的是字典的键值,在前端展示时需要转成中文值 后端返回的是dictValue,现在要转换成这个dictLabel 对应的字典: 返回的是键值,我们需要转换为键值对应的中文 最终效果 : 在表格中展示需要转换为中文 二、问题解决 使用element ui表格中自带的fo

    2024年01月21日
    浏览(44)
  • 若依框架ruoyi-vue(前后端版)字典的使用

    显示效果:  状态实际 值为 1,讲师审核中为我们在字典管理中定义的。 步骤:先在ruoyi的字典管理中定义字典 字典管理中  然后根据字典设置自己需要的值 设置完值后,然后是前端表格的数据回显 这里先打开我们的前端vue工程,我们需要回显页面对应的vue文件中 在expor

    2024年02月11日
    浏览(49)
  • 若依框架的startPage( )函数怎么自动关联查询SQL语句?

    使用JAVA语言的若依框架的时候,发现只要使用了startPage()函数, 并不需要前端传递分页的数据,也不需要注解,就能完成分页功能。预判他应该是使用类似拦截器的机制,但还是感觉很神奇,感觉知道个大概不过瘾,还是要更细致的了解才能满足,就想研究一下并记录下来。

    2024年02月08日
    浏览(39)
  • 【前端版】分布式医疗云平台【解决面包屑的问题、定义路由、服务端接口、动态渲染菜单、登陆测试、字典类型管理 】(二十)

    目录 2.3.解决其它问题 2.3.1.面包屑的问题及控制台报错 3.登陆和加载菜单和后台关联问题 

    2024年02月12日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包