资讯专栏INFORMATION COLUMN

解析excel数据并做检验及保存到数据库

luffyZh / 1629人阅读

摘要:此例为初次参与企业项目做的,代码粗糙勿见怪从导入核心企业信息到数据库文件上传路径执行上传执行读操作读出的数据导入从第行开始从第列开始第个数据库写入操作白名单信息必输字段核心企业名称项目公司名称为非必输校验忽略序号核心企业名称项目公司名称数据

此例为初次参与企业项目做的,代码粗糙勿见怪:

/**
     * 从EXCEL导入核心企业信息到数据库
     * @param file
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "importWhitelistExcel")
    public ModelAndView readExcel(
            @RequestParam(value="excel",required=false) MultipartFile file
            ) {
        ModelAndView mv = this.getModelAndView();
        PageData pd = this.getPageData();
        
        Whitelist whiteList = new Whitelist();
        if(!Jurisdiction.buttonJurisdiction(menuUrl, "add")){return null;}
        if (null != file && !file.isEmpty()) {
            String filePath = PathUtil.getClasspath() + Const.FILE_PATH_FILE;                    //文件上传路径
            String dateStr = DateUtils.getSdfTimes();
            String fileName = "Whitelist_"+Jurisdiction.getUsername()+"_"+dateStr;            
            fileName =  FileUpload.fileUp(file, filePath, fileName);                              //执行上传
            
            //执行读EXCEL操作,读出的数据导入List 2:从第3行开始;1:从第B列开始;0:第0个sheet
            String errmsg=null;
            //Matcher matcher = null;
            List readList=new ArrayList();
            List errorList=new ArrayList();
            
            
            try{
                List excelPdList = (List)ObjectExcelRead.readExcel(filePath, fileName, 2, 1, 0, "#.####");
            
                /*数据库写入操作======================================*/
                /*
                 * 白名单信息必输字段:
                 * 核心企业名称,项目公司名称
                 * (为非必输)
                 * 校验:
                 */
                
                for(PageData ca:excelPdList){
                    // 忽略序号
                    PageData readPd = new PageData();
                    PageData tipPd = new PageData();
                    
                    String coreManuName = StringUtils.trimToEmpty(ca.getString("var1")); //核心企业名称
                    String companyName = StringUtils.trimToEmpty(ca.getString("var2")); //项目公司名称
                    String coreManuId = null;
                    //int index = excelPdList.indexOf(ca);
                    
                    // 数据校验开始
                    
                    if(StringUtils.isEmpty(coreManuName))
                    {
                        tipPd.put("coreManuName", coreManuName);
                        tipPd.put("companyName", companyName);
                        if(StringUtils.isEmpty(companyName)){
                            
//                            tipPd.put("tip", "核心企业名称和项目公司名称不能为空");
                            
                            continue;
                        }else{
                            tipPd.put("tip", "核心企业名称不能为空");
                        }
                        errorList.add(tipPd);
//                        errmsg="核心企业名称不能为空";
//                        break;
                    }else if(StringUtils.isEmpty(companyName))
                    {
                        tipPd.put("coreManuName", coreManuName);
                        tipPd.put("companyName", companyName);
                        tipPd.put("tip", "项目公司名称不能为空");
                        errorList.add(tipPd);
//                        errmsg="核心企业["+coreManuName+"]项目公司名称不能为空";
//                        break;
                    }
//                    CoreCompany c = coreCompanyService.findByCompanyName(coreManuName);
//                    System.out.println(coreManuName);
//                    System.out.println(c);
                    if(!StringUtils.isEmpty(coreManuName)){
                        
                        CoreCompany coreManu = coreCompanyService.findByCompanyName(coreManuName);
                        
                        if(coreManu == null) {
                            tipPd.put("coreManuName", coreManuName);
                            tipPd.put("companyName", companyName);
                            tipPd.put("tip", "系统找不到核心企业名称,核心企业名称错误");
                            errorList.add(tipPd);
                        }else {
                            coreManuId = coreManu.getId();
                            whiteList = whitelistService.findByWhitelistName(coreManuId, companyName);
                            if(whiteList != null) {//判断导入表中是否存在相同数据
                                tipPd.put("coreManuName", coreManuName);
                                tipPd.put("companyName", companyName);
                                tipPd.put("tip", "此记录已录入系统");
                                errorList.add(tipPd);
//                                errmsg = "核心企业["+coreManuName+"]和项目公司["+companyName+"在系统中已存在,请在导入表删除后重新导入";
//                                break;
                            }
                        }
                        
                    }
                    
                    readPd.put("coreManuId", coreManuId);   //核心企业编号
                    readPd.put("companyName", companyName); //项目公司名称
                    readPd.put("status", "EBST0101");
                    readPd.put("createUser", Jurisdiction.getUsername());
                    readPd.put("createTime", DateUtils.getTime());
                    readPd.put("lasUpdUser", Jurisdiction.getUsername());
                    readPd.put("lasUpdTime", DateUtils.getTime());
                    readPd.put("Id", this.get32UUID()); //ID
                    
                    if(!readList.isEmpty()) {
                        
                        for(PageData read : readList) {
                            
                            if(read.containsValue(companyName) && read.containsValue(coreManuId)){
                                //判断导入表中是否有相同项目公司
                                tipPd.put("coreManuName", coreManuName);
                                tipPd.put("companyName", companyName);
                                tipPd.put("tip", "此记录在导入表中重复");
                                errorList.add(tipPd);
//                                errmsg = "导入表里核心企业["+coreManuName+"]和项目公司["+companyName+"]在表中重复,请修改后导入";
//                                break;
                            }
                        }
                    }
                    readList.add(readPd);
                }
            }catch(Exception ex){
                logger.error("处理Excel文件出错", ex);
                errmsg="处理Excel文件出错,"+ex.getMessage();
            }
            
            
            if(errmsg==null && readList.size()==0){
                errmsg="未检测到符合条件的数据";
            }
            
            if(errmsg!=null || errorList.size()>0){
                if(errmsg==null){
                    errmsg="数据导入失败,请核对以下数据";
                }
                mv.addObject("errmsg", errmsg);
                mv.addObject("tipList", errorList);
                mv.setViewName("business/whitelist/whitelist_upload");
                return mv;
            }
            
