package com.ruoyi.postCheck.util.excel;

import com.ruoyi.common.constant.PostListEnum;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.postCheck.domain.PostList;
import com.ruoyi.postCheck.domain.PostListInfo;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysPostService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;

/**
 * 解析岗位责任制清单Excel表
 */
@Slf4j
public class ExcelParsePostList {

    public static void main(String[] args) throws Exception {
/*
        File file = new File("C:\\test\\postcheck\\2、岗位责任清单-行政岗位经理.xlsx");
        InputStream inputStream = new FileInputStream(file);
        ExcelUtilsPostcheck excelUtilsPostcheck = new ExcelUtilsPostcheck(ExcelParseBean.class);
        beanList = excelUtilsPostcheck.importExcel(inputStream, -1);
//        List<ExcelBean> beanList = excelUtils.importExcel(null,inputStream,3);
        log.info("=====================================解析到 {} 行=====================================", beanList.size());

        for (int i = 0; i < beanList.size(); i++) {
            ExcelParseBean rowData = beanList.get(i);
//            log.info("{} 行数据 {}", i + 1, rowData);
            if (!parseRowData(i, rowData)) {
                break;
            }
        }

        System.out.println();
        log.info("======================================解析到结束 {} 行=================================", beanList.size());
        log.info("======================================打印收集到的数据，清单明细行数 {} 行=================================", postListData.getChildren().size());

        log.info("清单数据：" + postListData);
        for (int i = 0; i < postListData.getChildren().size(); i++) {
            PostListInfo dataInfo = postListData.getChildren().get(i);
            log.info("明细 {}\t{}", i + 1, dataInfo);
        }
        log.info("======================================打印收集到的数据结束=================================");

        System.out.println();
        System.out.println("字符串最大长度 maxLengSet = " + maxLengSet);
        System.out.println();
        */
    }

    /**
     * 解析到的Excel数据
     */
    private List<ExcelParseBean> beanList = null;

    /**
     * 插入的数据：清单表
     */
    public final PostList postListData = new PostList();

    /**
     * 插入数据的数据：清单明细表
     */
//    public static final List<Map<String, String>> dataList = new ArrayList<>();

    /**
     * 记录表格所有的类型
     */
    public static final Map<String, Integer> typeMap = new HashMap<>();

    static {
        //类型（1-业务职责；2-党建及党风廉政建设职责；3-安全环保职责；4-合规保密职；5-任职资格与能力素质要求）
        typeMap.put("业务职责", PostListEnum.TYPE_ONE.getValue());//1);
        typeMap.put("党建及党风廉政建设职责", PostListEnum.TYPE_TWO.getValue());//建设职责", 2);
        typeMap.put("安全环保职责", PostListEnum.TYPE_THREE.getValue());//, 3);
        typeMap.put("合规保密职责", PostListEnum.TYPE_FOUR.getValue());//, 4);
        typeMap.put("三、任职资格与能力素质要求", PostListEnum.TYPE_FIVE.getValue());//能力素质要求", 5);

        //提高容错率：可以删除
        typeMap.put("任职资格与能力素质要求", PostListEnum.TYPE_FIVE.getValue());//5
        typeMap.put("二、任职资格与能力素质要求", PostListEnum.TYPE_FIVE.getValue());//5
    }

    /**
     * 最大的长度：[0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 16, 17, 19, 22, 23, 28, 29, 30, 31, 38, 42, 43, 48, 51, 59, 60, 67, 81, 110, 114, 124, 138, 225, 297]
     */
//    public TreeSet<Integer> maxLengSet = new TreeSet<>();


    /**
     * 解析岗检表Excel文件，返回数据
     *
     * @param filePath 文件绝对路径
     * @return 岗检表对象含明细：{key:value,key:value,……,cheildren:[{key:value,key:value,……},{key:value,key:value,……},……]}
     */
    public PostList parseFile(String filePath, String downloadName) throws Exception {
        //1、读文件
        File file = new File(filePath);
        InputStream inputStream = new FileInputStream(file);
        ExcelUtilsPostcheck excelUtil = new ExcelUtilsPostcheck(ExcelParseBean.class);
        beanList = excelUtil.importExcel(inputStream, -1);

        //2、解析数据
        for (int i = 0; i < beanList.size(); i++) {
            ExcelParseBean rowData = beanList.get(i);
            if (!parseRowData(i, rowData)) {
                break;
            }
        }

        return postListData;
    }

