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<WarehouseDonatesExcelVO> {
|
|
private static final int BATCH_COUNT = 3000;
|
private CommunityService communityService;
|
private Long communityId;
|
private Long registerBy;
|
private List<WarehouseDonatesExcelVO> 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());
|
}
|
}
|
}
|