linwe
2024-06-03 b4939711ffa1dba2018b4ee358e3a79107756c58
住户导入切换多线程
1 files modified
106 ■■■■ changed files
src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java 106 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/house/service/impl/HouseholdServiceImpl.java
@@ -62,6 +62,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
/**
@@ -342,14 +343,69 @@
        int importNum = 0;
        int updateNum = 0;
        int errorNum = 0;
        // 创建一个固定大小的线程池
        int numberOfThreads = Runtime.getRuntime().availableProcessors(); // 使用可用处理器数量作为线程数
        ExecutorService executorService = Executors.newFixedThreadPool(numberOfThreads);
        // 创建Future列表来保存每个任务的结果
        List<Future<String>> futures = new ArrayList<>();
        for (ImportHouseholdExcel houseHoldExcel : data) {
            Callable<String> task = () -> importHouseHold(houseHoldExcel,houseService,isCovered,isTenant);
            futures.add(executorService.submit(task));
        }
        // 收集并打印结果
        for (Future<String> future : futures) {
            try {
                String result = future.get();
                switch (result){
                    case "1":
                        importNum++;
                        break;
                    case "2":
                        updateNum++;
                        break;
                    case "3":
                        errorNum++;
                        break;
                }
                // 获取并打印每个任务的结果
            } catch (InterruptedException | ExecutionException e) {
                e.printStackTrace();
            }
        }
        // 关闭线程池
        executorService.shutdown();
        try {
            if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
                executorService.shutdownNow();
            }
        } catch (InterruptedException e) {
            executorService.shutdownNow();
        }
        StringBuilder builder = new StringBuilder("导入完成!");
        builder.append("其中本次表格共有 ").append(totalNum).append(" 条数据,")
            .append("成功导入 ").append(importNum).append(" 条数据。");
        if (updateNum > 0) {
            builder.append("其中有 ").append(updateNum).append(" 条数据已存在。");
        }
        if (errorNum > 0) {
            builder.append("共有 ").append(errorNum).append(" 条数据由于无姓名或门牌地址编码信息未导入!");
        }
        return builder.toString();
    }
    public String importHouseHold(ImportHouseholdExcel houseHoldExcel, IHouseService houseService, Boolean isCovered,String isTenant) {
            HouseholdEntity householdEntity = Objects.requireNonNull(BeanUtil.copy(houseHoldExcel, HouseholdEntity.class));
            // 判断姓名,手机号
            if (Strings.isBlank(householdEntity.getName())
                || Strings.isBlank(householdEntity.getHouseCode())
            ) {
                errorNum++;
                continue;
            // errorNum++;
            // continue;
            return "3";
            }
            // 查询库中是否已存在
            QueryWrapper<HouseholdEntity> wrapper = new QueryWrapper<>();
@@ -374,21 +430,20 @@
                    householdEntity.setHousingRentalId(houseRentalEntity.getId());
                } else {
                    // 新建出租屋
                    HouseRentalEntity houseRentalEntity1 = new HouseRentalEntity();
                    houseRentalEntity1.setHouseCode(householdEntity.getHouseCode());
                    houseRentalEntity1.setHouseStatus(1);
                    houseRentalEntity1.setAuditStatus(0);
                    houseRentalEntity1.setRentalUse(4);
                    houseRentalEntity1.setTenantRelationship(1);
                    houseRentalEntity1.setRentalTime(new Date());
                    houseRentalEntity1.setDueTime(new Date());
                    houseRentalEntity1.setTerminationTime(new Date());
                    iHouseRentalService.save(houseRentalEntity1);
                    householdEntity.setHousingRentalId(houseRentalEntity1.getId());
                    // errorNum++;
                    // continue;
                HouseRentalEntity rentalEntity = new HouseRentalEntity();
                rentalEntity.setHouseCode(householdEntity.getHouseCode());
                rentalEntity.setHouseStatus(1);
                rentalEntity.setAuditStatus(0);
                rentalEntity.setRentalUse(4);
                rentalEntity.setTenantRelationship(1);
                rentalEntity.setRentalTime(new Date());
                rentalEntity.setDueTime(new Date());
                rentalEntity.setTerminationTime(new Date());
                iHouseRentalService.save(rentalEntity);
                householdEntity.setHousingRentalId(rentalEntity.getId());
                }
            }
            /// 是否主要联系人
            if (!Strings.isBlank(houseHoldExcel.getIsPrimaryContact())) {
                householdEntity.setIsPrimaryContact(Integer.parseInt(houseHoldExcel.getIsPrimaryContact()));
@@ -445,11 +500,12 @@
            if (list.size()==0){
                // 新增
                this.save(householdEntity);
                importNum++;
            // importNum++;
                // 处理标签
                handleLabel(householdEntity,houseHoldExcel);
            return "1";
            }else {
                updateNum++;
            // updateNum++;
                if (isCovered){
                    for (HouseholdEntity one : list) {
                        // 覆盖更新
@@ -459,24 +515,16 @@
                        // 处理标签
                        handleLabel(householdEntity,houseHoldExcel);
                    }
                    importNum++;
                // importNum++;
                return "2";
                }
            }
        }
        StringBuilder builder = new StringBuilder("导入完成!");
        builder.append("其中本次表格共有 ").append(totalNum).append(" 条数据,")
            .append("成功导入 ").append(importNum).append(" 条数据。");
        if (updateNum>0) {
            builder.append("其中有 ").append(updateNum).append(" 条数据已存在。");
        }
        if (errorNum>0){
            builder.append("共有 ").append(errorNum).append(" 条数据由于无姓名或门牌地址编码信息未导入!");
        }
        return builder.toString();
        return "3";
    }
    /**
     * 标签处理
     *
     * @param householdEntity
     * @param houseHoldExcel
     */