//            if(errmsg!=null){
//                mv.addObject("errmsg", errmsg);
//                mv.setViewName("business/whitelist/whitelist_upload");
//                return mv;
//            }
            //批量保存到数据库
            try {
                whitelistService.saveAll(readList);
            } catch (Exception e) {
//                e.printStackTrace();
                logger.error(e.toString());
                errmsg = "系统异常,保存数据失败";
                mv.addObject("errmsg", errmsg);
                mv.setViewName("business/whitelist/whitelist_upload");
                return mv;
            }
            
        }
            
        mv.addObject("msg","success");
        mv.setViewName("save_result");
        return mv;
        
        
    }
    

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66719.html

相关文章

  • 数据游戏」:使用 LSTM 模型预测三天后单股收盘价

    摘要:本次比赛将使用模型来预测招商银行三天后的收盘价,也就是利用月日前的数据,来预测月日的收盘价。按照个交易日的模式,将数据变成一个,,的张量表。在实际使用时进行模型载入,分别查看预测结果。 作者:疯猫子,「数据游戏」优胜队伍成员 摘要 LSTM模型是RNN的一种,其特点是在单一循环神经网络的基础上,构建出了长短记忆门,也就是可以长时间发现和记忆长依赖关系。本次比赛将使用LSTM模型来预测招...

    dreamans 评论0 收藏0
  • 数据游戏」:使用 LSTM 模型预测三天后单股收盘价

    摘要:本次比赛将使用模型来预测招商银行三天后的收盘价,也就是利用月日前的数据,来预测月日的收盘价。按照个交易日的模式,将数据变成一个,,的张量表。在实际使用时进行模型载入,分别查看预测结果。 作者:疯猫子,「数据游戏」优胜队伍成员 摘要 LSTM模型是RNN的一种,其特点是在单一循环神经网络的基础上,构建出了长短记忆门,也就是可以长时间发现和记忆长依赖关系。本次比赛将使用LSTM模型来预测招...

    JeOam 评论0 收藏0
  • XCel 项目总结 - Electron 与 Vue 的性能优化

    摘要:而这里的单元格信息是唯一的,所以直接通过为一个空对象赋值即可。和相关的知识和技巧高亮的列单元格采用展示。在中,被选中的单元格会高亮相应的行和列,以提醒用户。 showImg(https://segmentfault.com/img/bVGkdk?w=900&h=500); XCEL 是一个 Excel 数据清洗工具,其通过可视化的方式让用户轻松地对 Excel 数据进行筛选。 XCEL...

    XUI 评论0 收藏0
  • 第一篇(从django后台解析excel数据批量导入数据库)

    摘要:总结整个过程的难点在于获取文件对象,从数据中取值然后在按取出,这样我们就可以从后台上传文件,然后进行批量导入数据库,其他数据格式只需要改和中的数据字段就可以 第一篇(从django后台解析excel数据批量导入数据库) 文章会在github中持续更新 作者: knthony github 联系我 1.django 如何从后台上传excel中批量解析数据 要从django后台导入...

    2i18ns 评论0 收藏0
  • 第7期 Datawhale 组队学习计划

    马上就要开始啦这次共组织15个组队学习 涵盖了AI领域从理论知识到动手实践的内容 按照下面给出的最完备学习路线分类 难度系数分为低、中、高三档 可以按照需要参加 - 学习路线 - showImg(https://segmentfault.com/img/remote/1460000019082128); showImg(https://segmentfault.com/img/remote/...

    dinfer 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<