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;
}
}