0
点赞
收藏
分享

微信扫一扫

easypoi 多线程处理导入数据(有返回值)

自信的姐姐 2022-04-24 阅读 70
spring boot
ServiceImpl:
@Autowired
private ExecutorService executorService;
 public Result exceCodeContrast(MultipartFile file, Integer type) {
        List<Map<String, Object>> errList = new ArrayList<>();

        try {
           
            ImportParams params = new ImportParams();
            params.setNeedVerfiy(false);
            params.setTitleRows(0);
            params.setHeadRows(1);
            ExcelImportResult<CodeContrastVO> importResult = ExcelImportUtil.importExcelMore(file.getInputStream(), CodeContrastVO.class, params);

            List<CodeContrast> list = new ArrayList<>();
            for (CodeContrastVO codeContrastVO : importResult.getList()) {
                String errMsg = "";
                if (PKStrUtil.isEmpty(codeContrastVO.getCountryCode())) {
                    errMsg += "国临版编码不能为空,";
                }
                if (PKStrUtil.isEmpty(codeContrastVO.getCountryName())) {
                    errMsg += "国临版名称不能为空,";
                }

                if (PKStrUtil.isNotEmpty(errMsg)) {
                    Map<String, Object> map = new HashMap<>();
                    map.put("rowNum", codeContrastVO.getRowNum());
                    map.put("errorMsg", errMsg);
                    errList.add(map);
                } else {
                    CodeContrast codeContrast=new CodeContrast();
                    BeanUtils.copyProperties(codeContrastVO,codeContrast);
                    list.add(codeContrast);
                }

            }


            //List<CodeContrast> list = ExcelUtils.importExcel(file, 0, 1, CodeContrast.class);
            for (CodeContrast codeContrast : list) {
                if (type == 2) {
                    codeContrast.setOperationType("手术");
                }
                codeContrast.setVersionNum(versionNum);
                codeContrast.setCreatTime(LocalDateTime.now());
                codeContrast.setState(2);
                codeContrast.setType(type);
            }
            int count = Runtime.getRuntime().availableProcessors() * 2;
            int pagesize = (list.size() % count) == 0 ? (list.size() / count) : (list.size() / count) + 1;

            List<List<CodeContrast>> lists = Lists.partition(list, pagesize);
            // 创建线程容器
            SaveCodeContrastThread[] saveChildInfoThreads = new SaveCodeContrastThread[lists.size()];
            // 设置线程进入容器
            for (int i = 0; i < lists.size(); i++) {
                saveChildInfoThreads[i] = new SaveCodeContrastThread(lists.get(i));
                // executorService.execute(saveChildInfoThreads[i]);
            }
            // 线程返回结果集合容器
            Future<List<Map<String, Object>>>[] futures = new Future[saveChildInfoThreads.length];
            Long stime = System.currentTimeMillis();
            log.info("{},开始时间:{}", "导入", stime);
            // 循环执行线程
            for (int i = 0; i < saveChildInfoThreads.length; i++) {
                // 执行线程
                Future<List<Map<String, Object>>> future = executorService.submit(saveChildInfoThreads[i]);
                // 线程返回结果,添加到集合中去
                futures[i] = future;
            }

            for (int i = 0; i < futures.length; i++) {
                List<Map<String, Object>> mapList = futures[i].get();
                if (mapList.size() != 0) {
                    errList.addAll(mapList);
                }
            }


            if (errList.size() > 0) {
                return Result.err(JSON.toJSONString(errList));
            } else {
                return Result.ok();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.err("系统异常");
        }
    }
SaveCodeContrastThread:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.panku.common.framework.extconfig.SpringAcaHolder;
import com.panku.common.mr.entity.CodeContrast;
import com.panku.common.mr.entity.PatientBaseInfo;
import com.panku.common.mr.service.ICodeContrastService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.DependsOn;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;


/**
 * @Author: jack
 * @Description: 疾病、手术代码对照表线程
 * @Date Create in 15:27 2020-09-02
 **/
@DependsOn("springAcaHolder")
@Slf4j
public class SaveCodeContrastThread implements Callable {

    private ICodeContrastService codeContrastService = SpringAcaHolder.getBean(ICodeContrastService.class);


    private List<CodeContrast> list = null;

    public SaveCodeContrastThread(List<CodeContrast> list){
        this.list = list;
    }

    @Override
    public Object call() throws Exception {
        List<Map<String, Object>> errList = new ArrayList<>();

        for (CodeContrast codeContrast:list){

            //插入数据库
            try {
                codeContrastService.save(codeContrast);
            } catch (Exception e) {
                e.printStackTrace();
                Map<String, Object> map = new HashMap<>();
                map.put("rowNum", codeContrast.getRowNum());
                map.put("errorMsg", e.getMessage());
                errList.add(map);
            }

        }



        return errList;
    }
}

举报

相关推荐

0 条评论