    /**
     * 按行解析数据
     *
     * @param rowNum  数组角标（从0开始，Excel表格视觉行号是：1、2、3、……）
     * @param rowData 该行数据
     * @return true：继续解析；false：终止解析；
     */
    public boolean parseRowData(int rowNum, ExcelParseBean rowData) throws Exception {
        if (rowNum == 1 - 1) {
            parseRowDataOne(rowData);
        } else if (rowNum == 2 - 1) {
//            parseRowDataTwo(rowData);
        } else if (rowNum == 3 - 1) {
            parseRowDataThree(rowData);
        } else if (rowNum == 4 - 1) {
            parseRowDataFour(rowData);
        } else if (rowNum == 5 - 1) {
            parseRowDataFive(rowData);
        } else if (rowNum == 6 - 1) {
            parseRowDataSix(rowData);
        } else if (rowNum == 7 - 1) {
            parseRowDataSeven(rowData);
        } else if (rowNum == 8 - 1) {
//            parseRowDataEight(rowData);
        } else if (rowNum == 9 - 1) {
//            parseRowDataNine(rowData);
        } else if (rowNum == 10 - 1) {
            parseRowDataTen(rowData);
        } else if (rowNum == 11 - 1) {
//            parseRowDataEleven(rowData);
        } else if (rowNum == 12 - 1) {
//            parseRowDataTwelve(rowData);
        } else if (rowNum == 13 - 1) {

        }
        //等于14的行为数据行，开始解析明细表数据，直接解析到底
        else if (rowNum == 14 - 1) {
            parseRowDataJudge(rowData);
        }
        //大于14的行：已解析过
        else {
            return false;
        }
        return true;
    }


    /**
     * 当前解析的行号为：1
     * 标题
     *
     * @param row
     */
    public void parseRowDataOne(ExcelParseBean row) throws Exception {
        String cell_1 = row.getCell_1();
        String cell_2 = row.getCell_2();
        String cell_3 = row.getCell_3();
        String cell_4 = row.getCell_4();
        String cell_5 = row.getCell_5();
        String cell_6 = row.getCell_6();
        String cell_7 = row.getCell_7();
//        log.info(cell_1);
//        postListData.put("1清单名称", cell_1);
        postListData.setPostListName(cell_1);
    }

    /**
     * 当前解析的行号为：
     *
     * @param row
    public static void parseRowDataTwo(ExcelBean row) throws Exception {
    //        String cell_1 = row.getCell_1();
    //        String cell_2 = row.getCell_2();
    //        String cell_3 = row.getCell_3();
    //        String cell_4 = row.getCell_4();
    //        String cell_5 = row.getCell_5();
    //        String cell_6 = row.getCell_6();
    //        String cell_7 = row.getCell_7();
    //        log.info(cell_1);

    }
     */

    /**
     * 当前解析的行号为：
     *
     * @param row
     */
    public void parseRowDataThree(ExcelParseBean row) throws Exception {
        String cell_1 = row.getCell_1();
        String cell_2 = row.getCell_2();
        String cell_3 = row.getCell_3();
        String cell_4 = row.getCell_4();
        String cell_5 = row.getCell_5();
        String cell_6 = row.getCell_6();
        String cell_7 = row.getCell_7();
//        log.info(cell_2, cell_6);
//        postListData.put("2所在单位", cell_2);
//        postListData.put("3所在部门", cell_6);

        postListData.setUnitId(cell_2);
        postListData.setDeptName(cell_6);

//        @Autowired
//        private ISysDeptService sysDeptService;
//        @Autowired
//        private ISysPostService sysPostService;


        /*SysDept deptParam = new SysDept();
        deptParam.setDeptName(cell_6);
        List<SysDept> deptList = SpringUtils.getBean(ISysDeptService.class).selectDeptListByCondition(deptParam);//获取代理对象保证事务传递
        if (CollectionUtils.isEmpty(deptList)) {
            throw new BaseException(downloadName + "文件中部门名称【" + checkedDeptName + "】不存在，请检查！");
        } else if (deptList.size() != 1) {
            throw new BaseException(downloadName + "文件中部门名称【" + checkedDeptName + "】不唯一查到" + deptList.size() + "个，请检查！");
        }
        SysPost postParam = new SysPost();
        postParam.setDeptId(deptList.get(0).getDeptId());//部门ID
        postParam.setPostName(checkedPostName);//岗位名称
        List<SysPost> postList = SpringUtils.getBean(ISysPostService.class).selectPostList(postParam);
        if (CollectionUtils.isEmpty(postList)) {
            throw new BaseException(downloadName + "文件中在对应部门下（" + checkedDeptName + "）岗位名称【" + checkedPostName + "】不存在，请检查！");
        } else if (postList.size() != 1) {
            throw new BaseException(downloadName + "文件中在对应部门下（" + checkedDeptName + "）岗位名称【" + checkedPostName + "】不唯一查到" + postList.size() + "个，请检查！");
        }*/


    }

