yangys
2024-03-27 44c06e730b392ca2160a843cf54e221156a2b1a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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);
        }
    }
}