//package com.engine.salary.entity.taxrate.bo;
//
//import com.engine.salary.entity.taxrate.TaxRateDetail;
//import com.engine.salary.util.JsonUtil;
//import org.apache.commons.collections4.CollectionUtils;
//import org.apache.commons.lang3.StringUtils;
//
//import java.util.Collection;
//import java.util.List;
//import java.util.Map;
//import java.util.Objects;
//
///**
// * @description: 税率表明细
// * @author: xiajun
// * @modified By: xiajun
// * @date: Created in 2/18/22 2:07 PM
// * @version:v1.0
// */
//public class TaxRateDetailBO {
//
//    /**
//     * 根据公式条件获取对应的税率
//     *
//     * @param taxRateDetailPOS
//     * @param isOr
//     * @param formulaFilterDataList
//     * @return
//     */
//    public static TaxRateDetail filter(List<TaxRateDetail> taxRateDetailPOS, boolean isOr, Collection<FormulaFilterData> formulaFilterDataList) {
//        if (CollectionUtils.isEmpty(taxRateDetailPOS)) {
//            return null;
//        }
//        return taxRateDetailPOS.stream()
//                .filter(taxRateDetailPO -> {
//                    for (FormulaFilterData formulaFilterData : formulaFilterDataList) {
//                        boolean result = filterByFormulaFilterData(taxRateDetailPO, formulaFilterData);
//                        // 如果公式中的条件是or，只要有一个条件为true就返回true
//                        if (isOr && result) {
//                            return true;
//                        }
//                        // 如果公式中的条件是and，只要有一个条件为false就返回false
//                        if (!isOr && !result) {
//                            return false;
//                        }
//                    }
//                    // 如果公式中的条件是or，前面没有一个条件为true，则返回false
//                    // 如果公式中的条件是and, 前面没有一个条件为false，则返回true
//                    return !isOr;
//                })
//                .findFirst()
//                .orElse(null);
//    }
//
//    /**
//     * 根据公式条件和个税税率表的字段比对，看是否满足公式中的条件
//     *
//     * @param taxRateDetailPO
//     * @param formulaFilterData
//     * @return
//     */
//    private static boolean filterByFormulaFilterData(TaxRateDetail taxRateDetailPO, FormulaFilterData formulaFilterData) {
//        Map<String, Object> map = JsonUtil.parseMap(taxRateDetailPO, Object.class);
//        switch (formulaFilterData.getTerm()) {
//            case FormulaFilterData.TERM_EQ:
//            case FormulaFilterData.TERM_BEQ:
//            case FormulaFilterData.TERM_SEQ:
//                return Objects.equals(map.get(formulaFilterData.getFieldId()), formulaFilterData.getContent());
//            case FormulaFilterData.TERM_NOT_EQ:
//                return !Objects.equals(map.get(formulaFilterData.getFieldId()), formulaFilterData.getContent());
//            case FormulaFilterData.TERM_NULL:
//                return Objects.isNull(map.get(formulaFilterData.getFieldId()));
//            case FormulaFilterData.TERM_NOT_NULL:
//                return Objects.nonNull(map.get(formulaFilterData.getFieldId()));
//            case FormulaFilterData.TERM_LIKE:
//                return StringUtils.contains(String.valueOf(map.get(formulaFilterData.getFieldId())), formulaFilterData.getContent());
//            case FormulaFilterData.TERM_GT:
//                return SalaryEntityUtil.empty2Zero(String.valueOf(map.get(formulaFilterData.getFieldId())))
//                        .compareTo(SalaryEntityUtil.empty2Zero(formulaFilterData.getContent())) > 0;
//            case FormulaFilterData.TERM_GE:
//                return SalaryEntityUtil.empty2Zero(String.valueOf(map.get(formulaFilterData.getFieldId())))
//                        .compareTo(SalaryEntityUtil.empty2Zero(formulaFilterData.getContent())) >= 0;
//            case FormulaFilterData.TERM_LE:
//                return SalaryEntityUtil.empty2Zero(String.valueOf(map.get(formulaFilterData.getFieldId())))
//                        .compareTo(SalaryEntityUtil.empty2Zero(formulaFilterData.getContent())) <= 0;
//            case FormulaFilterData.TERM_LT:
//                return SalaryEntityUtil.empty2Zero(String.valueOf(map.get(formulaFilterData.getFieldId())))
//                        .compareTo(SalaryEntityUtil.empty2Zero(formulaFilterData.getContent())) < 0;
//            default:
//                return false;
//        }
//    }
//}
