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> 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); } } }