Excel表格数据导入redis缓存中,封装为实体类用json保存

//导入表格数据
@RequestMapping(value = "/manage/list/insertStatics",method = RequestMethod.POST)
@ResponseBody
public String insertStatics(HttpServletRequest request, HttpServletResponse response) throws Exception {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
    //判断 request 是否有文件上传,即多部分请求
    if (multipartResolver.isMultipart(request)) {
        Map<String,String> map = new HashMap<>();
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
        for (Iterator it = multiRequest.getFileNames(); it.hasNext(); ) {
            String key = (String) it.next();
            MultipartFile multipartFile = multiRequest.getFile(key);
            String originalFileName = multipartFile.getOriginalFilename();
            // b-截取后缀, 重命名文件, 使用uuid+后缀的方式命名保存到服务器上的文件
            String suffix = originalFileName.substring(originalFileName
                    .lastIndexOf("."));
            logger.info("文件后缀: " + suffix);
            if (!suffix.equals("xls") && !suffix.equals("xlsx")) {
                //导入EXCEL数据的校验
                InputStream is = multipartFile.getInputStream();
                Map<String, Object> checkResultMap = checkResult(is);
                // 将数据存入redis
                boolean flag = (Boolean) checkResultMap.get("flag");
                if(flag){
                    Map<String, Object> map1 = new HashMap<>();
                    map1.put("titleInfo",checkResultMap.get("titleInfo"));
                    map1.put("timeInfo",checkResultMap.get("timeInfo"));
                    map1.put("check",checkResultMap.get("check"));
                    redisTemplate.boundValueOps(ScreenConstant.CHECK).set(JsonUtil.toJson(map1));
                }else{
                    return new AppError("2001", (String)checkResultMap.get("errorMsg")).toString();
                }
            }else{
                return new AppError("9999", "上传的文件不是EXCEL格式").toString();
            }
        }
        return toObjJson("上传成功");
    }else {
        return new AppError("2006", "文件不存在,请重试").toString();
    }
}

//封装表格数据

private Map<String, Object> checkResult(InputStream is) {
    Map<String, Object> checkResultMap = new HashMap<String, Object>();
    boolean flag = true;
    String errorMsg = "";
    String titleInfo = "";
    Set<String> set = new HashSet<String>();
    String timeInfo = "";
    List<CheckVO> arrList = new ArrayList<>();
    int num = 0;
    try {
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
        // 通过head获得抄表类型,对应不同操作
        XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
        for (int rowNum = 0; rowNum < sheet.getPhysicalNumberOfRows(); rowNum++) {
            XSSFRow xssfRow = sheet.getRow(rowNum);
            if(rowNum == 0){
                if (xssfRow == null) {
                    errorMsg = "标题信息不能为空";
                    checkResultMap.put("flag", flag);
                    checkResultMap.put("errorMsg", errorMsg);
                    return checkResultMap;
                }
                titleInfo = getCellStringValue(xssfRow.getCell(0));
            }else if(rowNum ==1){
                num = xssfRow.getPhysicalNumberOfCells();
                for(int i=0;i<num;i++){
                    if(i==0){
                        continue;
                    }else{
                        String timeName = getCellStringValue(xssfRow.getCell(i));
                        if(!set.add(timeName)){
                            errorMsg = "第"+(rowNum+1)+"行,时间已存在,请检查!";
                            continue;
                        }
                        timeInfo +="'"+timeName+"',";
                    }
                }
            }else{
                if (xssfRow == null) {
                    continue;
                }
                CheckVO vo = new CheckVO();
                List<Double> nums = new ArrayList<>();
                for(int i=0;i<num;i++){
                    if(i==0){
                        String checkName = getCellStringValue(xssfRow.getCell(i));
                        if(StringTool.isEmpty(checkName)){
                            errorMsg = "第" + (rowNum + 1) + "名称不能为空!";
                            continue;
                        }else{
                            vo.setCheckName(checkName);
                        }
                    }else{
                        if(StringTool.isEmpty(xssfRow.getCell(i))){
                            nums.add(0.0);
                        }else{
                            String numInfo = getCellStringValue(xssfRow.getCell(i));
                            if(StringTool.isEmpty(numInfo)){
                                nums.add(0.0);
                            }else{
                                nums.add(Double.valueOf(numInfo));
                            }
                        }
                    }
                }
                vo.setNumList(nums);
                arrList.add(vo);
            }
        }
    }catch (Throwable t){
        logger.debug(t.getMessage());
        t.printStackTrace();
        errorMsg = "导入数据出错";
        flag = false;
    }
    // 保存到校验结果map中
    checkResultMap.put("flag",flag);
    checkResultMap.put("errorMsg",errorMsg);
    checkResultMap.put("titleInfo",titleInfo);
    checkResultMap.put("timeInfo",timeInfo);
    checkResultMap.put("check",arrList);
    return checkResultMap;
}
public String getCellStringValue(XSSFCell cell) {
    String cellValue = "";
    switch (cell.getCellType()) {
        case XSSFCell.CELL_TYPE_STRING://字符串类型
            cellValue = cell.getStringCellValue();
            if (cellValue.trim().equals("") || cellValue.trim().length() <= 0)
                cellValue = " ";
            break;
        case XSSFCell.CELL_TYPE_NUMERIC: //数值类型
            cellValue = String.valueOf(cell.getNumericCellValue());
            break;
        case XSSFCell.CELL_TYPE_FORMULA: //公式
            cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
            cellValue = String.valueOf(cell.getNumericCellValue());
            break;
        case XSSFCell.CELL_TYPE_BLANK:
            cellValue = " ";
            break;
        case XSSFCell.CELL_TYPE_BOOLEAN:
            break;
        case XSSFCell.CELL_TYPE_ERROR:
            break;
        default:
            break;
    }
    return cellValue;
}

//读取缓存中的数据

@RequestMapping(value = "/manage/list/model", method = RequestMethod.GET)
public String staticsModel(ModelMap map) {
        String jsonInfo = String.valueOf(redisTemplate.boundValueOps(ScreenConstant.CHECK).get());
        Map<String,Object> map1 = JsonUtil.fromJson(jsonInfo, HashMap.class);
        map.put("titleInfo",map1.get("titleInfo"));
        map.put("timeInfo",map1.get("timeInfo"));
        List<CheckVO> list = (List<CheckVO>) map1.get("check");
        map.put("checkJson", JsonUtil.toJson(list));
        return "list/model";
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值