package org.dromara.eims.listener; import cn.hutool.core.util.ObjectUtil; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.exception.ExcelDataConvertException; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.service.DictService; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.excel.core.ExcelListener; import org.dromara.common.excel.core.ExcelResult; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.eims.domain.vo.EimsEquVo; import org.dromara.eims.domain.vo.InspectCheckItemVo; import org.dromara.eims.service.IEimsEquService; import java.util.ArrayList; import java.util.List; /** * 点检项目导入监听器 * * @author zhuguifei */ @Data @Slf4j public class InspectCheckItemImportListener extends AnalysisEventListener implements ExcelListener { private final IEimsEquService equService; private final DictService dictService; private final Long operUserId; private final Boolean isUpdateSupport; /** * 成功条数 */ private Integer successCount = 0; /** * 失败条数 */ private Integer failureCount = 0; /** * 导入成功数据列表 */ private List successList = new ArrayList<>(); /** * 导入失败数据列表 */ private List failureList = new ArrayList<>(); private final StringBuilder successMsg = new StringBuilder(); private final StringBuilder failureMsg = new StringBuilder(); public InspectCheckItemImportListener(Boolean isUpdateSupport) { this.equService = SpringUtils.getBean(IEimsEquService.class); this.dictService = SpringUtils.getBean(DictService.class); this.isUpdateSupport = isUpdateSupport; this.operUserId = LoginHelper.getUserId(); } @Override public void invoke(InspectCheckItemVo data, AnalysisContext context) { try { // 数据校验 if (!validateData(data)) { failureList.add(data); failureCount++; failureMsg.append("
").append(failureCount).append("、点检项 ") .append(data.getItemName()).append(" 数据校验失败"); return; } successList.add(data); successCount++; successMsg.append("
").append(successCount).append("、点检项 ") .append(data.getItemName()).append(" 导入成功"); } catch (Exception e) { failureList.add(data); failureCount++; String msg = "
" + failureCount + "、点检项 " + data.getItemName() + " 导入失败:"; failureMsg.append(msg).append(e.getMessage()); log.error("导入点检项目失败:", e); } } @Override public void doAfterAllAnalysed(AnalysisContext context) { log.info("点检项目导入完成,成功:{}条,失败:{}条", successCount, failureCount); } @Override public void onException(Exception exception, AnalysisContext context) throws Exception { log.error("导入异常", exception); if (exception instanceof ExcelDataConvertException) { ExcelDataConvertException e = (ExcelDataConvertException) exception; failureMsg.append("
").append("第").append(e.getRowIndex()).append("行,第").append(e.getColumnIndex()) .append("列解析异常:").append(e.getCause().getMessage()); } else { failureMsg.append(exception.getMessage()); } } @Override public ExcelResult getExcelResult() { return new ExcelResult() { @Override public List getList() { return successList; } @Override public List getErrorList() { return List.of(); } @Override public String getAnalysis() { if (successCount > 0) { successMsg.insert(0, "恭喜您,共 " + successCount + " 条数据导入成功!"); } if (failureCount > 0) { failureMsg.insert(0, "很抱歉,共 " + failureCount + " 条数据导入失败!"); } return successMsg + failureMsg.toString(); } }; } /** * 校验数据 * * @param data 待校验数据 * @return 校验结果 */ private boolean validateData(InspectCheckItemVo data) { if (data.getItemName() == null || data.getItemName().trim().isEmpty()) { return false; } return true; } }