package com.panzhihua.common.listen; import static java.util.Objects.isNull; import static java.util.Objects.nonNull; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.panzhihua.common.exceptions.ServiceException; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.warehouse.WarehouseDonatesExcelVO; import com.panzhihua.common.service.community.CommunityService; import com.panzhihua.common.utlis.StringUtils; import lombok.extern.slf4j.Slf4j; /** * @title: WarehouseDonatesExcelListen * @projectName: 成都呐喊信息技术有限公司-智慧社区项目 * @description: 爱心义仓物品捐赠导入监听 * @author: hans * @date: 2021/10/09 17:45 */ @Slf4j public class WarehouseDonatesExcelListen extends AnalysisEventListener { private static final int BATCH_COUNT = 3000; private CommunityService communityService; private Long communityId; private Long registerBy; private List list = new ArrayList<>(); public WarehouseDonatesExcelListen(CommunityService communityService, Long communityId, Long registerBy) { this.communityService = communityService; this.communityId = communityId; this.registerBy = registerBy; } @Override public void invoke(WarehouseDonatesExcelVO warehouseDonatesExcelVO, AnalysisContext analysisContext) { Integer quantity = warehouseDonatesExcelVO.getQuantity(); if (!StringUtils.isEmpty(warehouseDonatesExcelVO.getItem()) && nonNull(quantity)) { if (quantity <= 0) { throw new ServiceException("捐赠数量有误"); } if (isNull(warehouseDonatesExcelVO.getIsAnonymous())) { warehouseDonatesExcelVO.setIsAnonymous("否"); } if (StringUtils.isEmpty(warehouseDonatesExcelVO.getName())) { warehouseDonatesExcelVO.setIsAnonymous("是"); } if (isNull(warehouseDonatesExcelVO.getSigningAt())) { Date nowDate = new Date(); warehouseDonatesExcelVO.setSigningAt(nowDate); warehouseDonatesExcelVO.setRegisterAt(nowDate); } else { warehouseDonatesExcelVO.setRegisterAt(warehouseDonatesExcelVO.getSigningAt()); } warehouseDonatesExcelVO.setCommunityId(this.communityId); warehouseDonatesExcelVO.setStatus(2); warehouseDonatesExcelVO.setSurplusQuantity(quantity); warehouseDonatesExcelVO.setRegisterBy(this.registerBy); warehouseDonatesExcelVO.setSigningBy(this.registerBy); list.add(warehouseDonatesExcelVO); // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM if (list.size() >= BATCH_COUNT) { doAfterAllAnalysed(analysisContext); list.clear(); } } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { R r = this.communityService.batchImportWarehouseDonates(list); if (!R.isOk(r)) { throw new ServiceException(r.getMsg()); } } }