    /**
     * 当前解析的行号为：
     *
     * @param row
     */
    public void parseRowDataFour(ExcelParseBean row) throws Exception {
        String cell_1 = row.getCell_1();
        String cell_2 = row.getCell_2();
        String cell_3 = row.getCell_3();
        String cell_4 = row.getCell_4();
        String cell_5 = row.getCell_5();
        String cell_6 = row.getCell_6();
        String cell_7 = row.getCell_7();
        log.info(cell_2, cell_6);
//        postListData.put("4岗位名称", cell_2);
//        postListData.put("5岗位编码", cell_6);
        postListData.setPostName(cell_2);
        postListData.setPositionCode(cell_6);
    }


    /**
     * 当前解析的行号为：
     *
     * @param row
     */
    public void parseRowDataFive(ExcelParseBean row) throws Exception {
        String cell_1 = row.getCell_1();
        String cell_2 = row.getCell_2();
        String cell_3 = row.getCell_3();
        String cell_4 = row.getCell_4();
        String cell_5 = row.getCell_5();
        String cell_6 = row.getCell_6();
        String cell_7 = row.getCell_7();
//        log.info(cell_2, cell_6);
//        postListData.put("6岗位级别", cell_2);
//        postListData.put("7是否涉密", cell_6);
        postListData.setPositionLevel(cell_2);
        postListData.setIsConfidential(cell_6);
    }

    /**
     * 当前解析的行号为：
     *
     * @param row
     */
    public void parseRowDataSix(ExcelParseBean row) throws Exception {
        String cell_1 = row.getCell_1();
        String cell_2 = row.getCell_2();
        String cell_3 = row.getCell_3();
        String cell_4 = row.getCell_4();
        String cell_5 = row.getCell_5();
        String cell_6 = row.getCell_6();
        String cell_7 = row.getCell_7();
//        log.info(cell_2, cell_6);
//        postListData.put("8直接上级", cell_2);
//        postListData.put("9直接下级", cell_6);
        postListData.setDirectSuperior(cell_2);
        postListData.setDirectSubordinate(cell_6);

    }

    /**
     * 当前解析的行号为：
     *
     * @param row
     */
    public void parseRowDataSeven(ExcelParseBean row) throws Exception {
        String cell_1 = row.getCell_1();
        String cell_2 = row.getCell_2();
        String cell_3 = row.getCell_3();
        String cell_4 = row.getCell_4();
        String cell_5 = row.getCell_5();
        String cell_6 = row.getCell_6();// Tue Aug 01 00:00:00 CST 2023
        String cell_7 = row.getCell_7();
//        log.info(cell_2, cell_6);
//        SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss 'UTC' yyyy");
//        java.util.Date dateObj = sdf.parse(cell_6);
//        System.out.println(dateObj);

//        postListData.put("10管辖人员", cell_2);
//        postListData.put("11编订/修订日期", cell_6);

        postListData.setSubordinateCount(StringUtils.isBlank(cell_2) ? null : Integer.parseInt(cell_2));
        postListData.setRevisionDate(StringUtils.isBlank(cell_6) ? null : DateUtils.parseDate(cell_6));
    }

