1. 程式人生 > 其它 >使用瀏覽器瀏覽本地資料夾內容

使用瀏覽器瀏覽本地資料夾內容

    /**
     * excel排序根據LoanNo
     * 先進行整個list列表的序號填充
     * 獲取loanNo借據號不為空的進行排序,相同借據號的排序到一起
     * 將相同借據號的資料提示,[與第2,3條借據號重複][與第1,3條借據號重複][與1,2條借據號重複]
     * 可針對三種情況匯出列表,<T>對匯出的借據號重複的放在一起(並提示與哪一行重複),為null的排除
     * TODO 因為現在匯出列表時最後也有寫入序號,所以在執行這個方法時只能取消匯出時的寫入序號操作
     *
     * @param list
     * @param <T>
     */
    public static <T> List<T> excelSortLoanNo(List<T> list) {
//        list = listForIncrementSequence(list,1);
        Predicate<List<T>> singleOrNot = equalsList -> equalsList.size() > 1;
        //可針對三種情況匯出列表,<T>對匯出的借據號重複的放在一起(並提示與哪一行重複),為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 -> {
                    //先設定sequenceId的話在進入這裡就會被打亂了
                    List<Object> 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<Object> 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 + "條重複");
//                                    String failedReasonsFresh = reasonsOld + "[該條借據號與序號" + 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;
    }