重庆 二级库 配件管理 bug修改

This commit is contained in:
76164 2024-08-07 17:41:00 +08:00
parent 65040c2767
commit 44998696b3
4 changed files with 268 additions and 86 deletions

View File

@ -4,16 +4,41 @@ import com.bonus.sgzb.base.domain.MaPartType;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper @Mapper
public interface ExcelMapper { public interface ExcelMapper {
MaPartType selectMa(@Param("name") String name,@Param("id") long id);
void insertPaName(MaPartType maPartType);
String selectPaName(@Param("firstLevel") String firstLevel); //
// String selectPaName(@Param("firstLevel") String firstLevel);
//
int insertPaName(MaPartType firstLevel); //
// int insertPaName(MaPartType firstLevel);
void insertPaTwoName(MaPartType maPartType); //
// void insertPaTwoName(MaPartType maPartType);
void insertPaThreeName(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);
} }

View File

@ -3,6 +3,7 @@ import com.bonus.sgzb.base.domain.MaPartType;
import com.bonus.sgzb.base.mapper.ExcelMapper; import com.bonus.sgzb.base.mapper.ExcelMapper;
import com.bonus.sgzb.base.service.ExcelService; import com.bonus.sgzb.base.service.ExcelService;
import com.bonus.sgzb.common.security.utils.SecurityUtils; import com.bonus.sgzb.common.security.utils.SecurityUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.xmlbeans.impl.xb.xsdschema.Public; import org.apache.xmlbeans.impl.xb.xsdschema.Public;
@ -20,6 +21,8 @@ public class ExcelServiceImpl implements ExcelService {
@Autowired @Autowired
ExcelMapper excelMapper; ExcelMapper excelMapper;
String fourthLevel = "";
String fifthLevel ="";
/* /*
* 将读取的excel文件转为 * 将读取的excel文件转为
@ -34,9 +37,14 @@ public class ExcelServiceImpl implements ExcelService {
workbook = new XSSFWorkbook(excelFile); workbook = new XSSFWorkbook(excelFile);
Sheet datatypeSheet = workbook.getSheetAt(0); Sheet datatypeSheet = workbook.getSheetAt(0);
Iterator<Row> iterator = datatypeSheet.iterator(); Iterator<Row> iterator = datatypeSheet.iterator();
String fourthLevel = "";
String fifthLevel ="";
Long id = null; Long id = null;
Long id2 = null;
Long id3 = null;
String parentId = "";
boolean state1 = false;
boolean state2 = false;
boolean state3 = false;
Map<String, Map<String, List<String>>> level3Relation = new HashMap<>(); Map<String, Map<String, List<String>>> level3Relation = new HashMap<>();
while (iterator.hasNext()) { while (iterator.hasNext()) {
@ -51,72 +59,106 @@ public class ExcelServiceImpl implements ExcelService {
Cell thirdLevelCell = currentRow.getCell(3); Cell thirdLevelCell = currentRow.getCell(3);
Cell fourthLevelCell = currentRow.getCell(4); Cell fourthLevelCell = currentRow.getCell(4);
Cell fifthLevelCell = currentRow.getCell(5); Cell fifthLevelCell = currentRow.getCell(5);
Cell sixthLevelCell = currentRow.getCell(6);
if (sixthLevelCell != null){
throw new RuntimeException("导入模板不正确");
}
String firstLevel = getCellValueAsString(firstLevelCell); String firstLevel = getCellValueAsString(firstLevelCell);
String secondLevel = getCellValueAsString(secondLevelCell); String secondLevel = getCellValueAsString(secondLevelCell);
String thirdLevel = getCellValueAsString(thirdLevelCell); String thirdLevel = getCellValueAsString(thirdLevelCell);
fourthLevel = getCellValueAsString(fourthLevelCell); fourthLevel = getCellValueAsString(fourthLevelCell);
fifthLevel = getCellValueAsString(fifthLevelCell); fifthLevel = getCellValueAsString(fifthLevelCell);
// 检查是否所有三个级别都是空白
level3Relation.computeIfAbsent(firstLevel, k -> new HashMap<>()) if (firstLevel.isEmpty() && secondLevel.isEmpty() && thirdLevel.isEmpty()) {
.computeIfAbsent(secondLevel, k -> new ArrayList<>()) continue; // 跳过这一行
.add(thirdLevel);
} }
// 检查是否已经存在相同的组合
boolean isDuplicate = false;
for (String key : level3Relation.keySet()) {
Map<String, List<String>> secondLevelMap = level3Relation.get(key);
for (String key2 : secondLevelMap.keySet()) {
List<String> thirdLevelList = secondLevelMap.get(key2);
if (key.equals(firstLevel) && key2.equals(secondLevel) && thirdLevelList.contains(thirdLevel)) {
isDuplicate = true;
break;
}
}
if (isDuplicate) break;
}
if (!isDuplicate) {
// 如果不是重复项则添加到映射中
Map<String, List<String>> secondLevelMap = level3Relation.computeIfAbsent(firstLevel, k -> new HashMap<>());
List<String> thirdLevelList = secondLevelMap.computeIfAbsent(secondLevel, k -> new ArrayList<>());
thirdLevelList.add(thirdLevel);
}
}
printLevel3Relation(level3Relation);
// 遍历外层Map // 遍历外层Map
for (Map.Entry<String, Map<String, List<String>>> entry1 : level3Relation.entrySet()) { // for (Map.Entry<String, Map<String, List<String>>> entry1 : level3Relation.entrySet()) {
String firstLevel = entry1.getKey(); // 获取第一层级的键 // String firstLevel = entry1.getKey(); // 获取第一层级的键
String parentId = excelMapper.selectPaName(firstLevel); // parentId = excelMapper.selectPaName(firstLevel);
// boolean exist = true;
//产生返回值并且进行判断是否是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();
}
// //
// if (StringUtils.isEmpty(parentId)) {
// //产生返回值并且进行判断是否是pa_name列已经有的并且返回对应的pa_id
// MaPartType maPartType = new MaPartType();
Map<String, List<String>> secondLevelMap = entry1.getValue(); // 获取对应于第一层级键的内层Map // maPartType.setPaName(firstLevel);
// maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString());
// 遍历内层Map // excelMapper.insertPaName(maPartType);//如果第一层在数据库中查询不到则插入数据并且读取到parent_id
for (Map.Entry<String, List<String>> entry2 : secondLevelMap.entrySet()) { // id = maPartType.getPaId();
String secondLevel = entry2.getKey(); // 获取第二层级的键 // exist = false;
String parentIdTwo = excelMapper.selectPaName(secondLevel); // } else {
// id = Long.valueOf(parentId);
//产生返回值并且进行判断是否是pa_name列已经有的并且返回对应的pa_id // }
if(parentIdTwo == null || parentIdTwo == ""){ //
MaPartType maPartType = new MaPartType(); // Map<String, List<String>> secondLevelMap = entry1.getValue(); // 获取对应于第一层级键的内层Map
maPartType.setPaName(secondLevel); // // 遍历内层Map
maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); // for (Map.Entry<String, List<String>> entry2 : secondLevelMap.entrySet()) {
maPartType.setParentId(id); // String secondLevel = entry2.getKey(); // 获取第二层级的键
excelMapper.insertPaTwoName(maPartType);//第二层在数据库中查询不到则插入数据则插入时候设置关联关系 // // query (secondLevel, id),
id = maPartType.getPaId(); // MaPartType level2MaPartType = excelMapper.selectTwoPaName(secondLevel,id);
} // if (Objects.nonNull(level2MaPartType)){
// // if found, exist=true, loop level3
// exist = true;
// List<String> values = entry2.getValue();
//从数据库中查询 // for (String value : values) {
String thirdLevel = entry2.getValue().get(0); // 获取对应于第二层级键的值即第三层级的列表 //
//
// //query level3 by name+parentId { value, level2MaPartType.id}, get exist of level3
String parentThreeId = excelMapper.selectPaName(thirdLevel); // boolean flag = true;
if(parentThreeId == null || parentThreeId == ""){ // String state = excelMapper.selectThreePaName(value,level2MaPartType.getPaId());
MaPartType maPartType = new MaPartType(); // if (StringUtils.isNotBlank(state)){
maPartType.setPaName(thirdLevel); // flag = false;
maPartType.setCreateBy(SecurityUtils.getLoginUser().getUserid().toString()); // }
maPartType.setUnitId(fourthLevel); // if (exist && flag) {
maPartType.setBuyPrice(fifthLevel); // MaPartType maPartType = new MaPartType();
maPartType.setParentId(id); // maPartType.setPaName(value);
excelMapper.insertPaThreeName(maPartType);//第二层在数据库中查询不到则插入数据则插入时候设置关联关系 // 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; return level3Relation;
} catch (IOException e) { } catch (IOException e) {
@ -160,5 +202,83 @@ public class ExcelServiceImpl implements ExcelService {
} }
private void printLevel3Relation(Map<String, Map<String, List<String>>> level3Relation) {
for (Map.Entry<String, Map<String, List<String>>> 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<String, Map<String, List<String>>> firstLevel, boolean outExist, long firstLevelId) {
for (Map.Entry<String, List<String>> 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<String, List<String>> 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
}
}
}
} }

View File

@ -3,27 +3,64 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bonus.sgzb.base.mapper.ExcelMapper"> <mapper namespace="com.bonus.sgzb.base.mapper.ExcelMapper">
<insert id="insertPaName" keyProperty="paId" useGeneratedKeys="true"> <insert id="insertPaName" parameterType="com.bonus.sgzb.base.domain.MaPartType" keyProperty="paId" useGeneratedKeys="true">
insert into ma_part_type
(pa_name, status,level,del_flag,create_by,create_time,year)
VALUES
(#{paName}, 0 , 1, 0, #{createBy}, now(),year(now()))
</insert>
<insert id="insertPaTwoName" keyProperty="paId" useGeneratedKeys="true">
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>
<insert id="insertPaThreeName">
insert into ma_part_type insert into ma_part_type
(pa_name, parent_id, status,level,del_flag,unit_id,buy_price,create_by,create_time,year) (pa_name, parent_id, status,level,del_flag,unit_id,buy_price,create_by,create_time,year)
VALUES VALUES
(#{paName}, #{parentId},0 , 3, 0, #{unitId}, #{buyPrice}, #{createBy}, now(),year(now())) (#{paName}, #{parentId},0 , #{level}, 0, #{unitId}, #{buyPrice}, #{createBy}, now(),year(now()))
</insert> </insert>
<select id="selectPaName" resultType="java.lang.String"> <!-- <insert id="insertPaName" keyProperty="paId" useGeneratedKeys="true">-->
SELECT pa_id FROM ma_part_type WHERE pa_name = #{firstLevel} <!-- insert into ma_part_type-->
<!-- (pa_name, status,level,del_flag,create_by,create_time,year)-->
<!-- VALUES-->
<!-- (#{paName}, 0 , 1, 0, #{createBy}, now(),year(now()))-->
<!-- </insert>-->
<!-- <insert id="insertPaTwoName" keyProperty="paId" useGeneratedKeys="true">-->
<!-- 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 , 2, 0, #{unitId}, #{buyPrice}, #{createBy}, now(),year(now()))-->
<!-- </insert>-->
<!-- <insert id="insertPaThreeName">-->
<!-- 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()))-->
<!-- </insert>-->
<!-- <update id="updateLevelStatus" parameterType="java.lang.String">-->
<!-- update ma_part_type set level_status = 1 where pa_id = #{parentId}-->
<!-- </update>-->
<!-- <select id="selectPaName" resultType="java.lang.String">-->
<!-- SELECT pa_id FROM ma_part_type WHERE pa_name = #{firstLevel}-->
<!-- </select>-->
<!-- <select id="selectThreeName" resultType="java.lang.Integer" parameterType="java.lang.String">-->
<!-- SELECT count(*) FROM ma_part_type WHERE pa_name = #{firstLevel} and level = 3-->
<!-- </select>-->
<!-- <select id="selectTwoName" resultType="java.lang.Integer" parameterType="java.lang.String">-->
<!-- SELECT count(*) FROM ma_part_type WHERE pa_name = #{secondLevel} and level = 2-->
<!-- </select>-->
<!-- <select id="selectPaNameAndpaId" resultType="java.lang.String" parameterType="java.lang.String">-->
<!-- SELECT parent_id FROM ma_part_type WHERE pa_name = #{value} and pa_id = #{o}-->
<!-- </select>-->
<!-- <select id="selectListParentid" resultType="java.util.List" parameterType="java.lang.String">-->
<!-- SELECT parent_id FROM ma_part_type WHERE pa_name = #{firstLevel} and level = 2-->
<!-- </select>-->
<!-- <select id="selectName" resultType="java.lang.String" parameterType="java.lang.String">-->
<!-- SELECT pa_name FROM ma_part_type WHERE pa_name = #{parentId2}-->
<!-- </select>-->
<!-- <select id="selectStatus" resultType="java.lang.String">-->
<!-- select level_status from ma_part_type where pa_id = #{pId}-->
<!-- </select>-->
<!-- <select id="selectTwoPaName" resultType="com.bonus.sgzb.base.domain.MaPartType">-->
<!-- select * from ma_part_type where pa_name = #{secondLevel} and parent_id = #{id}-->
<!-- </select>-->
<select id="selectMa" resultType="com.bonus.sgzb.base.domain.MaPartType">
select * from ma_part_type where pa_name = #{name} and parent_id = #{id}
</select> </select>
</mapper> </mapper>

View File

@ -74,7 +74,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update> </update>
<delete id="deletePaById"> <delete id="deletePaById">
update ma_part_type set del_flag = '2' where pa_id = #{paId} delete from ma_part_type where pa_id = #{paId}
</delete> </delete>
<select id="checkPartNameUnique" resultMap="MaPartTypeResult"> <select id="checkPartNameUnique" resultMap="MaPartTypeResult">