    /**
     * 当前解析的行号为：
     *
     * @param row
    public static void parseRowDataEight(ExcelBean row) throws Exception {
    //        String cell_1 = row.getCell_1();
    //        String cell_2 = row.getCell_2();
    //        String cell_3 = row.getCell_3();
    //        String cell_4 = row.getCell_4();
    //        String cell_5 = row.getCell_5();
    //        String cell_6 = row.getCell_6();
    //        String cell_7 = row.getCell_7();
    //        log.info(cell_1);
    }
     */

    /**
     * 当前解析的行号为：
     *
     * @param row
    public static void parseRowDataNine(ExcelBean row) throws Exception {
    //        String cell_1 = row.getCell_1();
    //        String cell_2 = row.getCell_2();
    //        String cell_3 = row.getCell_3();
    //        String cell_4 = row.getCell_4();
    //        String cell_5 = row.getCell_5();
    //        String cell_6 = row.getCell_6();
    //        String cell_7 = row.getCell_7();
    //        log.info(cell_1);
    }
     */

    /**
     * 当前解析的行号为：
     *
     * @param row
     */
    public void parseRowDataTen(ExcelParseBean row) throws Exception {
        String cell_1 = row.getCell_1();
        String cell_2 = row.getCell_2();
        String cell_3 = row.getCell_3();
        String cell_4 = row.getCell_4();
        String cell_5 = row.getCell_5();
        String cell_6 = row.getCell_6();
        String cell_7 = row.getCell_7();
//        log.info(cell_1); //工作摘要
        postListData.setJobSummary(cell_1);
    }

    /**
     * 当前解析的行号为：
     *
     * @param row
    public static void parseRowDataEleven(ExcelBean row) throws Exception {
    //        String cell_1 = row.getCell_1();
    //        String cell_2 = row.getCell_2();
    //        String cell_3 = row.getCell_3();
    //        String cell_4 = row.getCell_4();
    //        String cell_5 = row.getCell_5();
    //        String cell_6 = row.getCell_6();
    //        String cell_7 = row.getCell_7();
    //        log.info(cell_1);
    }
     */

    /**
     * 当前解析的行号为：12
     *
     * @param row
    public static void parseRowDataTwelve(ExcelBean row) throws Exception {
    //        12 行数据 ExcelBean(cell_1=序号, cell_2=工作任务的内容, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=工作标准)
    //        13 行数据 ExcelBean(cell_1=, cell_2=一级事项, cell_3=二级事项, cell_4=三级事项, cell_5=四级事项, cell_6=五级事项, cell_7=)
    //        14 行数据 ExcelBean(cell_1=（1）, cell_2=业务职责, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
    String cell_1 = row.getCell_1();
    String cell_2 = row.getCell_2();
    String cell_3 = row.getCell_3();
    String cell_4 = row.getCell_4();
    String cell_5 = row.getCell_5();
    String cell_6 = row.getCell_6();
    String cell_7 = row.getCell_7();
    log.info(cell_1);
    }
     */

