From c4e57176ab7cfdc3fff88954ba77d408677cf354 Mon Sep 17 00:00:00 2001 From: 76164 <761646706@qq.com> Date: Thu, 8 Aug 2024 10:28:21 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=BA=86=20=E9=85=8D=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=20excel=E5=AF=BC=E5=85=A5bug=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/controller/MaPartTypeController.java | 3 +- .../bonus/sgzb/base/service/ExcelService.java | 4 +- .../base/service/impl/ExcelServiceImpl.java | 124 ++++-------------- 3 files changed, 31 insertions(+), 100 deletions(-) diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/controller/MaPartTypeController.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/controller/MaPartTypeController.java index 45ecd384..48d11db9 100644 --- a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/controller/MaPartTypeController.java +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/controller/MaPartTypeController.java @@ -1,6 +1,7 @@ package com.bonus.sgzb.base.controller; import com.bonus.sgzb.base.domain.MaPartType; +import com.bonus.sgzb.base.domain.MapType; import com.bonus.sgzb.base.service.ExcelService; import com.bonus.sgzb.base.service.IPartTypeService; import com.bonus.sgzb.common.core.utils.poi.ExcelUtil; @@ -103,7 +104,7 @@ public class MaPartTypeController extends BaseController { // 保存文件 file.transferTo(filePath.toFile()); - Map>> stringMapMap = excelService.readExcelFile(filePath.toString()); + Map>> stringMapMap = excelService.readExcelFile(filePath.toString()); return AjaxResult.success(); } diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/service/ExcelService.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/service/ExcelService.java index 5a5d2313..c89fab99 100644 --- a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/service/ExcelService.java +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/service/ExcelService.java @@ -1,11 +1,11 @@ package com.bonus.sgzb.base.service; -import org.springframework.stereotype.Service; +import com.bonus.sgzb.base.domain.MapType; import java.util.List; import java.util.Map; public interface ExcelService { - Map>> readExcelFile(String filePath); + Map>> readExcelFile(String filePath); } diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/service/impl/ExcelServiceImpl.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/service/impl/ExcelServiceImpl.java index d4688546..88d55824 100644 --- a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/service/impl/ExcelServiceImpl.java +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/service/impl/ExcelServiceImpl.java @@ -1,12 +1,11 @@ package com.bonus.sgzb.base.service.impl;// ExcelServiceImpl.java import com.bonus.sgzb.base.domain.MaPartType; +import com.bonus.sgzb.base.domain.MapType; import com.bonus.sgzb.base.mapper.ExcelMapper; import com.bonus.sgzb.base.service.ExcelService; import com.bonus.sgzb.common.security.utils.SecurityUtils; -import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.apache.xmlbeans.impl.xb.xsdschema.Public; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -21,14 +20,12 @@ public class ExcelServiceImpl implements ExcelService { @Autowired ExcelMapper excelMapper; - String fourthLevel = ""; - String fifthLevel =""; /* * 将读取的excel文件转为 * */ @Override - public Map>> readExcelFile(String filePath) { + public Map>> readExcelFile(String filePath) { FileInputStream excelFile = null; Workbook workbook = null; @@ -38,14 +35,7 @@ public class ExcelServiceImpl implements ExcelService { Sheet datatypeSheet = workbook.getSheetAt(0); Iterator iterator = datatypeSheet.iterator(); - Long id = null; - Long id2 = null; - Long id3 = null; - String parentId = ""; - boolean state1 = false; - boolean state2 = false; - boolean state3 = false; - Map>> level3Relation = new HashMap<>(); + Map>> level3Relation = new HashMap<>(); while (iterator.hasNext()) { Row currentRow = iterator.next(); @@ -66,20 +56,23 @@ public class ExcelServiceImpl implements ExcelService { String firstLevel = getCellValueAsString(firstLevelCell); String secondLevel = getCellValueAsString(secondLevelCell); - String thirdLevel = getCellValueAsString(thirdLevelCell); - fourthLevel = getCellValueAsString(fourthLevelCell); - fifthLevel = getCellValueAsString(fifthLevelCell); + + MapType thirdLevel = new MapType(); + thirdLevel.setPaName(getCellValueAsString(thirdLevelCell)); + thirdLevel.setUnitId(getCellValueAsString(fourthLevelCell)); + thirdLevel.setBuyPrice(getCellValueAsString(fifthLevelCell)); + // 检查是否所有三个级别都是空白 - if (firstLevel.isEmpty() && secondLevel.isEmpty() && thirdLevel.isEmpty()) { + if (firstLevel.isEmpty() || secondLevel.isEmpty() || thirdLevel == null) { continue; // 跳过这一行 } // 检查是否已经存在相同的组合 boolean isDuplicate = false; for (String key : level3Relation.keySet()) { - Map> secondLevelMap = level3Relation.get(key); + Map> secondLevelMap = level3Relation.get(key); for (String key2 : secondLevelMap.keySet()) { - List thirdLevelList = secondLevelMap.get(key2); + List thirdLevelList = secondLevelMap.get(key2); if (key.equals(firstLevel) && key2.equals(secondLevel) && thirdLevelList.contains(thirdLevel)) { isDuplicate = true; break; @@ -90,76 +83,13 @@ public class ExcelServiceImpl implements ExcelService { if (!isDuplicate) { // 如果不是重复项,则添加到映射中 - Map> secondLevelMap = level3Relation.computeIfAbsent(firstLevel, k -> new HashMap<>()); - List thirdLevelList = secondLevelMap.computeIfAbsent(secondLevel, k -> new ArrayList<>()); + Map> secondLevelMap = level3Relation.computeIfAbsent(firstLevel, k -> new HashMap<>()); + List thirdLevelList = secondLevelMap.computeIfAbsent(secondLevel, k -> new ArrayList<>()); thirdLevelList.add(thirdLevel); } } printLevel3Relation(level3Relation); - // 遍历外层Map -// for (Map.Entry>> entry1 : level3Relation.entrySet()) { -// String firstLevel = entry1.getKey(); // 获取第一层级的键 -// parentId = excelMapper.selectPaName(firstLevel); -// boolean exist = true; -// -// if (StringUtils.isEmpty(parentId)) { -// //产生返回值并且进行判断是否是pa_name列已经有的,并且返回对应的pa_id -// MaPartType maPartType = new MaPartType(); -// maPartType.setPaName(firstLevel); -// maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); -// excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据,并且读取到parent_id -// id = maPartType.getPaId(); -// exist = false; -// } else { -// id = Long.valueOf(parentId); -// } -// -// Map> secondLevelMap = entry1.getValue(); // 获取对应于第一层级键的内层Map -// // 遍历内层Map -// for (Map.Entry> entry2 : secondLevelMap.entrySet()) { -// String secondLevel = entry2.getKey(); // 获取第二层级的键 -// // query (secondLevel, id), -// MaPartType level2MaPartType = excelMapper.selectTwoPaName(secondLevel,id); -// if (Objects.nonNull(level2MaPartType)){ -// // if found, exist=true, loop level3 -// exist = true; -// List values = entry2.getValue(); -// for (String value : values) { -// -// -// //query level3 by name+parentId { value, level2MaPartType.id}, get exist of level3 -// boolean flag = true; -// String state = excelMapper.selectThreePaName(value,level2MaPartType.getPaId()); -// if (StringUtils.isNotBlank(state)){ -// flag = false; -// } -// if (exist && flag) { -// MaPartType maPartType = new MaPartType(); -// maPartType.setPaName(value); -// maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); -// maPartType.setUnitId(fourthLevel); -// maPartType.setBuyPrice(fifthLevel); -// maPartType.setParentId(id2); -// excelMapper.insertPaThreeName(maPartType);//第二层在数据库中查询不到则插入数据,则插入时候设置关联关系 -// } -// } -// }else { -// // not found, exist=false, insert level2, then loop level3 -// exist = false; -// MaPartType maPartType = new MaPartType(); -// maPartType.setPaName(secondLevel); -// maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); -// maPartType.setUnitId(fourthLevel); -// maPartType.setBuyPrice(fifthLevel); -// maPartType.setParentId(id); -// excelMapper.insertPaTwoName(maPartType);//第二层在数据库中查询不到则插入数据,则插入时候设置关联关系 -// id2 = maPartType.getPaId(); -// } -// -// } -// } - return level3Relation; } catch (IOException e) { e.printStackTrace(); @@ -202,8 +132,8 @@ public class ExcelServiceImpl implements ExcelService { } - private void printLevel3Relation(Map>> level3Relation) { - for (Map.Entry>> firstLevel : level3Relation.entrySet()) { + private void printLevel3Relation(Map>> level3Relation) { + for (Map.Entry>> firstLevel : level3Relation.entrySet()) { boolean outExist = true; System.out.println("level_1: " + firstLevel.getKey()); //TODO, sql查询:是否有此名字 + parentId=0, select * from ma_part_type where name=? and parent_id=0; @@ -225,8 +155,8 @@ public class ExcelServiceImpl implements ExcelService { } } - private void loopInner(Map.Entry>> firstLevel, boolean outExist, long firstLevelId) { - for (Map.Entry> secondLevel : firstLevel.getValue().entrySet()) { + private void loopInner(Map.Entry>> firstLevel, boolean outExist, long firstLevelId) { + for (Map.Entry> secondLevel : firstLevel.getValue().entrySet()) { System.out.println("\tlevel_2: " + secondLevel.getKey()); //TODO, sql查询:是否有此名字 + parentId=firstLevelId, select * from ma_part_type where name=? and parent_id = firstLevelId; MaPartType maPartType_level2 = excelMapper.selectMa(firstLevel.getKey(),firstLevelId); @@ -249,20 +179,20 @@ public class ExcelServiceImpl implements ExcelService { } } - private void looplevel3(Map.Entry> secondLevel, boolean outExist, long secondLevelId) { - for (String thirdLevel : secondLevel.getValue()) { + private void looplevel3(Map.Entry> secondLevel, boolean outExist, long secondLevelId) { + for (MapType thirdLevel : secondLevel.getValue()) { System.out.println("\t\tlevel_3: " + thirdLevel); //TODO, sql查询:是否有此名字 + parentId=secondLevelId, select * from ma_part_type where name=? and parent_id = secondLevelId; - MaPartType maPartType_level3 = excelMapper.selectMa(thirdLevel,secondLevelId); + MaPartType maPartType_level3 = excelMapper.selectMa(thirdLevel.getPaName(),secondLevelId); //TODO, 以上返回 maPartType_level3 if (Objects.nonNull(maPartType_level3)) { if (!outExist) { //TODO insert MaPartType maPartType = new MaPartType(); - maPartType.setPaName(thirdLevel); + maPartType.setPaName(thirdLevel.getPaName()); maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); - maPartType.setUnitId(fourthLevel); - maPartType.setBuyPrice(fifthLevel); + maPartType.setUnitId(thirdLevel.getUnitId()); + maPartType.setBuyPrice(thirdLevel.getBuyPrice()); maPartType.setParentId(secondLevelId); maPartType.setLevel("3"); excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据,并且读取到parent_id @@ -270,10 +200,10 @@ public class ExcelServiceImpl implements ExcelService { } else { //TODO insert MaPartType maPartType = new MaPartType(); - maPartType.setPaName(thirdLevel); + maPartType.setPaName(thirdLevel.getPaName()); maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); - maPartType.setUnitId(fourthLevel); - maPartType.setBuyPrice(fifthLevel); + maPartType.setUnitId(thirdLevel.getUnitId()); + maPartType.setBuyPrice(thirdLevel.getBuyPrice()); maPartType.setParentId(secondLevelId); maPartType.setLevel("3"); excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据,并且读取到parent_id