From 44998696b3c1b36cd8572d364006602243f3e93f Mon Sep 17 00:00:00 2001 From: 76164 <761646706@qq.com> Date: Wed, 7 Aug 2024 17:41:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=BA=86=20=E4=BA=8C=E7=BA=A7?= =?UTF-8?q?=E5=BA=93=20=E9=85=8D=E4=BB=B6=E7=AE=A1=E7=90=86=20bug=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/sgzb/base/mapper/ExcelMapper.java | 41 ++- .../base/service/impl/ExcelServiceImpl.java | 238 +++++++++++++----- .../resources/mapper/base/ExcelMapper.xml | 73 ++++-- .../mapper/base/MaPartTypeMapper.xml | 2 +- 4 files changed, 268 insertions(+), 86 deletions(-) diff --git a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/mapper/ExcelMapper.java b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/mapper/ExcelMapper.java index 1d127f02..8dc3ff53 100644 --- a/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/mapper/ExcelMapper.java +++ b/sgzb-modules/sgzb-base/src/main/java/com/bonus/sgzb/base/mapper/ExcelMapper.java @@ -4,16 +4,41 @@ import com.bonus.sgzb.base.domain.MaPartType; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + @Mapper public interface ExcelMapper { + MaPartType selectMa(@Param("name") String name,@Param("id") long id); + void insertPaName(MaPartType maPartType); - String selectPaName(@Param("firstLevel") String firstLevel); - - - int insertPaName(MaPartType firstLevel); - - void insertPaTwoName(MaPartType maPartType); - - void insertPaThreeName(MaPartType maPartType); +// +// String selectPaName(@Param("firstLevel") String firstLevel); +// +// +// int insertPaName(MaPartType firstLevel); +// +// void insertPaTwoName(MaPartType maPartType); +// +// void insertPaThreeName(MaPartType maPartType); +// +// int selectThreeName(String secondLevel); +// +// int selectTwoName(String entry2); +// +// String selectPaNameAndpaId(String value, String o); +// +// +// List selectListParentid(String firstLevel); +// +// String selectName(String parentId2); +// +// +// void updateLevelStatus(String parentId); +// +// String selectStatus(String pId); +// +// MaPartType selectTwoPaName(@Param("secondLevel") String secondLevel,@Param("id") Long id); +// +// String selectThreePaName(@Param("value") String value,@Param("paId") Long paId); } 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 764cad59..d4688546 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 @@ -3,6 +3,7 @@ import com.bonus.sgzb.base.domain.MaPartType; 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; @@ -20,10 +21,12 @@ public class ExcelServiceImpl implements ExcelService { @Autowired ExcelMapper excelMapper; + String fourthLevel = ""; + String fifthLevel =""; /* - * 将读取的excel文件转为 - * */ + * 将读取的excel文件转为 + * */ @Override public Map>> readExcelFile(String filePath) { @@ -34,9 +37,14 @@ public class ExcelServiceImpl implements ExcelService { workbook = new XSSFWorkbook(excelFile); Sheet datatypeSheet = workbook.getSheetAt(0); Iterator iterator = datatypeSheet.iterator(); - String fourthLevel = ""; - String fifthLevel =""; + Long id = null; + Long id2 = null; + Long id3 = null; + String parentId = ""; + boolean state1 = false; + boolean state2 = false; + boolean state3 = false; Map>> level3Relation = new HashMap<>(); while (iterator.hasNext()) { @@ -51,72 +59,106 @@ public class ExcelServiceImpl implements ExcelService { Cell thirdLevelCell = currentRow.getCell(3); Cell fourthLevelCell = currentRow.getCell(4); Cell fifthLevelCell = currentRow.getCell(5); - + Cell sixthLevelCell = currentRow.getCell(6); + if (sixthLevelCell != null){ + throw new RuntimeException("导入模板不正确"); + } String firstLevel = getCellValueAsString(firstLevelCell); String secondLevel = getCellValueAsString(secondLevelCell); String thirdLevel = getCellValueAsString(thirdLevelCell); fourthLevel = getCellValueAsString(fourthLevelCell); fifthLevel = getCellValueAsString(fifthLevelCell); + // 检查是否所有三个级别都是空白 + if (firstLevel.isEmpty() && secondLevel.isEmpty() && thirdLevel.isEmpty()) { + continue; // 跳过这一行 + } - level3Relation.computeIfAbsent(firstLevel, k -> new HashMap<>()) - .computeIfAbsent(secondLevel, k -> new ArrayList<>()) - .add(thirdLevel); + // 检查是否已经存在相同的组合 + boolean isDuplicate = false; + for (String key : level3Relation.keySet()) { + Map> secondLevelMap = level3Relation.get(key); + for (String key2 : secondLevelMap.keySet()) { + List thirdLevelList = secondLevelMap.get(key2); + if (key.equals(firstLevel) && key2.equals(secondLevel) && thirdLevelList.contains(thirdLevel)) { + isDuplicate = true; + break; + } + } + if (isDuplicate) break; + } + + if (!isDuplicate) { + // 如果不是重复项,则添加到映射中 + 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(); // 获取第一层级的键 - String parentId = excelMapper.selectPaName(firstLevel); - - //产生返回值并且进行判断是否是pa_name列已经有的,并且返回对应的pa_id - if(parentId == null || parentId == ""){ - MaPartType maPartType = new MaPartType(); - maPartType.setPaName(firstLevel); - maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); - excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据,并且读取到parent_id - id = maPartType.getPaId(); - - } +// for (Map.Entry>> entry1 : level3Relation.entrySet()) { +// String firstLevel = entry1.getKey(); // 获取第一层级的键 +// parentId = excelMapper.selectPaName(firstLevel); +// boolean exist = true; // - - - - Map> secondLevelMap = entry1.getValue(); // 获取对应于第一层级键的内层Map - - // 遍历内层Map - for (Map.Entry> entry2 : secondLevelMap.entrySet()) { - String secondLevel = entry2.getKey(); // 获取第二层级的键 - String parentIdTwo = excelMapper.selectPaName(secondLevel); - - //产生返回值并且进行判断是否是pa_name列已经有的,并且返回对应的pa_id - if(parentIdTwo == null || parentIdTwo == ""){ - MaPartType maPartType = new MaPartType(); - maPartType.setPaName(secondLevel); - maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); - maPartType.setParentId(id); - excelMapper.insertPaTwoName(maPartType);//第二层在数据库中查询不到则插入数据,则插入时候设置关联关系 - id = maPartType.getPaId(); - } - - - - //从数据库中查询 - String thirdLevel = entry2.getValue().get(0); // 获取对应于第二层级键的值,即第三层级的列表 - - - String parentThreeId = excelMapper.selectPaName(thirdLevel); - if(parentThreeId == null || parentThreeId == ""){ - MaPartType maPartType = new MaPartType(); - maPartType.setPaName(thirdLevel); - maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); - maPartType.setUnitId(fourthLevel); - maPartType.setBuyPrice(fifthLevel); - maPartType.setParentId(id); - excelMapper.insertPaThreeName(maPartType);//第二层在数据库中查询不到则插入数据,则插入时候设置关联关系 - } - } - } +// 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) { @@ -160,5 +202,83 @@ public class ExcelServiceImpl implements ExcelService { } + 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; + MaPartType maPartType_level1 = excelMapper.selectMa(firstLevel.getKey(),0); + //TODO, 以上返回 maPartType_level1 + if (Objects.nonNull(maPartType_level1)) { + loopInner(firstLevel, outExist,maPartType_level1.getPaId()); + } else { + //TODO, insert firstLevel, get id + MaPartType maPartType = new MaPartType(); + maPartType.setPaName(firstLevel.getKey()); + maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); + maPartType.setParentId(0L); + maPartType.setLevel("1"); + excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据,并且读取到parent_id + outExist = outExist && false; + loopInner(firstLevel, outExist, maPartType.getPaId()); + } + } + } + + 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); + //TODO, 以上返回 maPartType_level2 + if (Objects.nonNull(maPartType_level2)) { + looplevel3(secondLevel, outExist, maPartType_level2.getPaId()); + } else { + //TODO, insert firstLevel, get id + if (!outExist) { + MaPartType maPartType = new MaPartType(); + maPartType.setPaName(secondLevel.getKey()); + maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); + maPartType.setParentId(firstLevelId); + maPartType.setLevel("2"); + excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据,并且读取到parent_id + outExist = outExist && false; + looplevel3(secondLevel, outExist, maPartType.getPaId()); + } + } + } + } + + private void looplevel3(Map.Entry> secondLevel, boolean outExist, long secondLevelId) { + for (String 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); + //TODO, 以上返回 maPartType_level3 + if (Objects.nonNull(maPartType_level3)) { + if (!outExist) { + //TODO insert + MaPartType maPartType = new MaPartType(); + maPartType.setPaName(thirdLevel); + maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); + maPartType.setUnitId(fourthLevel); + maPartType.setBuyPrice(fifthLevel); + maPartType.setParentId(secondLevelId); + maPartType.setLevel("3"); + excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据,并且读取到parent_id + } + } else { + //TODO insert + MaPartType maPartType = new MaPartType(); + maPartType.setPaName(thirdLevel); + maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); + maPartType.setUnitId(fourthLevel); + maPartType.setBuyPrice(fifthLevel); + maPartType.setParentId(secondLevelId); + maPartType.setLevel("3"); + excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据,并且读取到parent_id + } + } + } } diff --git a/sgzb-modules/sgzb-base/src/main/resources/mapper/base/ExcelMapper.xml b/sgzb-modules/sgzb-base/src/main/resources/mapper/base/ExcelMapper.xml index 645b3d3b..767a2560 100644 --- a/sgzb-modules/sgzb-base/src/main/resources/mapper/base/ExcelMapper.xml +++ b/sgzb-modules/sgzb-base/src/main/resources/mapper/base/ExcelMapper.xml @@ -3,27 +3,64 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + insert into ma_part_type - (pa_name, status,level,del_flag,create_by,create_time,year) + (pa_name, parent_id, status,level,del_flag,unit_id,buy_price,create_by,create_time,year) VALUES - (#{paName}, 0 , 1, 0, #{createBy}, now(),year(now())) - - - insert into ma_part_type - (pa_name, parent_id, status,level,del_flag,create_by,create_time,year) - VALUES - (#{paName}, #{parentId},0 , 2, 0, #{createBy}, now(),year(now())) - - - insert into ma_part_type - (pa_name, parent_id, status,level,del_flag,unit_id,buy_price,create_by,create_time,year) - VALUES - (#{paName}, #{parentId},0 , 3, 0, #{unitId}, #{buyPrice}, #{createBy}, now(),year(now())) + (#{paName}, #{parentId},0 , #{level}, 0, #{unitId}, #{buyPrice}, #{createBy}, now(),year(now())) - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sgzb-modules/sgzb-base/src/main/resources/mapper/base/MaPartTypeMapper.xml b/sgzb-modules/sgzb-base/src/main/resources/mapper/base/MaPartTypeMapper.xml index 300a6bbb..a8e39728 100644 --- a/sgzb-modules/sgzb-base/src/main/resources/mapper/base/MaPartTypeMapper.xml +++ b/sgzb-modules/sgzb-base/src/main/resources/mapper/base/MaPartTypeMapper.xml @@ -74,7 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - update ma_part_type set del_flag = '2' where pa_id = #{paId} + delete from ma_part_type where pa_id = #{paId}