    /**
     * 当前解析的行号为：>= 14
     * 判断是否为一个分类的开始，转发到数据收集方法
     *
     * @param row
     */
    public void parseRowDataJudge(ExcelParseBean row) throws Exception {
//        14 行数据 ExcelBean(cell_1=（1）, cell_2=业务职责, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        19 行数据 ExcelBean(cell_1=（2）, cell_2=党建及党风廉政建设职责, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        23 行数据 ExcelBean(cell_1=（3）, cell_2=安全环保职责, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        27 行数据 ExcelBean(cell_1=（4), cell_2=合规保密职责, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)

//        33 行数据 ExcelBean(cell_1=三、任职资格与能力素质要求, cell_2=, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)

//        String cell_1 = row.getCell_1();
//        String cell_2 = row.getCell_2();
//        String cell_3 = row.getCell_3();
//        String cell_4 = row.getCell_4();
//        String cell_5 = row.getCell_5();
//        String cell_6 = row.getCell_6();
//        String cell_7 = row.getCell_7();

        int dutyTypeNum = getDutyTypeNum(row);
        //第二项：2. 主要职责 的类型占位行 业务职责、党建及党风廉政建设职责、………
        if (dutyTypeNum == 1) {
            parseRowDataDutyType(row);
        }
        //第三项：三、任职资格与能力素质要求
        else if (dutyTypeNum == 2) {
            parseRowDataCredentialsAbilityAsk(row);
        } else {

        }
/*

        //第二项：2. 主要职责
        if (typeMap.containsValue(cell_2) && StringUtils.isBlank(cell_3) && StringUtils.isBlank(cell_4) && StringUtils.isBlank(cell_5) && StringUtils.isBlank(cell_6) && StringUtils.isBlank(cell_7)) {
            parseRowDataDutyType(row);
        }
        //第三项：三、任职资格与能力素质要求
        else if (typeMap.containsValue(cell_1) && StringUtils.isBlank(cell_2) && StringUtils.isBlank(cell_3) && StringUtils.isBlank(cell_4) && StringUtils.isBlank(cell_5) && StringUtils.isBlank(cell_6) && StringUtils.isBlank(cell_7)) {
            parseRowDataCredentialsAbilityAsk(row);
        }
*/

    }


    /**
     * 当前解析的行号为：>=15
     * 收集主要职责的4中类型数据：循环一直解析到底
     *
     * @param row
     */
    public void parseRowDataDutyType(ExcelParseBean row) throws Exception {
//        15 行数据 ExcelBean(cell_1=①, cell_2=行政综合管理, cell_3=企业管理, cell_4=党委会、董事会管理, cell_5=, cell_6=, cell_7=抓好三重一大管理，确保党委会、董事会合规运行)
//        16 行数据 ExcelBean(cell_1=②, cell_2=行政综合管理, cell_3=保密管理, cell_4=保密、信访及维稳管理, cell_5=, cell_6=, cell_7=按照要求做好保密教育、不发生重大泄密事件；不发生大规模群访闹访事件，限时办结信访事项)
//        17 行数据 ExcelBean(cell_1=③, cell_2=部门综合管理, cell_3=队伍建设管理, cell_4=员工绩效考核管理, cell_5=, cell_6=, cell_7=严格按照绩效考核制度开展员工绩效考核工作，做好绩效沟通反馈工作)
//        18 行数据 ExcelBean(cell_1=④, cell_2=部门综合管理, cell_3=部门事务决策管理, cell_4=部门评先推优管理, cell_5=, cell_6=, cell_7=部门评先推优程序公开公平公正，结果经过集体决策)

//        19 行数据 ExcelBean(cell_1=（2）, cell_2=党建及党风廉政建设职责, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        20 行数据 ExcelBean(cell_1=⑤, cell_2=个人廉洁从业情况, cell_3=违反相关规章制度, cell_4=, cell_5=, cell_6=, cell_7=检查时间范围内未受到处理处分（诫勉以上）（以公司发文为准）。)

        //防止角标越界
        int index = beanList.indexOf(row);
        if (index == beanList.size() - 1) {
            log.info("文件最后一行，解析结束！index = {} row = {}", index, row);
            return;
        }
        //从发现类型的下一行开始解析数据

        Integer typeLast = typeMap.get(row.getCell_2());//第一个默认是 业务职责

        System.out.println();
        System.out.println("cell_1 = " + row.getCell_1() + "\tcell_2 = " + row.getCell_2() + "\ttypeLast\t" + typeLast);
        System.out.println();

        for (int i = index + 1; i < beanList.size(); i++) {
            ExcelParseBean thisRow = beanList.get(i);
            //跳过非数据行：0-默认（数据行）； 1-类型；2-任职资格与能力素质要求；
            int dutyTypeNum = getDutyTypeNum(thisRow);
            if (dutyTypeNum == 1) {
                String cell_1 = thisRow.getCell_1();
                String cell_2 = thisRow.getCell_2();
//                String cell_3 = thisRow.getCell_3();
//                String cell_4 = thisRow.getCell_4();
//                String cell_5 = thisRow.getCell_5();
//                String cell_6 = thisRow.getCell_6();
//                String cell_7 = thisRow.getCell_7();
//                String cell_8 = thisRow.getCell_8();

//                System.out.println("cell_3 = " + cell_3);
//                System.out.println("cell_4 = " + cell_4);
//                System.out.println("cell_5 = " + cell_5);
//                System.out.println("cell_6 = " + cell_6);
//                System.out.println("cell_7 = " + cell_7);
//                System.out.println("cell_8 = " + cell_8);

                typeLast = typeMap.get(cell_2);

                System.out.println();
                System.out.println("cell_1 = " + cell_1 + "\tcell_2 = " + cell_2 + "\ttypeLast\t" + typeLast);
                System.out.println();
                continue;
            }
            //任职资格与能力素质要求：主要职责处理完毕，跳出循环
            else if (dutyTypeNum == 2) {
                parseRowDataCredentialsAbilityAsk(thisRow);
                break;
            }
            String cell_1 = thisRow.getCell_1();//序号
            String cell_2 = thisRow.getCell_2();//一级事项
            String cell_3 = thisRow.getCell_3();//二级事项
            String cell_4 = thisRow.getCell_4();//三级事项
            String cell_5 = thisRow.getCell_5();//四级事项
            String cell_6 = thisRow.getCell_6();//五级事项
            String cell_7 = thisRow.getCell_7();//工作标准
            String cell_8 = thisRow.getCell_8();//检查方法
//            Map<String, String> rowData = new TreeMap<>();
//            rowData.put("0序号", cell_1);
//            rowData.put("1一级事项", cell_2);
//            rowData.put("2二级事项", cell_3);
//            rowData.put("3三级事项", cell_4);
//            rowData.put("4四级事项", cell_5);
//            rowData.put("5五级事项", cell_6);
//            rowData.put("6工作标准", cell_7);
//            rowData.put("7检查方法", cell_8);
//            dataList.add(rowData);

            PostListInfo postListInfo = new PostListInfo();
            postListInfo.setType(typeLast);
            postListInfo.setSequenceProject(cell_1);
            postListInfo.setLevelOne(cell_2);//1一级事项
            postListInfo.setLevelTwo(cell_3);//2二级事项
            postListInfo.setLevelThree(cell_4);//3三级事项
            postListInfo.setLevelFour(cell_5);//4四级事项
            postListInfo.setLevelFive(cell_6);//5五级事项
            postListInfo.setWorkStandard(cell_7);//6工作标准
            postListInfo.setPostCheckedMethod(cell_8);//7检查方法
            postListData.getChildren().add(postListInfo);

//            maxLengSet.add(cell_1.length());
//            maxLengSet.add(cell_2.length());
//            maxLengSet.add(cell_3.length());
//            maxLengSet.add(cell_4.length());
//            maxLengSet.add(cell_5.length());
//            maxLengSet.add(cell_6.length());
//            maxLengSet.add(cell_7.length());
        }
    }


