mitao
2024-04-09 ec76c5defdd8018ce4efcc8795508498a84de4b7
ruoyi-admin/src/main/java/com/ruoyi/web/controller/lisenter/DeptImportListener.java
@@ -13,9 +13,8 @@
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
@@ -23,6 +22,7 @@
 */
@Slf4j
public class DeptImportListener implements ReadListener<DeptExcel> {
    /**
     * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
     */
@@ -46,22 +46,35 @@
    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
@@ -78,15 +91,17 @@
        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());
    }