//package cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.busi.bu3;
//
//import cn.estsh.i3plus.ext.mes.api.base.bu3.ISxBuWorkOrderExtService;
//import cn.estsh.i3plus.ext.mes.apiservice.serviceimpl.base.CommonExtService;
//import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportErrorExtModel;
//import cn.estsh.i3plus.ext.mes.pojo.model.ExcelImportResultExtModel;
//import cn.estsh.i3plus.ext.mes.pojo.util.MesExtConstWords;
//import cn.estsh.i3plus.ext.mes.pojo.util.MesExtEnumUtil;
//import cn.estsh.i3plus.platform.common.convert.ConvertBean;
//import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
//import cn.estsh.i3plus.pojo.mes.bean.MesContainer;
//import cn.estsh.impp.framework.boot.auth.AuthUtil;
//import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
//import org.apache.poi.ss.usermodel.*;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.util.CollectionUtils;
//import org.springframework.util.StringUtils;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
///**
// * @PROJECT_NAME: i3plus-mes-panasonic-dev
// * @DESCRIPTION:
// * @USER: xinwang.yi
// * @DATE: 2023-08-07 16:49
// */
//@Service
//public class SxBuWorkOrderExtService implements ISxBuWorkOrderExtService {
//
//    @Autowired
//    private CommonExtService commonExtService;
//
//    public static final Logger LOGGER = LoggerFactory.getLogger(SxBuWorkOrderExtService.class);
//    /**
//     * mes导入
//     *
//     * @param file
//     * @param id 工单id
//     * @return
//     */
//    @Override
//    public ExcelImportResultExtModel insertDataByExcel(MultipartFile file, Long id) {
//        ExcelImportResultExtModel excelImportResultExtModel;
//        InputStream inputStream = null;
//        Workbook workbook = null;
//
//        try {
//            inputStream = file.getInputStream();
//            workbook = WorkbookFactory.create(inputStream);
//            excelImportResultExtModel = insertDataByExcel(workbook, AuthUtil.getOrganize().getOrganizeCode(), AuthUtil.getSessionUser().getUserName());
//        } catch (IOException e) {
//            LOGGER.error(e.getMessage());
//            throw ImppExceptionBuilder.newInstance()
//                    .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
//                    .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
//                    .setErrorDetail("文件异常，请重新上传EXCEL文件")
//                    .build();
//        } catch (Exception e) {
//            LOGGER.error(e.getMessage());
//            throw ImppExceptionBuilder.newInstance()
//                    .setSystemID(CommonEnumUtil.SOFT_TYPE.MES.getCode())
//                    .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION.getCode())
//                    .setErrorDetail("文件异常，请重新上传EXCEL文件" + e.getMessage())
//                    .build();
//        } finally {
//            try {
//                workbook.close();
//                inputStream.close();
//            } catch (IOException e) {
//                LOGGER.error("IOException!", e);
//            }
//        }
//
//        return excelImportResultExtModel;
//    }
//
//    private ExcelImportResultExtModel insertDataByExcel(Workbook workbook, String organizeCode, String userName) {
//        //读取表格
//        ExcelImportResultExtModel excelImportResultExtModel = this.sheetExtractUnbindSn(workbook.getSheetAt(0), organizeCode, userName);
//        //数据入库
//        this.insertExcelUnbindSn(excelImportResultExtModel);
//        return excelImportResultExtModel;
//    }
//
//
//    /**
//     * 容器导入-读取表格
//     * @param sheetAt
//     * @param organizeCode
//     * @param userName
//     * @return
//     */
//    private ExcelImportResultExtModel sheetExtractUnbindSn(Sheet sheetAt, String organizeCode, String userName) {
//        //从0行开始读取
//        int totalNumberOfRows = sheetAt.getLastRowNum() + 1;
//
//        //MesContainer
//        List<MesContainer> containerList = new ArrayList<>();
//
//        //成功数量
//        Integer successRowNum = 0;
//        //失败数量
//        Integer failRowNum = 0;
//        //错误的行号
//        String errorRows = "";
//
//        //错误行信息集合
//        List<ExcelImportErrorExtModel> excelImportErrorExtModels = new ArrayList<>();
//
//        //用于EXCEL表中的容器代码唯一校验，key：ctNo，value：row
//        Map<String, String> ctNoMap = new HashMap<>();
//
//        //查询工单表
//
//        //从excel表的第5行数据开始导入，getFirstRowNum是从0行开始读取
//        for (int i = (sheetAt.getFirstRowNum() + 4); i < totalNumberOfRows; i ++) {
//            Row row = sheetAt.getRow(i);
//            //空行跳过
//            if (null == row) {
//                continue;
//            }
//            //获取总列数
//            Short lastCellNum = row.getLastCellNum();
//            if (lastCellNum > 0) {
//
//                int rowNum = i + 1;    //当前行号
//                int errorNum = 0;      //错误数量
//                String cellNum = "";   //错误列号
//                String errorInfo = ""; //错误信息
//
//                //容器代码
//                try {
//                    //第一列必须有值，否则跳过
//                    row.getCell(0).setCellType(CellType.STRING);
//                } catch (Exception e) {
//                    continue;
//                }
//                String ctNo = row.getCell(0, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim();
//                //容器类型
//                String ctCode = null;
//                try {
//                    row.getCell(1).setCellType(CellType.STRING);
//                    ctCode = row.getCell(1, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).getStringCellValue().trim();
//                } catch (Exception e) {
//                }
//
//                boolean isExist = false;
//                //校验容器代码不重复
//                if (!ctNoMap.containsKey(ctNo)) {
//                    ctNoMap.put(ctNo, String.valueOf(rowNum));
//                    //校验 容器代码 是否已经存在数据库
//                    //if (StringUtils.isEmpty(errorInfo) && !CollectionUtils.isEmpty(containerMap) && containerMap.containsKey(ctNo)) {
//                    //    isExist = true;
//                    //}
//                } else {
//                    errorNum ++;
//                    cellNum += "A;";
//                    errorInfo += "第A列数据跟第" + ctNoMap.get(ctNo) + "行的第A列数据重复;";
//                }
//
//                //校验容器类型
//                if (StringUtils.isEmpty(ctCode)) {
//                    errorNum ++;
//                    cellNum += "B;";
//                    errorInfo += "第B列数据必填;";
//                } else {
//                    //if (CollectionUtils.isEmpty(ctCodeEntityMap) || !ctCodeEntityMap.containsKey(ctCode)) {
//                    //    errorNum ++;
//                    //    cellNum += "B;";
//                    //    errorInfo += "第B列数据无效;";
//                    //}
//                }
//
//                //没有错误的时候，封装MesContainer
//                if (errorNum == 0) {
//                    MesContainer container;
//                    //if(isExist){
//                    //    container = containerMap.get(ctNo).get(0);
//                    //    if(container.getUseStatus() == MesExtEnumUtil.CONTAINER_USE_STATUS.LEISURE.getValue()){
//                    //        container.setCtCode(ctCode);
//                    //    }
//                    //    ConvertBean.serviceModelUpdate(container, userName);
//                    //}else{
//                    //    container = new MesContainer();
//                    //    container.setUseStatus(MesExtEnumUtil.CONTAINER_USE_STATUS.LEISURE.getValue());
//                    //    container.setCtCode(ctCode);
//                    //    ConvertBean.serviceModelInitialize(container, userName);
//                    //}
//                    //container.setCtNo(ctNo);
//                    //container.setSyncStatus(MesExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
//                    //container.setOrganizeCode(organizeCode);
//
//                    //containerList.add(container);
//
//                    successRowNum ++;
//                } else {
//                    //封装错误行信息ExcelImportErrorExtModel
//                    excelImportErrorExtModels = commonExtService.getExcelImportErrorModels(excelImportErrorExtModels, rowNum, errorNum, cellNum, errorInfo);
//
//                    errorRows += rowNum + ";";
//                    failRowNum ++;
//                }
//            }
//        }
//
//        //校验EXCEL数据
//        commonExtService.checkExcelData(failRowNum, successRowNum, errorRows);
//
//        //封装返回结果
//        ExcelImportResultExtModel excelImportResultModel = commonExtService.getExcelImportResultModel(failRowNum, successRowNum, excelImportErrorExtModels, errorRows);
//        excelImportResultModel.setExcelList((failRowNum > 0) ? null : containerList);
//        return excelImportResultModel;
//    }
//
//
//    /**
//     * 容器导入-数据入库
//     * @param excelImportResultExtModel
//     */
//    private void insertExcelUnbindSn(ExcelImportResultExtModel excelImportResultExtModel) {
//        //导入数据
//        if (null != excelImportResultExtModel) {
//            List<MesContainer> excelList = excelImportResultExtModel.getExcelList();
//            if (!CollectionUtils.isEmpty(excelList)) {
//                for (MesContainer container : excelList) {
//                    //if(StringUtils.isEmpty(container.getId())){
//                    //    containerRepository.insert(container);
//                    //}else{
//                    //    containerRepository.save(container);
//                    //}
//                }
//            }
//        }
//    }
//}