    /**
     * 当前解析的行号为：>=15
     * 收集任职资格与能力素质要求数据：循环一直解析到底
     *
     * @param row
     */
    public void parseRowDataCredentialsAbilityAsk(ExcelParseBean row) throws Exception {
//        33 行数据 ExcelBean(cell_1=三、任职资格与能力素质要求, cell_2=, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)

//        34 行数据 ExcelBean(cell_1=项目, cell_2=要求, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        35 行数据 ExcelBean(cell_1=*政治要求, cell_2=·中共党员。……………, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        36 行数据 ExcelBean(cell_1=*最低学历要求, cell_2=大学本科, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        37 行数据 ExcelBean(cell_1=*最低学位要求, cell_2=无, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        38 行数据 ExcelBean(cell_1=*工作经验, cell_2=具有累计7年以上企业工作经历。M8/T6级及以上，在副经理（或相当层级）岗位工作2年以上；未满2年的应当在副经理（或相当层级）和岗位经理/主管工程师（或相当层
//        39 行数据 ExcelBean(cell_1=*职称要求, cell_2=高级职称, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        40 行数据 ExcelBean(cell_1=*专业要求, cell_2=石油主干专业、企业管理或相关专业。, cell_3=, cell_4=, cell_5=, cell_6=, cell_7=)
//        41 行数据 ExcelBean(cell_1=*能力要求, cell_2=·具有出色的计划、控制、领导和团队管理能力

        //防止角标越界
        int index = beanList.indexOf(row);
        if (index == beanList.size() - 1) {
            log.info("文件最后一行，解析结束！index = {} row = {}", index, row);
            return;
        }

        Integer typeLast = typeMap.get(row.getCell_1() == null ? "三、任职资格与能力素质要求" : row.getCell_1().trim());//第一个默认是 业务职责

        System.out.println();
        System.out.println("cell_1 = " + row.getCell_1() + "\tcell_2 = " + row.getCell_2() + "\ttypeLast\t" + typeLast);
        System.out.println();


        //从发现类型的下2行开始解析数据
        for (int i = index + 2; i < beanList.size(); i++) {
            ExcelParseBean thisRow = beanList.get(i);
            //跳过非数据行：0-默认（数据行）； 1-类型；2-任职资格与能力素质要求；
            int dutyTypeNum = getDutyTypeNum(thisRow);
            if (dutyTypeNum == 2) {
                String cell_1 = thisRow.getCell_1();
                String cell_2 = thisRow.getCell_2();

                typeLast = typeMap.get(cell_1 == null ? "三、任职资格与能力素质要求" : cell_1.trim());

                System.out.println();
                System.out.println("cell_1 = " + cell_1 + "\tcell_2 = " + cell_2 + "\ttypeLast\t" + typeLast);
                System.out.println();

                continue;
            }
            //主要职责：任职资格与能力素质要求处理完毕，跳出循环（当甲方将2个“主要职责”、“任职资格与能力素质要求”顺序调换后程序依然可以正常解析）
            else if (dutyTypeNum == 1) {
                parseRowDataDutyType(thisRow);
                break;
            }
            String cell_1 = thisRow.getCell_1();//项目
            String cell_2 = thisRow.getCell_2();//要求
            String cell_8 = thisRow.getCell_8();//检查方法
//            Map<String, String> rowData = new TreeMap<>();
//            rowData.put("1项目", cell_1);
//            rowData.put("2要求", cell_2);
//            dataList.add(rowData);

            PostListInfo postListInfo = new PostListInfo();
            postListInfo.setType(typeLast);
            postListInfo.setSequenceProject(cell_1);
            postListInfo.setRequirement(cell_2);
            postListInfo.setPostCheckedMethod(cell_8);//检查方法
            postListData.getChildren().add(postListInfo);

//            maxLengSet.add(cell_1.length());
//            maxLengSet.add(cell_2.length());

        }
    }

