package com.qianwen.core.excel.extend.aop;
|
|
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.converters.Converter;
|
import com.alibaba.excel.read.builder.ExcelReaderBuilder;
|
import com.alibaba.excel.read.listener.ReadListener;
|
import java.io.InputStream;
|
import java.util.List;
|
import javax.servlet.ServletInputStream;
|
import javax.servlet.http.HttpServletRequest;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import com.qianwen.core.excel.extend.annotation.RequestExcel;
|
import com.qianwen.core.excel.extend.converters.LocalDateStringConverter;
|
import com.qianwen.core.excel.extend.converters.LocalDateTimeStringConverter;
|
import com.qianwen.core.excel.extend.listener.ListAnalysisEventListener;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.core.MethodParameter;
|
import org.springframework.core.ResolvableType;
|
import org.springframework.ui.ModelMap;
|
import org.springframework.validation.BindingResult;
|
import org.springframework.web.bind.WebDataBinder;
|
import org.springframework.web.bind.support.WebDataBinderFactory;
|
import org.springframework.web.context.request.NativeWebRequest;
|
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
|
import org.springframework.web.method.support.ModelAndViewContainer;
|
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartRequest;
|
|
/* loaded from: blade-starter-excel-9.3.0.0-SNAPSHOT.jar:org/springblade/core/excel/extend/aop/RequestExcelArgumentResolver.class */
|
public class RequestExcelArgumentResolver implements HandlerMethodArgumentResolver {
|
private static final Logger log = LoggerFactory.getLogger(RequestExcelArgumentResolver.class);
|
|
public boolean supportsParameter(MethodParameter parameter) {
|
return parameter.hasParameterAnnotation(RequestExcel.class);
|
}
|
|
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer modelAndViewContainer,
|
NativeWebRequest webRequest, WebDataBinderFactory webDataBinderFactory) {
|
try {
|
// ServletInputStream servletInputStream;
|
Class<?> parameterType = parameter.getParameterType();
|
if (!parameterType.isAssignableFrom(List.class))
|
throw new IllegalArgumentException(
|
"Excel upload request resolver error, @RequestExcel parameter is not List " + parameterType);
|
RequestExcel requestExcel = (RequestExcel) parameter.getParameterAnnotation(RequestExcel.class);
|
assert requestExcel != null;
|
Class<? extends ListAnalysisEventListener<?>> readListenerClass = requestExcel.readListener();
|
ListAnalysisEventListener<?> readListener = (ListAnalysisEventListener) BeanUtils
|
.instantiateClass(readListenerClass);
|
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest(HttpServletRequest.class);
|
assert request != null;
|
InputStream inputStream;
|
if (request instanceof MultipartRequest) {
|
MultipartFile file = ((MultipartRequest) request).getFile(requestExcel.fileName());
|
assert file != null;
|
inputStream = file.getInputStream();
|
} else {
|
inputStream = request.getInputStream();
|
}
|
Class<?> excelModelClass = ResolvableType.forMethodParameter(parameter).getGeneric(new int[] { 0 })
|
.resolve();
|
((ExcelReaderBuilder) ((ExcelReaderBuilder) EasyExcel
|
.read(inputStream, excelModelClass, (ReadListener) readListener)
|
.registerConverter((Converter) LocalDateStringConverter.INSTANCE))
|
.registerConverter((Converter) LocalDateTimeStringConverter.INSTANCE))
|
.ignoreEmptyRow(Boolean.valueOf(requestExcel.ignoreEmptyRow())).sheet().doRead();
|
WebDataBinder dataBinder = webDataBinderFactory.createBinder(webRequest, readListener.getErrors(), "excel");
|
ModelMap model = modelAndViewContainer.getModel();
|
model.put(BindingResult.MODEL_KEY_PREFIX + "excel", dataBinder.getBindingResult());
|
return readListener.getList();
|
} catch (Throwable $ex) {
|
throw new RuntimeException($ex);
|
}
|
}
|
}
|