Importación SpringBoot easyExcel

Controlador
@Autowired 
ErpStorehouseDao erpStorehouseDao 

/** 
 * 导入
 * @return 
 */ 
@PostMapping("upload") 
@ResponseBody 
public String upload(archivo MultipartFile) arroja IOException { 
    EasyExcel.read(file.getInputStream(), ErpStorehouseEntity.class, new Listener( erpStorehouseDao)).hoja().doRead(); 
    devolver "éxito"; 
}

 

clase de entidad

 

@Data 
public class ErpStorehouseEntity { 

    @ExcelProperty(value = "nombre del almacén", índice = 0) 
    private String storehouseName; 

    @ExcelProperty(value = "stock", index = 1) 
    @ApiModelProperty(value = "stock") 
    private Integer storehouseNumber; 

    @ExcelProperty(valor = "vida útil", índice = 2) 
    @ApiModelProperty(valor = "vida útil") 
    privado Fecha fecha de caducidad; 

    @ExcelProperty(valor = "categoría", índice = 4) 
    @ApiModelProperty(valor = "categoría") 
    @TableField(existir = falso) 
    private String NombreClaseDeProductos; 

}

clase de implementación de importación

/** 
 * @author liangsheng 
 * @version 1.0 
 * @date 2020/12/23 10:56 
 * @Description TODO 
 */ 
@Component 
public class Listener extends AnalysisEventListener<ErpStorehouseEntity> { 


    @Autowired 
    private ErpGoodsClassDao goodsClassDao; 

    public static List ener listener ; 

    @PostConstruct 
    public void init() { 
    listener 
        = this; 
    } 

    private static final Logger LOGGER = 
     LoggerFactory.getLogger 
            (zhihuichufang.modules.storehouse.service.impl.Listener.class); 
     */
    private static final int BATCH_COUNT = 5; 
    @Override
    List<ErpStorehouseEntity> list = new ArrayList<ErpStorehouseEntity>(); 

    /** 
     * Supongamos que se trata de un DAO, por supuesto, también puede ser un servicio con lógica empresarial. Por supuesto, es inútil si no almacena este objeto. 
     */ 
    private ErpStorehouseDao erpStorehouseDao; 


    public Listener(ErpStorehouseDao erpStorehouseDao) { 
        this.erpStorehouseDao = erpStorehouseDao; } 
    / 
    ** 
     * Esto se llamará para cada análisis de datos 
     * 
     * @param erpStorehouseImport 
     * valor de una fila. Es lo mismo que {@ link AnalysisContext #readRowHolder()} 
     * @param analysisContext 
     */
    public void invocar(ErpStorehouseEntity erpStorehouseImport, AnalysisContext analysisContext) { 
        System.out.println("Se llama al método de invocación"); 
        LOGGER.info("Analizado en un dato: {}", JSON.toJSONString(erpStorehouseImport)); 
        list .add (erpStorehouseImport); 
        // Cuando se alcanza BATCH_COUNT, es necesario almacenar la base de datos una vez para evitar que decenas de miles de datos se almacenen en la memoria, lo cual es fácil de OOM 
        si (list.size() >= BATCH_COUNT) { 
            saveData(); 
            // El almacenamiento se completa y se limpia la lista list 
            .clear(); 
        } 

    } 
    /** 
     * Se llamará a todos los análisis de datos 
     * 
     * @param context 
     */ 
    @Override 
    public void doAfterAllAnalysed(AnalysisContext context ) { 
        System.out.println("Se llama al método doAfterAllAnalysed"); 
        // Guarde también los datos aquí para asegurarse de que los últimos datos restantes también se almacenen en la base de datos 
        saveData( ); 
        LOGGER.info("¡Se completó el análisis de todos los datos!"); 

    }

    /** 
     * Además de la base de datos de almacenamiento 
     */ 
    private void saveData() { 
        LOGGER.info("{} datos, comience a almacenar la base de datos!", list.size()); 
        if (null!=list&&list.size()> 0) { 
            list.forEach(data->{ 
                ErpgoodSclassEntity ERPGOODSSSSENTITY = New ErpgoodSclassEntity (); 
                ERPGOODSClassEntity (data.getgoodscscscsc LassName ()); 
                ErpgoodSclassEntity ErpgoodSclassEntity = Listener.goodSclassDao.SelectOne (ERPGOODSClassEntity);
                data.setStorehouseId(String.valueOf(UUID.randomUUID()+String.valueOf(System.currentTimeMillis()))); 
                data.setCreateTime(nueva Fecha()); 
                if (null!=erpGoodsClassEntitydata){ 
                    data.setGoodsClassId(erpGoodsClassEntitydata.getGoodsClassId()); 
                } 
                erpStorehouseDao.insert(datos); 
            }); 
        } 
        LOGGER.info("存储数据库成功!"); 

    } 
}

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_30667039/article/details/111576596
Recomendado
Clasificación