package org.linlinjava.jz.admin.util;


import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import org.linlinjava.jz.admin.excel.CustomerExcelModel;
import org.linlinjava.jz.core.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author fuxubing
 */
public class CustomerExcelListener extends AnalysisEventListener<CustomerExcelModel> {
    // ExcelModel ：实体类
    //自定义用于暂时存储data。
    //可以通过实例获取该值
    private List<CustomerExcelModel> datas = new ArrayList<>();

    private List<CustomerExcelModel> failDatas = new ArrayList<>();
    //private List<Map<String,Object>> datas = new ArrayList<>();  //根据需求也可选择用map来接收


//    @Override
//    public void invoke(Map<String,Object> map, AnalysisContext analysisContext) {
//
//            datas.add(map);//数据存储到list，供批量处理，或后续自己业务逻辑处理。
//
//    }

    @Override
    public void invoke(CustomerExcelModel excelModel, AnalysisContext analysisContext) {//此方法一行一行的读取Excel内容
        if (StringUtils.isEmpty(excelModel.getTel()) && excelModel.getCity() == 0) { //做一个简单的判断，可根据自己的业务逻辑更改
            //数据存储到list，供批量处理，或后续自己业务逻辑处理。
            excelModel.setRemark("手机号或业务城市为空或业务城市与系统城市不匹配");
            failDatas.add(excelModel);

        } else if (excelModel.getTel().length() != 11) {
            excelModel.setRemark("手机号不正确");
            failDatas.add(excelModel);
        } else {
            datas.add(excelModel);
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // datas.clear();//解析结束销毁不用的资源，也可待数据入库后在进行销毁，根据具体业务需求自行更改
    }

    public List<CustomerExcelModel> getDatas() { //把存储的数据通过此方法暴露出去
        return datas;
    }

    public List<CustomerExcelModel> getFailDatas() { //把存储的数据通过此方法暴露出去
        return failDatas;
    }
}
