ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

曾经写过一个感觉比较复杂的业务,大家看看是否能直接SQL解决呢?

2022-05-28 19:02:22  阅读:139  来源: 互联网

标签:getDeclaredField return setAccessible 写过 借据 比较复杂 SQL catch getClass


public static  List excelSortLoanNo(List list) {
        Predicate<list> singleOrNot = equalsList -> equalsList.size() > 1;
        //可针对三种情况导出列表,对导出的借据号重复的放在一起(并提示与哪一行重复),为null的排除
        List listVisiable = list.stream()
                .filter(exl -> {
                    try {
                        Field field = exl.getClass().getDeclaredField(LOAN_NUMBER);
                        field.setAccessible(true);
                        return field.get(exl) != null;
                    } catch (NoSuchFieldException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    return false;
                })
                .sorted((in1, in2) -> {
                    Field field1 = null;
                    Field field2 = null;
                    try {
                        field1 = in1.getClass().getDeclaredField(LOAN_NUMBER);
                        field2 = in2.getClass().getDeclaredField(LOAN_NUMBER);
                        field1.setAccessible(true);
                        field2.setAccessible(true);
                    } catch (NoSuchFieldException e) {
                        log.error("excelSortLoanNo字段不存在");
                    }
                    return field1.hashCode() - field2.hashCode();
                })
                .collect(Collectors.groupingBy(exl -> {
                    try {
                        Field declaredField = exl.getClass().getDeclaredField(LOAN_NUMBER);
                        declaredField.setAccessible(true);
                        return declaredField.get(exl);
                    } catch (IllegalAccessException e) {
                        log.error("checkOutListCondition非法访问");
                        throw new RuntimeException("提取数据异常");
                    } catch (NoSuchFieldException e) {
                        log.error("checkOutListCondition字段不存在");
                        throw new RuntimeException("提取数据异常");
                    }
                }))
                .values().stream()
                .filter(loanNoDuplicateList -> singleOrNot.test(loanNoDuplicateList))
                .map(oneGroup -> {
                    List sequenceIds = oneGroup.stream().map(one -> {
                        try {
                            Field declaredField = one.getClass().getDeclaredField(SEQUENCE_NAME);
                            declaredField.setAccessible(true);
                            return declaredField.get(one);
                        } catch (NoSuchFieldException e) {
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            e.printStackTrace();
                        }
                        return null;
                    }).collect(Collectors.toList());
                    return oneGroup.stream()
                            .peek(one -> {
                                try {
                                    Field failedReasons = one.getClass().getDeclaredField(FAILED_REASONS);
                                    failedReasons.setAccessible(true);
                                    Object reasonsOld = failedReasons.get(one);
                                    Field sequenceField = one.getClass().getDeclaredField(SEQUENCE_NAME);
                                    sequenceField.setAccessible(true);
                                    Object thisOneSequenceId = sequenceField.get(one);
                                    List sequenceIdList = sequenceIds.stream()
                                            .filter(se -> !se.equals(thisOneSequenceId)).collect(Collectors.toList());
                                    Object[] sequenceIdArr = sequenceIdList.stream().toArray();
                                    String sequenceIdArrStr = StringUtils.join(sequenceIdArr, ",");
                                    String failedReasonsFresh = reasonsOld.toString()
                                            //按测试需求,这里的字符串被更改处,都是在mapper中设定的failedReasons中的
                                            //com/chinacscs/fgf/gi/mapper/GiExcelImportTempCommonMapper.java:23
                                            .replace("excel内借据号重复", "excel内借据号重复,与序号" + sequenceIdArrStr + "条重复");
                                    failedReasons.set(one, failedReasonsFresh);
                                } catch (NoSuchFieldException e) {
                                    e.printStackTrace();
                                } catch (IllegalAccessException e) {
                                    e.printStackTrace();
                                }
                            })
                            .collect(Collectors.toList());
                })
                .reduce((l1, l2) -> {
                    l1.addAll(l2);
                    return l1;
                })
                .filter(list1 -> !CollectionUtils.isEmpty(list1))
                .orElse(Collections.EMPTY_LIST);
        list.removeAll(listVisiable);
        listVisiable.addAll(list);
        return listVisiable;
    }

当时的注释:

  • excel排序根据LoanNo
  • 先进行整个list列表的序号填充
  • 获取loanNo借据号不为空的进行排序,相同借据号的排序到一起
  • 将相同借据号的数据提示,[与第2,3条借据号重复][与第1,3条借据号重复][与1,2条借据号重复]
  • 可针对三种情况导出列表,对导出的借据号重复的放在一起(并提示与哪一行重复),为null的排除
  • TODO 因为现在导出列表时最后也有写入序号,所以在执行这个方法时只能取消导出时的写入序号操作

标签:getDeclaredField,return,setAccessible,写过,借据,比较复杂,SQL,catch,getClass
来源: https://www.cnblogs.com/ukzq/p/16321603.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有