主子导入功能Controller
/**
* 导入
*
* @param file
* @param ifFlag
* @return
* @throws Exception
*/
@RequestMapping("/importSheet")
@ResponseBody
public Object importSheet(@RequestPart("file") MultipartFile file, int ifFlag) {
try {
Map<String, JSONArray> stringJSONArrayMap = ImportExeclUtil.readFileManySheet(file);
return this.buildSuccess(hrrgComEvaService.importSheet(stringJSONArrayMap, ifFlag));
} catch (Exception e) {
logger.error("Excel导入失败", e);
return this.buildFaild(e.getMessage());
}
/*catch (RuntimeException e){
return this.buildFaild(e.getMessage());
}catch (Exception e){
logger.error("Excel导入失败", e);
return this.buildFaild("导入失败请检查导入文件");
}*/
}
service
@Transactional(rollbackFor = Exception.class)
public Object importSheet(Map<String, JSONArray> hrrgComEvaModels, int ifFlag) throws Exception {
String timeRegex1 = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|" +
"((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|" +
"((0[48]|[2468][048]|[3579][26])00))-02-29)$";
List<HrrgComEva> hrrgComEvas = ImportExeclUtil.getBeanList(hrrgComEvaModels.get("胜任力测评记录"), HrrgComEva.class);
List<HrrgEvaDimInfo> hrrgEvaDimInfos = ImportExeclUtil.getBeanList(hrrgComEvaModels.get("维度信息"), HrrgEvaDimInfo.class);
AtomicInteger com = new AtomicInteger();
AtomicInteger eva = new AtomicInteger();
//主表userCode集合
List<String> ids = new ArrayList<>();
List<HrrgComEva> insertData = new ArrayList<>();
List<String> userCode = hrrgComEvas.stream().map(HrrgComEva::getUserCode).collect(Collectors.toList());
List<String> name = hrrgComEvas.stream().map(HrrgComEva::getName).collect(Collectors.toList());
List<String> evaScheme = hrrgComEvas.stream().map(HrrgComEva::getEvaScheme).collect(Collectors.toList());
//处理ts
String currentDate = DateUtil.getCurrentDate();
AtomicInteger modefyCount = new AtomicInteger();
List<HrrgComEva> hrrgComEvaList = hrrgComEvas.stream().map(item -> {
//非空校验
if (StringUtils.isBlank(item.getUserCode())) {
throw new RuntimeException("人员编码不能为空");
}
if (StringUtils.isBlank(item.getName())) {
throw new RuntimeException("人员不能为空");
}
if (StringUtils.isBlank(item.getOrg())) {
throw new RuntimeException("组织不能为空");
}
// HrrgComEva comEvaByName = hrrgComEvaMapper.getComEvaByName(item.getPkOrgCode());
// if (StringUtils.isBlank(item.getPkOrgCode())){
// throw new RuntimeException("组织编码不能为空");
// }
if (StringUtils.isBlank(item.getDept())) {
throw new RuntimeException("部门不能为空");
}
if (StringUtils.isBlank(item.getPost())) {
throw new RuntimeException("岗位不能为空");
}
if (StringUtils.isBlank(item.getEvaScheme())) {
throw new RuntimeException("测评方案不能为空");
}
List<HrrgComEva> ListData = hrrgComEvaMapper.queryEva(userCode, name, evaScheme);
Optional<HrrgComEva> repeatRelOption =
ListData.stream().filter(relDb ->
relDb.getUserCode().equals(item.getUserCode())
&& relDb.getName().equals(item.getName())
&& relDb.getEvaScheme().equals(item.getEvaScheme())
).findFirst();
if (repeatRelOption.isPresent()) {
HrrgComEva rel = repeatRelOption.get();
item.setTs(rel.getTs());
item.setId(rel.getId());
modefyCount.getAndAdd(this.hrrgComEvaMapper.updateSelective(item));
//com.set(com.get() + modefyCount.get());
this.hrrgEvaDimInfoMapper.deleteHrrgEvaDimInfosBypkComEva(rel.getId());
} else{
insertData.add(item);
}
//校验日期不能为空,校验日期格式不正确
String evaDate1 = item.getEvaDate();
if (StringUtils.isBlank(evaDate1)) {
throw new RuntimeException("测评日期不能为空");
}
boolean evaDate = Pattern.matches(timeRegex1,evaDate1);
if (!evaDate) {
throw new RuntimeException("日期以YYYY-MM-DD为准");
}
if (StringUtils.isBlank(item.getSumScore())) {
throw new RuntimeException("总分不能为空");
}
String orgId = hrrgComEvaMapper.queryEvaCom(item.getPkOrgCode());
if (orgId == null){
throw new RuntimeException("组织编码不能为空或跟系统的组织编码不匹配");
}
item.setPkOrgCode(orgId);
//收集用户id
ids.add(item.getUserCode());
item.setId(UUID.randomUUID().toString().replace("-", ""));
item.setTenantId(InvocationInfoProxy.getTenantid());
item.setTs(currentDate);
item.setDataSources("外部导入");
return item;
}).collect(Collectors.toList());
int row1 =0;
row1 = row1 + modefyCount.get();
if(!insertData.isEmpty() &&insertData!=null){
//批量新增主表
try{
row1 = row1 + hrrgComEvaMapper.insertToHrrgComEvas(insertData);
}catch (Exception e){
logger.error("人岗匹配-胜任力测评记录接口主表", e);
throw new RuntimeException("导入失败请检查导入文件");
}
}
//查询主表id,userCode
List<Map<String, String>> idUserCodes = hrrgComEvaMapper.getIdAndUserCodeByUserCodes(ids);
//将结果匹配hrrgEvaDimInfos,对应赋值
hrrgEvaDimInfos.stream().map(item -> idUserCodes.stream()
.filter(m -> (item.getUserCode().equals(m.get("userCode"))
&& item.getEvaScheme().equals(m.get("evaScheme"))
&& item.getEvaDate().equals(m.get("evaDate"))))
.findFirst().map(m -> {
//非空校验
if (StringUtils.isBlank(item.getUserCode())) {
throw new RuntimeException("人员编码不能为空");
}
if (StringUtils.isBlank(item.getName())) {
throw new RuntimeException("人员不能为空");
}
if (StringUtils.isBlank(item.getEvaScheme())) {
throw new RuntimeException("测评方案不能为空");
}
if (StringUtils.isBlank(item.getEvaDate())) {
throw new RuntimeException("测评日期不能为空");
}
if (StringUtils.isBlank(item.getDimResult())) {
throw new RuntimeException("维度结果不能为空");
}
//校验分数
if (!StringUtils.isNumeric(item.getDimResult())) {
throw new RuntimeException("测评维度结果校验未通过");
}
if (StringUtils.isBlank(item.getEvaDim())) {
throw new RuntimeException("测评维度不能为空");
}
HrrgPostComDim postComDimByName = hrrgPostComDimMapper.getPostComDimByName(item.getEvaDim());
if (postComDimByName == null) {
throw new RuntimeException("测评维度在维度库中尚未设置");
}
//维度库状态
int isStatus = postComDimByName.getIsStatus();
//维度库分制
double dimScore = Double.parseDouble(postComDimByName.getDimScore());
//校验维度库状态
if (isStatus != 1) {
throw new RuntimeException("测评维度存在未启用");
}
if (Double.parseDouble(item.getDimResult()) > dimScore) {
throw new RuntimeException("测评维度结果不能大于维度库设置");
}
if (StringUtils.isBlank(item.getState())) {
throw new RuntimeException("是否重点关注项不能为空");
}
item.setPkComEva(m.get("id"));
item.setId(UUID.randomUUID().toString().replace("-", ""));
item.setTenantId(InvocationInfoProxy.getTenantid());
item.setTs(currentDate);
return m;
}).orElse(null)).filter(Objects::isNull).collect(Collectors.toList());
//子表批量新增
int row2=0;
try{
row2 = hrrgComEvaMapper.insertToHrrgEvaDimInfos(hrrgEvaDimInfos);
}catch (Exception e){
logger.error("人岗匹配-胜任力测评记录接口子表", e);
throw new RuntimeException("导入失败请检查导入文件");
}
//主表失败条数
com.set(hrrgComEvas.size() - row1);
//子表失败条数
eva.set(hrrgEvaDimInfos.size() - row2);
String str = "成功插入”胜任力测评记录“表" + row1 + "条数据," + "失败" + com + "条数据;"
+ "成功插入“维度信息”表" + row2 + "条信息," + "失败" + eva + "条数据;失败原因:";
return str;
}