邮箱/数字校验/list去除的不需要对象迭代器

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

猜你喜欢

转载自www.cnblogs.com/slAmor/p/12925381.html