复盘1015基于ruoyi项目开发使用小白技术点回顾

背景

基于ruoyi前后端不分离项目进行二开的所使用到的小白知识点回顾

内容

js基于后台内容动态生成复选框

				for (let index in v_tmp) {
                    if (v_tmp[index] != "")
                        v_html += '<input type="checkbox" name="area" value="' + v_tmp[index] + '" required="">' + v_tmp[index];
                }
                $("#all-area ").html(v_html)

java List转为Map

map 为k-v 结构。这里的问题主要看,v是list中的整个Object VS Object中的一个属性。

  • 整个Object

rsp.stream().collect(Collectors.groupingBy(DecryptInfosItem::getAuthId));

  • Object中的一个属性
sysDictData.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));

java 流求和


BigDecimal:
BigDecimal bb =list.stream().map(Plan::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
 

intdoublelong:

double max = list.stream().mapToDouble(User::getHeight).sum();


js数组相关操作

  • 是否存在 indexOf() 、find、 some 、 includes
      // js检查数组中是否包含某个元素
      // 法一 indexOf
      var arr = [100,20,50,58,6,69,36,45,78,66,45]
      if(arr.indexOf(66)==-1){
            console.log("不存在")
      }else{
            console.log("存在,索引是:",arr.indexOf(66))
      }

参看 https://blog.csdn.net/qq_41579104/article/details/120972171

  • 分割字符串为数组
    str.split()

Thymeleaf中通过strings字符串拆分的灵性操作,正确使用自带功能函数

在使用thymeleaf模板时, 需要在html中操作字符串或是数组时,需要使用thymeleaf中的函数 。
如下面字符串按’,'拆分字符串后对数组进行存在操作

<div class="col-sm-8" th:with="type=${@dict.getType('sys_product_code')}">
                <input name="supportProduct" type="checkbox" th:each="dict : ${type}" th:value="${dict.dictLabel}"
                       th:text="${dict.dictLabel}"
                       th:checked="${ #arrays.contains(#strings.arraySplit(tblOperateSupplier.supportProduct,','),dict.dictLabel) }" required>
<!--                       th:checked="${ tblOperateSupplier.supportProduct.contains(dict.dictLabel)}" required>-->
</div>


//用于检测字符串是否以指定的前缀开始。返回布尔类型
${#strings.startsWith(name,'o')}
//用于测试字符串是否以指定的后缀结束。
${#strings.endsWith(name, 'o')}
${#strings.indexOf(name,frag)}// 下标
${#strings.substring(name,3,5)}// 截取
${#strings.substringAfter(name,prefix)}// 从 prefix之后的一位开始截取到最后,比如 (ywj,y) = wj, 如果是(abccdefg,c) = cdefg//里面有2个c,取的是第一个c
${#strings.substringBefore(name,suffix)}// 同上,不过是往前截取
${#strings.replace(name,'las','ler')}// 替换
${#strings.prepend(str,prefix)}// 拼字字符串在str前面
${#strings.append(str,suffix)}// 和上面相反,接在后面
${#strings.toUpperCase(name)} //将所有字符转换成大写
${#strings.toLowerCase(name)} //将所有字符转换成小写
${#strings.trim(str)} //去掉前后空格
${#strings.length(str)} //返回字符长度
${#strings.abbreviate(str,10)}// 我的理解是 str截取0-10位,后面的全部用…这个点代替,注意,最小是3位

参看 :
https://blog.csdn.net/weixin_49610478/article/details/108980765
https://blog.csdn.net/Burnup_110/article/details/105899636
https://blog.csdn.net/feyehong/article/details/128809420

ruoyi导出子对象,当第一条数中的子对象为null时会出现数据bug

官方文档http://doc.ruoyi.vip/ruoyi/document/htsc.html#%E5%AF%BC%E5%87%BA%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%AD%90%E5%88%97%E8%A1%A8

此时需要针对子对象为null 情况的写一个空对象进去


   		// 切换需要导出数据
        final List<StatFinanceDayExpExcelDto> collect = list.stream().map(e -> {
            final StatFinanceDayExpExcelDto dto = BeanUtil.copyProperties(e, StatFinanceDayExpExcelDto.class);
            final List<TblStatFinanceDayDetail> detail = tblStatFinanceDayDetailService.list(
      Wrappers.lambdaQuery(TblStatFinanceDayDetail.class).eq(TblStatFinanceDayDetail::getFinanceDayId, e.getId()));
            if (detail.isEmpty()) {
                // 针对 没有 明细时,导出数据格式出错问题,没有明细时,自定义一个初始化数据
                StatFinanceDayDetailExpExcelDto aaaa = new StatFinanceDayDetailExpExcelDto();
                List<StatFinanceDayDetailExpExcelDto> ddddd = new LinkedList<>();
                ddddd.add(aaaa);
                dto.setDetailList(ddddd);
                return dto;
            }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值