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<InspectCheckItemVo> implements ExcelListener<InspectCheckItemVo> {
|
|
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<InspectCheckItemVo> successList = new ArrayList<>();
|
|
/**
|
* 导入失败数据列表
|
*/
|
private List<InspectCheckItemVo> 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("<br/>").append(failureCount).append("、点检项 ")
|
.append(data.getItemName()).append(" 数据校验失败");
|
return;
|
}
|
|
|
successList.add(data);
|
successCount++;
|
successMsg.append("<br/>").append(successCount).append("、点检项 ")
|
.append(data.getItemName()).append(" 导入成功");
|
|
} catch (Exception e) {
|
failureList.add(data);
|
failureCount++;
|
String msg = "<br/>" + 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("<br/>").append("第").append(e.getRowIndex()).append("行,第").append(e.getColumnIndex())
|
.append("列解析异常:").append(e.getCause().getMessage());
|
} else {
|
failureMsg.append(exception.getMessage());
|
}
|
}
|
|
@Override
|
public ExcelResult<InspectCheckItemVo> getExcelResult() {
|
return new ExcelResult<InspectCheckItemVo>() {
|
@Override
|
public List<InspectCheckItemVo> getList() {
|
return successList;
|
}
|
|
@Override
|
public List<String> 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;
|
}
|
}
|