diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java index dc3fb232bc..53c50c5c2e 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/redis/RedisKeys.java @@ -640,4 +640,37 @@ public class RedisKeys { public static String getHouseInfoCacheKey(String houseId,String customerId){ return rootPrefix.concat("house:").concat(customerId).concat(":").concat(houseId); } + + /** + * 居民导入-缓存目录key + * @param importTag + * @return + */ + public static String icResiImportBaseKey(String importTag) { + return rootPrefix.concat("resi:").concat("import:").concat(importTag); + } + + /** + * 居民导入-数据分类的key + * add:新增居民 + * category:类别变更 + * transfer:调动 + * @param importTag + * @param type + * @return + */ + public static String icResiImportTypeKey(String importTag, String type) { + return icResiImportBaseKey(importTag).concat(":").concat(type); + } + + /** + * 居民导入-详细信息key + * @param importTag + * @param type + * @param resiId + * @return + */ + public static String icResiImportResiCategoryKey(String importTag, String type, String resiId) { + return icResiImportTypeKey(importTag, type).concat(":").concat(resiId); + } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java index 436be52b29..1526038d21 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportCategoryData.java @@ -14,6 +14,7 @@ import java.util.Map; @Data public class ResiImportCategoryData { + private String resiId; private String agencyId; private String gridId; private String villageId; @@ -30,7 +31,8 @@ public class ResiImportCategoryData { public ResiImportCategoryData() { } - public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId, Map categories) { + public ResiImportCategoryData(String resiId, String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId, Map categories) { + this.resiId = resiId; this.agencyId = agencyId; this.gridId = gridId; this.villageId = villageId; @@ -39,13 +41,4 @@ public class ResiImportCategoryData { this.homeId = homeId; this.categories = categories; } - - public ResiImportCategoryData(String agencyId, String gridId, String villageId, String buildId, String unitId, String homeId) { - this.agencyId = agencyId; - this.gridId = gridId; - this.villageId = villageId; - this.buildId = buildId; - this.unitId = unitId; - this.homeId = homeId; - } } diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java index 6203c917a9..29470e875c 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/bean/ResiImportResiCategoryChangedCache.java @@ -11,11 +11,16 @@ import java.util.Map; @Data public class ResiImportResiCategoryChangedCache { + /** + * 导入的tag,用来标记唯一一次导入操作。 + */ + private String importTag; + /** * 新增居民 * Map> */ - private Map newResis = new HashMap<>(); +// private Map newResis = new HashMap<>(); /** * 调动的居民 diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/DynamicEasyExcelListener.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiImportDynamicExcelListener.java similarity index 91% rename from epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/DynamicEasyExcelListener.java rename to epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiImportDynamicExcelListener.java index bf65c3bbf2..427e70f0a3 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/DynamicEasyExcelListener.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/excel/handler/IcResiImportDynamicExcelListener.java @@ -17,7 +17,7 @@ import java.util.stream.Collectors; * 创建一个监听器 */ @Slf4j -public class DynamicEasyExcelListener extends AnalysisEventListener> { +public class IcResiImportDynamicExcelListener extends AnalysisEventListener> { /** * 一次性导入的条数 @@ -89,10 +89,10 @@ public class DynamicEasyExcelListener extends AnalysisEventListener dataList = new HashMap<>(); - public DynamicEasyExcelListener(IcResiUserImportServiceImpl icResiUserImportService, String customerId, - String currentUserId, String currUserAgencyId, - String currUserAgencyPids, Boolean isPrimary, String tableName, - List formItemList, Integer headRowNumber) { + public IcResiImportDynamicExcelListener(IcResiUserImportServiceImpl icResiUserImportService, String customerId, + String currentUserId, String currUserAgencyId, + String currUserAgencyPids, Boolean isPrimary, String tableName, + List formItemList, Integer headRowNumber) { this.customerId = customerId; this.icResiUserImportService = icResiUserImportService; diff --git a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java index d236c92004..23248b0c83 100644 --- a/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java +++ b/epmet-user/epmet-user-server/src/main/java/com/epmet/service/impl/IcResiUserImportServiceImpl.java @@ -3,8 +3,10 @@ package com.epmet.service.impl; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.annotation.Excel; import cn.afterturn.easypoi.excel.entity.ExportParams; +import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcelFactory; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.epmet.bean.ResiImportCategoryData; import com.epmet.bean.ResiImportResiCategoryChangedCache; import com.epmet.bean.ResiImportChangedData; @@ -16,8 +18,11 @@ import com.epmet.commons.tools.exception.EpmetErrorCode; import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.feign.ResultDataResolver; +import com.epmet.commons.tools.redis.RedisKeys; +import com.epmet.commons.tools.redis.RedisUtils; import com.epmet.commons.tools.redis.common.CustomerStaffRedis; import com.epmet.commons.tools.security.user.LoginUserUtil; +import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; import com.epmet.dao.IcResiUserDao; import com.epmet.dao.IcUserChangeDetailedDao; @@ -31,7 +36,7 @@ import com.epmet.entity.IcUserChangeDetailedEntity; import com.epmet.entity.IcUserChangeRecordEntity; import com.epmet.entity.IcUserTransferRecordEntity; import com.epmet.enums.IcResiUserTableEnum; -import com.epmet.excel.handler.DynamicEasyExcelListener; +import com.epmet.excel.handler.IcResiImportDynamicExcelListener; import com.epmet.feign.EpmetAdminOpenFeignClient; import com.epmet.feign.EpmetUserOpenFeignClient; import com.epmet.feign.GovOrgOpenFeignClient; @@ -118,6 +123,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res @Autowired private UserService userService; + @Autowired + private RedisUtils redisUtils; + /** * 字表中不需要的列 @@ -253,12 +261,12 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res } // 执行人员类别变更记录 - Map newResis = newlyOrChangedResi.get().getNewResis(); +// Map newResis = newlyOrChangedResi.get().getNewResis(); Map categoryChangedResis = newlyOrChangedResi.get().getCategoryChangedResis(); Map transferedResis = newlyOrChangedResi.get().getTransferedResis(); //保存调动或者变更记录 - saveNewResiCategoryRecord(newResis); + saveNewResiCategoryRecord(); saveResiCategoryChangedRecord(categoryChangedResis); saveTransferedResiRecord(transferedResis); @@ -268,6 +276,16 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res log.error("【导入IC居民附加信息】下载导入结果信息失败:{}", ExceptionUtils.getErrorStackTrace(e)); } } finally { + // 清空rediskey + try { + String importTag = newlyOrChangedResi.get().getImportTag(); + redisUtils.deleteByPattern(RedisKeys.icResiImportBaseKey(importTag).concat("*")); + } catch (Exception e) { + String errorMsg = ExceptionUtils.getErrorStackTrace(e); + log.error("【导入IC居民附加信息】清空redis 类别缓存出错:{}", errorMsg); + } + + // 清空线程变量 skipedRows.remove(); errorRows.remove(); newlyOrChangedResi.remove(); @@ -280,6 +298,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res * threadLocal初始化 */ private void initImportThreadLocal(String customerId) { + // 生成importTag,用于标记唯一一次导入操作,导入完成之后,用来删除redis里面临时的key + String operatorId = loginUserUtil.getLoginUserId(); + String importTag = operatorId + System.currentTimeMillis(); + // 跳过的,不导入的行 Map> skipedRowsMap = new LinkedHashMap<>(); for (IcResiUserTableEnum e : IcResiUserTableEnum.values()) { @@ -296,6 +318,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res // 居民类别信息 ResiImportResiCategoryChangedCache c = new ResiImportResiCategoryChangedCache(); + c.setImportTag(importTag); newlyOrChangedResi.set(c); List resiCategoryItems = getResultDataOrThrowsException(operCustomizeOpenFeignClient.listResiCategoryItems(customerId), @@ -323,7 +346,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res private void importIcResiBaseInfoFromExcel(List formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currUserAgencyPids, String currentUserId, String tableName, String customerId) { - DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(this, customerId, currentUserId, currUserAgencyId, currUserAgencyPids, + IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, currUserAgencyPids, true, tableName, formItemList, headRowNumber); EasyExcel.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); } @@ -343,7 +366,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res private void importIcResiExtraInfoFromExcel(List formItemList, String excelPathName, int sheetNo, int headRowNumber, String currUserAgencyId, String currentUserId, String targetTableName, String customerId) { - DynamicEasyExcelListener readListener = new DynamicEasyExcelListener(this, customerId, currentUserId, currUserAgencyId, null, + IcResiImportDynamicExcelListener readListener = new IcResiImportDynamicExcelListener(this, customerId, currentUserId, currUserAgencyId, null, false, targetTableName, formItemList, headRowNumber); EasyExcelFactory.read(new File(excelPathName)).registerReadListener(readListener).headRowNumber(headRowNumber).sheet(sheetNo).doRead(); } @@ -415,8 +438,10 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res } } else { // 新增居民 + String resiId = IdWorker.getIdStr(); + columnAndValues.put("CREATED_BY", currentUserId); - columnAndValues.put("ID", UUID.randomUUID().toString().replace("-", "")); + columnAndValues.put("ID", resiId); icResiUserDao.add(tableName, columnAndValues); // 过滤出本居民含有哪些类别 @@ -425,14 +450,26 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res .filter((categoryColumnName) -> "1".equals(columnAndValues.get(categoryColumnName))) .collect(Collectors.toMap((k) -> k, (k) -> columnAndValues.get(k))); - newlyOrChangedResi.get().getNewResis().put(columnAndValues.get("ID"), - new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"), - columnAndValues.get("GRID_ID"), - columnAndValues.get("VILLAGE_ID"), - columnAndValues.get("BUILD_ID"), - columnAndValues.get("UNIT_ID"), - columnAndValues.get("HOME_ID"), - resiCategories)); +// newlyOrChangedResi.get().getNewResis().put(resiId, +// new ResiImportCategoryData(columnAndValues.get("AGENCY_ID"), +// columnAndValues.get("GRID_ID"), +// columnAndValues.get("VILLAGE_ID"), +// columnAndValues.get("BUILD_ID"), +// columnAndValues.get("UNIT_ID"), +// columnAndValues.get("HOME_ID"), +// resiCategories)); + + ResiImportCategoryData categoryData = new ResiImportCategoryData(resiId, + columnAndValues.get("AGENCY_ID"), + columnAndValues.get("GRID_ID"), + columnAndValues.get("VILLAGE_ID"), + columnAndValues.get("BUILD_ID"), + columnAndValues.get("UNIT_ID"), + columnAndValues.get("HOME_ID"), + resiCategories); + + redisUtils.hMSet(RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", resiId), BeanUtil.beanToMap(categoryData)); + } } catch (Exception e) { @@ -1040,6 +1077,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res } ResiImportCategoryData oldOne = new ResiImportCategoryData( + existingResiMap.get("ID"), existingResiMap.get("AGENCY_ID"), existingResiMap.get("GRID_ID"), existingResiMap.get("VILLAGE_ID"), @@ -1049,7 +1087,8 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res existingResiCategories); ResiImportCategoryData newOne = new ResiImportCategoryData( - existingResiMap.get("AGENCY_ID"), + newResiMap.get("ID"), + newResiMap.get("AGENCY_ID"), newResiMap.get("GRID_ID"), newResiMap.get("VILLAGE_ID"), newResiMap.get("BUILD_ID"), @@ -1100,6 +1139,7 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res } ResiImportCategoryData oldOne = new ResiImportCategoryData( + existingResiMap.get("ID"), existingResiMap.get("AGENCY_ID"), existingResiMap.get("GRID_ID"), existingResiMap.get("VILLAGE_ID"), @@ -1108,7 +1148,9 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res existingResiMap.get("HOME_ID"), oldCategories); - ResiImportCategoryData newOne = new ResiImportCategoryData(existingResiMap.get("AGENCY_ID"), + ResiImportCategoryData newOne = new ResiImportCategoryData( + newResiMap.get("ID"), + newResiMap.get("AGENCY_ID"), newResiMap.get("GRID_ID"), newResiMap.get("VILLAGE_ID"), newResiMap.get("BUILD_ID"), @@ -1127,14 +1169,19 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res private void saveSubTableInfoToCategoryChangedResiCache(String icResiId, String columnName, Map resiInfoMap) { ResiImportResiCategoryChangedCache cc = newlyOrChangedResi.get(); - Map newResis = cc.getNewResis(); +// Map newResis = cc.getNewResis(); Map categoryChangedResis = cc.getCategoryChangedResis(); Map transferedResis = cc.getTransferedResis(); - ResiImportCategoryData newResi = newResis.get(icResiId); - if (newResi != null) { +// ResiImportCategoryData newResi = newResis.get(icResiId); + + String userCateRedisKey = RedisKeys.icResiImportResiCategoryKey(newlyOrChangedResi.get().getImportTag(), "add", icResiId); + Map < String, Object > addUserMap = redisUtils.hGetAll(userCateRedisKey); + if (addUserMap != null) { //说明是新增居民 - newResi.getCategories().put(columnName, "1"); + ResiImportCategoryData newResiCateData = ConvertUtils.mapToEntity(addUserMap, ResiImportCategoryData.class); + newResiCateData.getCategories().put(columnName, "1"); + redisUtils.hMSet(userCateRedisKey, BeanUtil.beanToMap(newResiCateData)); return; } @@ -1286,35 +1333,35 @@ public class IcResiUserImportServiceImpl implements IcResiUserImportService, Res /** * 保存新增居民类别记录 - * @param newResis */ - public void saveNewResiCategoryRecord(Map newResis) { + public void saveNewResiCategoryRecord() { Date now = new Date(); + Set newResiKeys = redisUtils.keys(RedisKeys.icResiImportTypeKey(newlyOrChangedResi.get().getImportTag(), "add").concat("*")); + CustomerStaffInfoCacheResult operator = CustomerStaffRedis.getStaffInfo(loginUserUtil.getLoginUserCustomerId(), loginUserUtil.getLoginUserId()); - for (Map.Entry resi : newResis.entrySet()) { - String resiId = resi.getKey(); - ResiImportCategoryData data = resi.getValue(); + for (String resiKey : newResiKeys) { + Map newResiInfoMap = redisUtils.hGetAll(resiKey); + ResiImportCategoryData newResiInfoObj = ConvertUtils.mapToEntity(newResiInfoMap, ResiImportCategoryData.class); - IcResiUserEntity resiInfo = icResiUserDao.selectById(resiId); + IcResiUserEntity resiInfo = icResiUserDao.selectById(newResiInfoObj.getResiId()); // 插入changeRecord - IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), resiId, resiInfo.getName(), null, + IcUserChangeRecordEntity changeRecord = fillChangeRecord(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), resiInfo.getName(), null, loginUserUtil.getLoginUserId(), operator.getRealName(), "-", "-", "add", "新增", "", now); icUserChangeRecordDao.insert(changeRecord); // 插入changeDetail - for (Map.Entry column : data.getCategories().entrySet()) { - IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), resiId, changeRecord.getId(), data.getAgencyId(), - data.getGridId(), data.getVillageId(), data.getBuildId(), data.getUnitId(), - data.getHomeId(), "add", "新增", column.getKey(), 1, resiInfo.getPids()); + for (Map.Entry column : newResiInfoObj.getCategories().entrySet()) { + IcUserChangeDetailedEntity changedetail = fillChangeDetail(loginUserUtil.getLoginUserCustomerId(), newResiInfoObj.getResiId(), changeRecord.getId(), newResiInfoObj.getAgencyId(), + newResiInfoObj.getGridId(), newResiInfoObj.getVillageId(), newResiInfoObj.getBuildId(), newResiInfoObj.getUnitId(), + newResiInfoObj.getHomeId(), "add", "新增", column.getKey(), 1, resiInfo.getPids()); icUserChangeDetailedDao.insert(changedetail); } } - } /**