将树形的Excel数据导入到数据库中,包含层级一,二,三,1,1.1,1.2等分层数据导入

将此类数据导入到数据库中并存为树结构

思路:

(1)先将Excel数据读取成每条,并用map存储,并将其对象存入到数据库中

String filePath = "C:/Users/Administrator/Desktop/概算导入模版.xlsx";
        XSSFWorkbook wookbook = new XSSFWorkbook(new FileInputStream(filePath));
        XSSFSheet sheet = wookbook.getSheet("Sheet1");
        //获取到Excel文件中的所有行数
        int rows = sheet.getPhysicalNumberOfRows();
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        for (int i = 3; i < rows; i++) {//i=3代表从第三行开始读取数据
            // 读取左上端单元格
            XSSFRow row = sheet.getRow(i);
            // 行不为空
            if (row != null) {
                Map<String, Object> map = new HashMap<String, Object>();
                //获取到Excel文件中的所有的列
                int cells = row.getPhysicalNumberOfCells();
                //排序编号
                XSSFCell a = row.getCell(0);//第一列数据
                //概算名称
                XSSFCell b = row.getCell(1);//第二列数据
                //概算金额
                XSSFCell c = row.getCell(2);//第三列数据
                map.put("a", a);
                map.put("b", b);
                map.put("c", c);
                list.add(map);
            }
        }
//并将每条数据遍历赋值给对象,批量存入到数据库中
List<ProjectLeader> strings = new ArrayList<>();
        list.forEach(k -> {
            ProjectLeader leader = new ProjectLeader();
            leader.setCollectMoney(k.get("a").toString());
            leader.setEarlierStage(k.get("b").toString());
            leader.setEngineer(k.get("c").toString());
            leader.setInviteTenders("0");
            strings.add(leader);
        });
        projectLeaderService.saveBatch(strings);

(2)将存入的数据读取出来,并对列表的排序编号进行层级区分,设置父类id和子类的层级关系,并更新到当前数据库中。

List<ProjectLeader> leaderList = new ArrayList<>();
        projectLeaderService.list().forEach(s -> {
            if (s.getCollectMoney().contains("总概算")) {//根据排序编号来区分,第一个默认为父节点,parentId设为0
                leaderList.add(s);
            }
            if (s.getCollectMoney().matches("[\u4E00-\u9FA5]+")) {//判断是否为中文,如果是中文为子节点,将parentId设为父对象的id
                Object[] objects = leaderList.stream().filter(k -> k.getCollectMoney().contains("总概算")).map(ProjectLeader::getId).toArray();
                s.setInviteTenders(String.valueOf(objects[0]));
                leaderList.add(s);
                //如果为正整数,则为孙子节点,将parentId设为存入新的list中倒序找到的第一个中文的id
            } else if (s.getCollectMoney().matches("^[0-9]*[1-9][0-9]*$")) {
                Object[] objects = leaderList.stream().sorted(Comparator.comparing(ProjectLeader::getCollectMoney).reversed()).filter(t ->
                        t.getCollectMoney().matches("[\u4E00-\u9FA5]+")).limit(1).map(ProjectLeader::getId).toArray();
                s.setInviteTenders(String.valueOf(objects[0]));
                leaderList.add(s);
                //如果为小数,例如1.1,1.2...则为最下级数据,取字符为“.”之前的数字,并在数据中找到这个id,存入到当前的parentId中
            } else if (s.getCollectMoney().matches("-?[0-9]+.?[0-9]+")) {
                String substring = s.getCollectMoney().substring(0, s.getCollectMoney().indexOf("."));
                Object[] array = leaderList.stream().filter(a -> a.getCollectMoney().equals(substring))
                        .map(ProjectLeader::getId).toArray();
                s.setInviteTenders(String.valueOf(array[0]));
                leaderList.add(s);
            }
        });
projectLeaderService.saveOrUpdateBatch(leaderList);

 (3)存入后的数据,如下图所示

"data": [
    {
      "id": "1509052386180829186",
      "createBy": null,
      "createDept": null,
      "createTime": "2022-03-30 14:18:20",
      "updateBy": null,
      "updateTime": "2022-03-30 14:18:20",
      "status": 1,
      "isDeleted": 0,
      "earlierStage": "建设项目总投资(一)+(二)+(三)+(四)",
      "inviteTenders": "0",
      "levy": null,
      "engineer": "0.0",
      "collectMoney": "总概算 ",
      "packageCaseLed": null,
      "manageId": null,
      "childList": [
        {
          "id": "1509052386180829187",
          "createBy": null,
          "createDept": null,
          "createTime": "2022-03-30 14:18:20",
          "updateBy": null,
          "updateTime": "2022-03-30 14:18:20",
          "status": 1,
          "isDeleted": 0,
          "earlierStage": "工程费用",
          "inviteTenders": "1509052386180829186",
          "levy": null,
          "engineer": "43553.0",
          "collectMoney": "一",
          "packageCaseLed": null,
          "manageId": null,
          "childList": []
        },
        {
          "id": "1509052386180829188",
          "createBy": null,
          "createDept": null,
          "createTime": "2022-03-30 14:18:20",
          "updateBy": null,
          "updateTime": "2022-03-30 14:18:20",
          "status": 1,
          "isDeleted": 0,
          "earlierStage": "工程建设其他费用",
          "inviteTenders": "1509052386180829186",
          "levy": null,
          "engineer": "0.0",
          "collectMoney": "二",
          "packageCaseLed": null,
          "manageId": null,
          "childList": [
            {
              "id": "1509052386180829189",
              "createBy": null,
              "createDept": null,
              "createTime": "2022-03-30 14:18:20",
              "updateBy": null,
              "updateTime": "2022-03-30 14:18:20",
              "status": 1,
              "isDeleted": 0,
              "earlierStage": "建设用地费",
              "inviteTenders": "1509052386180829188",
              "levy": null,
              "engineer": "0.0",
              "collectMoney": "1",
              "packageCaseLed": null,
              "manageId": null,
              "childList": [
                {
                  "id": "1509052386180829190",
                  "createBy": null,
                  "createDept": null,
                  "createTime": "2022-03-30 14:18:20",
                  "updateBy": null,
                  "updateTime": "2022-03-30 14:18:20",
                  "status": 1,
                  "isDeleted": 0,
                  "earlierStage": "征收补偿费用",
                  "inviteTenders": "1509052386180829189",
                  "levy": null,
                  "engineer": "0.0",
                  "collectMoney": "1.1",
                  "packageCaseLed": null,
                  "manageId": null,
                  "childList": []
                },

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值