知方号

知方号

Excel导入大量数据,同时校验Excel中数据以及数据库是否存在重复数据

Excel导入大量数据,同时校验Excel中数据以及数据库是否存在重复数据

   1.共享数据,减少数据查询

      业务需求:  导入房屋信息,房屋信息包括项目编号,楼栋编号,楼层号,房屋号

      如果系统中已存在深圳大区,金色家园,1栋,102房屋,Excel中刚好有深圳大区,金色家园,1栋102房屋这条记录,又或者Excel中的信息是这样子的 --深圳大区,金色家园,1栋,102,仅仅是名字不一样了,或者信息不对。。。。

       思维:将数据库中的数据同步到redis,做文件导入的时候,一条一条的和缓存中数据对比,如果大区+楼栋+楼层不存在,可以插入,同理,如果大区+楼栋+楼层存在,数据库有数据,尽量避免修改。如果不存在,则增加到缓存中,否则,将数据加入新的集合返回给客户端。这样就可以保证Excel中的数据插入数据库唯一。

       注意:由于数据库中的数据大部分都是从CRM系统同步过来的,数据信息价值较高,然而,数据导入可能是由公司员工或者地区管理员使用,操作可能不够规范或者不正确。所以,当时我采取的措施是:尽量只能做新增操作,避免做更新操作。

@Componentpublic class AcsPropertyFactory { @Autowired private RedisOperatorManager redisOperatorManager; /* private PropertyExcelVo crmPropertyEntity; public PropertyExcelVo getCrmPropertyEntity() { return crmPropertyEntity; } public void PropertyExcelVo(PropertyExcelVo crmPropertyEntity) { this.crmPropertyEntity = crmPropertyEntity; }*/ /** * 享元模式: * 数据量大,集合太耗费资源,所以使用redis每次进行查询 */ //存数据库中该楼栋下所有的房屋名 // private Map persistDataPool ; //ufrData:key,单元-楼层-房号 // private Map ufrDataPool; /** * 存数据库中该楼栋下所有的房屋名 * * @param property * @return */ public boolean isHavePersistData(PropertyExcelVo property) { if (StringUtils.isNotBlank(property.getUnit()) && StringUtils.isNotBlank(property.getFloor()) && StringUtils.isNotBlank(property.getRoomNumber())) { String keyName = property.getPropertyName(); Object hashObjValue = redisOperatorManager.getHashObjValue(CommonConstants.CRM_PROPETY_NAME, keyName, CommonConstants.CRM_REDIS_DB_INDEX); if (null != hashObjValue) { return true; } else { redisOperatorManager.addHashValue(CommonConstants.CRM_PROPETY_NAME, keyName, property, CommonConstants.CRM_REDIS_DB_INDEX); return false; } } return true; } /** * ufrData:key,单元-楼层-房号 * * @param property * @return */ public boolean isHaveUfrData(PropertyExcelVo property) { if (StringUtils.isNotBlank(property.getUnit()) && StringUtils.isNotBlank(property.getFloor()) && StringUtils.isNotBlank(property.getRoomNumber())) { String keyName = property.getUnit() + "-" + property.getFloor() + "-" + property.getRoomNumber(); Object hashObjValue = redisOperatorManager.getHashObjValue(CommonConstants.CRM_PROPETY, keyName, CommonConstants.CRM_REDIS_DB_INDEX); if (null != hashObjValue) { return true; } else { redisOperatorManager.addHashValue(CommonConstants.CRM_PROPETY, keyName, property, CommonConstants.CRM_REDIS_DB_INDEX); return false; } } return true; }

 2.Excel数据处理

//处理Excel数据 for (PropertyExcelVo propertyExcelVo : propertyExcelVos) { String propertyName = propertyExcelVo.getPropertyName(); String roomNumber = propertyExcelVo.getRoomNumber(); String keyName = propertyExcelVo.getUnit() + "-" + propertyExcelVo.getFloor() + "-" + propertyExcelVo.getRoomNumber(); // String setKeyName = vo.getUnit() + "-" + vo.getFloor() + "-" + vo.getRoomNumber() + "-" + vo.getPropertyName(); //验证长度 if (propertyName.length() > CommonConstants.PROPERTY_NAME_MAX_LENGTH || roomNumber.length() > CommonConstants.ROOM_NUMBER_MAX_LENGTH || propertyExcelVo.getUnit().length() > CommonConstants.UNIT_MAX_LENGTH || propertyExcelVo.getFloor().length() > CommonConstants.FLOOR_MAX_LENGTH) { //fillData(propertyExcelVo, errList); propertyExcelVo.setCheckMsg("字段格式非法"); errList.add(propertyExcelVo); continue; } //判断数据库是否已经存在该房子名 if (acsPropertyFactory.isHavePersistData(propertyExcelVo)) { //该房屋名字已经存在 //fillData(vo, errList); propertyExcelVo.setCheckMsg("房屋名已存在"); errList.add(propertyExcelVo); continue; } //判断数据库是否已经存在 单元-楼层-房间号 if (acsPropertyFactory.isHaveUfrData(propertyExcelVo)) { //该房间已经存在 //fillData(propertyExcelVo, errList); propertyExcelVo.setCheckMsg("单元-楼层-房间号已存在"); errList.add(propertyExcelVo); continue; } else { ufrData.put(keyName.trim(), "1"); } //新增 CrmPropertyEntity crmPropertyEntity = new CrmPropertyEntity(); BeanUtils.copyProperties(propertyExcelVo, crmPropertyEntity); crmPropertyEntity.createId(); crmPropertyEntity.setShortName(""); crmPropertyEntity.setProjectCode(projectCode); crmPropertyEntity.setBuildingCode(buildingCode); crmPropertyEntity.setBuildingName(buildingName); crmPropertyEntity.setPropertyCode(UUID.randomUUID().toString().replace("-", "")); crmPropertyEntity.setActiveFlag(BasePlatEntity.ACTIVE_FLAG_NORMAL); crmPropertyEntity.setDataSource(CrmConstant.DATASOURCE_LOCAL); crmPropertyEntity.setOperateUser(getCurrentUser()); crmPropertyEntity.setOperateDate(DateFormatUtils.format(System.currentTimeMillis(), CommonConstants.DATE_PATTERN_19)); crmPropertyEntity.setRemarks("excel导入"); crmPropertyEntity.setTenantLimit(CommonConstants.PROPERTY_TENANT_LIMIT_DEFAULT); addList.add(crmPropertyEntity); }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。