public String saveExcel(MultipartFile file, Integer actShowId,Long userId) {
/**
* 第一步是读取名单
*/
List<Invite> items = EasyPoiUtil.importExcel(file, 1, 1, Invite.class);
RsvpActShow actShow = actShowService.findByPrimaryKey(actShowId);
List<Invite> errorItems = new ArrayList<>();// 错误数据集合
Date date = new Date();
/**
* 第二步,校验名单数据,是否有错误.各种维度校验
* 是否邮箱格式
* 公司已邀约检验(重复检验)
* 是否数字
* 是否总数超标
*/
Pattern pattern = Pattern.compile("[0-9]*");
Iterator<Invite> itr = items.iterator();
Integer applyNumMax = actShow.getManagerTicketNum();//管理员最大门票数量
Integer inviteApplyNum = 0;//门票数量初始值
List<Invite> alreadyInviteList = inviteRepositor.findAllByActShowId(actShowId);//已经上传的报名
if (alreadyInviteList.size()>0){
for (Invite i : alreadyInviteList) {
inviteApplyNum+=Integer.parseInt(i.getTicketNum());
}
}
while(itr.hasNext()) {
//邮箱校验
Invite invite = itr.next();
if (!invite.getEmail().matches("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+")) {
invite.setErrorMsg("邮箱错误");
errorItems.add(invite);
itr.remove();
}
//票数校验是否为数字
Matcher isNum = pattern.matcher(invite.getTicketNum());
if( !isNum.matches() ){
if (!errorItems.contains(invite)){
invite.setErrorMsg("总票数错误");
errorItems.add(invite);
itr.remove();
}
}
//分配门票总票数校验
if (items.contains(invite)){
inviteApplyNum+=Integer.parseInt(invite.getTicketNum());
}
// 公司已报名校验
Invite topByCompanyName = inviteRepositor.findTopByCompanyName(invite.getCompanyName());
if (topByCompanyName!=null){
invite.setErrorMsg("公司已存在");
errorItems.add(invite);
itr.remove();
}
}
if (inviteApplyNum > applyNumMax){
logger.info("分配门票数量超过上限applyNumMax:{} and inviteApplyNum:{}",applyNumMax,inviteApplyNum);
return "分配门票数量超过上限";
}
/**
* 3\保存正确数据的内容到数据库
*/
for (Invite invite :items) {
invite.setCreatedBy(userId);//操作人
invite.setActShowId(actShowId);//活动id
invite.setActContaId(actShow.getActContaId());//界别
invite.setOverNum(Integer.parseInt(invite.getTicketNum()));//保存时将剩余票数设置和总票数一致
invite.setCreateTime(date);
}
List<Invite> invites = inviteRepositor.saveAll(items);//保存正确数据
/**
* 4\返回错误格式的数据集合
* 以Excel格式返回.
* 以EXCEL文件路径返回
* 如果没有错误,返回空字符串
*/
if (errorItems.size()>0){
//将错误数据集合以Excel形式返回
logger.info("错误数据集合==========={}",errorItems);
//导出Excel
}
return "";
}
邮箱/数字校验/list去除的不需要对象迭代器
猜你喜欢
转载自www.cnblogs.com/slAmor/p/12925381.html
今日推荐
周排行