package com.panzhihua.common.listen; 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.alibaba.fastjson.JSONObject; import com.panzhihua.common.exceptions.ServiceException; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComMngVillageServeExcelVO; import com.panzhihua.common.model.vos.user.CommunityUserInfoVO; import com.panzhihua.common.service.community.CommunityService; import com.panzhihua.common.service.user.UserService; import com.panzhihua.common.utlis.Snowflake; import lombok.extern.slf4j.Slf4j; /** * @description: 实有房屋导入监听 * @author: llming */ @Slf4j public class ComMngVillageServeExcelListen extends AnalysisEventListener { private static final int BATCH_COUNT = 100; private CommunityService communityService; private LoginUserInfoVO loginUserInfo; private UserService userService; private List list = new ArrayList<>(); public ComMngVillageServeExcelListen(CommunityService communityService, LoginUserInfoVO loginUserInfo, UserService userService) { this.communityService = communityService; this.loginUserInfo = loginUserInfo; this.userService=userService; } @Override public void invoke(ComMngVillageServeExcelVO comMngVillageServeExcelVO, AnalysisContext analysisContext) { try { Integer.parseInt(comMngVillageServeExcelVO.getHouseNum()); } catch (Exception e){ throw new ServiceException("门牌号只能为纯数字"); } R r1=userService.detailUser(loginUserInfo.getUserId()); if(R.isOk(r1)){ LoginUserInfoVO loginUserInfoVO=JSONObject.parseObject(JSONObject.toJSONString(r1.getData()), LoginUserInfoVO.class); comMngVillageServeExcelVO.setAddress("四川省-攀枝花市-"+loginUserInfoVO.getAreaName()+comMngVillageServeExcelVO.getAlley()+"+"+comMngVillageServeExcelVO.getHouseNum()); } list.add(comMngVillageServeExcelVO); // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM if (list.size() >= BATCH_COUNT) { log.info("excel导入数据【{}】", JSONObject.toJSONString(list)); list.forEach(villageServe -> { villageServe.setVillageId(Snowflake.getId()); villageServe.setCreateAt(new Date()); }); R r = communityService.listSaveVillageServeExcelVO(list, loginUserInfo.getCommunityId()); if (!R.isOk(r)) { throw new ServiceException(r.getMsg()); } // 清空list list.clear(); } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { log.info("excel导入数据【{}】", JSONObject.toJSONString(list)); // 确保最后遗留的数据保存在数据库中 list.forEach(villageServe -> { villageServe.setVillageId(Snowflake.getId()); villageServe.setCreateAt(new Date()); }); R r = this.communityService.listSaveVillageServeExcelVO(list, loginUserInfo.getCommunityId()); if (!R.isOk(r)) { throw new ServiceException(r.getMsg()); } } }