    /**
     * 判断当前行时 类型（业务职责、党建及党风廉政建设职责、……） OR 任职资格与能力素质要求
     *
     * @param row
     * @return 0-默认（数据行）； 1-类型；2-任职资格与能力素质要求；
     */
    public int getDutyTypeNum(ExcelParseBean row) {
        String cell_1 = row.getCell_1();
        String cell_2 = row.getCell_2();
        String cell_3 = row.getCell_3();
        String cell_4 = row.getCell_4();
        String cell_5 = row.getCell_5();
        String cell_6 = row.getCell_6();
        String cell_7 = row.getCell_7();

//        log.info("cell_1 containsKey\t{}", typeMap.containsKey(cell_1));
//        log.info("cell_2 containsKey\t{}", typeMap.containsKey(cell_2));
//        log.info("cell_3 containsKey\t{}", typeMap.containsKey(cell_3));

        //第二项：2. 主要职责
        if (typeMap.containsKey(cell_2) && StringUtils.isBlank(cell_3) && StringUtils.isBlank(cell_4) && StringUtils.isBlank(cell_5) && StringUtils.isBlank(cell_6) && StringUtils.isBlank(cell_7)) {
            return 1;
        }
        //第三项：三、任职资格与能力素质要求
        else if (typeMap.containsKey(cell_1) && StringUtils.isBlank(cell_2) && StringUtils.isBlank(cell_3) && StringUtils.isBlank(cell_4) && StringUtils.isBlank(cell_5) && StringUtils.isBlank(cell_6) && StringUtils.isBlank(cell_7)) {
            return 2;
        }
        return 0;
    }

}
