| | |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import com.ruoyi.web.controller.excel.DeptExcel; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.util.List; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * @author mitao |
| | |
| | | */ |
| | | @Slf4j |
| | | public class DeptImportListener implements ReadListener<DeptExcel> { |
| | | |
| | | /** |
| | | * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收 |
| | | */ |
| | |
| | | public void invoke(DeptExcel data, AnalysisContext context) { |
| | | log.info("解析到一条数据:{}", JSON.toJSONString(data)); |
| | | if (StringUtils.isEmpty(data.getAreaName()) || StringUtils.isEmpty(data.getAreaCode()) || |
| | | StringUtils.isEmpty(data.getAreaLevel()) || StringUtils.isNull(data.getCountyFlag()) || |
| | | StringUtils.isEmpty(data.getPersonInCharge()) || StringUtils.isEmpty(data.getUserName()) || |
| | | StringUtils.isEmpty(data.getPhoneNumber()) || StringUtils.isEmpty(data.getPassword())) { |
| | | throw new ServiceException(String.format("数据校验失败,请检查第%d行内容填写是否完整", cachedDataList.size()+1)); |
| | | StringUtils.isEmpty(data.getAreaLevel()) || StringUtils.isNull(data.getCountyFlag()) |
| | | || |
| | | StringUtils.isEmpty(data.getPersonInCharge()) || StringUtils.isEmpty( |
| | | data.getUserName()) || |
| | | StringUtils.isEmpty(data.getPhoneNumber()) || StringUtils.isEmpty( |
| | | data.getPassword())) { |
| | | throw new ServiceException(String.format("数据校验失败,请检查第%d行内容填写是否完整", |
| | | cachedDataList.size() + 1)); |
| | | } |
| | | boolean flag = sysUserService.lambdaQuery().eq(SysUser::getUserType,UserTypeEnum.PLATFORM.getCode()).eq(SysUser::getUserName, data.getUserName()).oneOpt().isPresent(); |
| | | boolean flag = sysUserService.lambdaQuery() |
| | | .eq(SysUser::getUserType, UserTypeEnum.PLATFORM.getCode()) |
| | | .eq(SysUser::getUserName, data.getUserName()).oneOpt().isPresent(); |
| | | if (flag) { |
| | | throw new ServiceException(String.format("数据校验失败,第%d行的登录账号:%s已存在", cachedDataList.size()+1,data.getUserName())); |
| | | throw new ServiceException(String.format("数据校验失败,第%d行的登录账号:%s已存在", |
| | | cachedDataList.size() + 1, data.getUserName())); |
| | | } |
| | | flag = cachedDataList.stream().anyMatch(item -> item.getAreaCode().equals(data.getAreaCode())); |
| | | flag = cachedDataList.stream() |
| | | .anyMatch(item -> item.getAreaCode().equals(data.getAreaCode())); |
| | | if (flag) { |
| | | throw new ServiceException(String.format("数据校验失败,第%d行区划代码%s重复", cachedDataList.size()+1,data.getAreaCode())); |
| | | throw new ServiceException( |
| | | String.format("数据校验失败,第%d行区划代码%s重复", cachedDataList.size() + 1, |
| | | data.getAreaCode())); |
| | | } |
| | | flag = cachedDataList.stream().anyMatch(item -> item.getUserName().equals(data.getUserName())); |
| | | flag = cachedDataList.stream() |
| | | .anyMatch(item -> item.getUserName().equals(data.getUserName())); |
| | | if (flag) { |
| | | throw new ServiceException(String.format("数据校验失败,第%d行登录账号%s重复", cachedDataList.size()+1,data.getAreaCode())); |
| | | throw new ServiceException( |
| | | String.format("数据校验失败,第%d行登录账号%s重复", cachedDataList.size() + 1, |
| | | data.getAreaCode())); |
| | | } |
| | | cachedDataList.add(data); |
| | | // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM |
| | |
| | | log.info("所有数据解析完成!"); |
| | | saveData(); |
| | | } |
| | | |
| | | private void saveData() { |
| | | log.info("{}条数据,开始存储数据库!", cachedDataList.size()); |
| | | List<SysUser> sysUsers = BeanUtils.copyList(cachedDataList, SysUser.class); |
| | | sysUsers.forEach(item->{ |
| | | sysUsers.forEach(item -> { |
| | | item.setPassword(SecurityUtils.encryptPassword(item.getPassword())); |
| | | item.setNickName(item.getAreaName()); |
| | | item.setUserType("2"); |
| | | item.setUserType(UserTypeEnum.DEPARTMENT); |
| | | }); |
| | | sysUserService.remove(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode())); |
| | | sysUserService.remove(Wrappers.<SysUser>lambdaQuery() |
| | | .eq(SysUser::getUserType, UserTypeEnum.DEPARTMENT.getCode())); |
| | | sysUserService.saveBatch(sysUsers); |
| | | log.info("{}条数据,导入成功!", cachedDataList.size()); |
| | | } |