配件EXCEL导入功能
This commit is contained in:
parent
2e8690f37f
commit
6b48590986
|
|
@ -0,0 +1,19 @@
|
|||
package com.bonus.sgzb.base.mapper;
|
||||
|
||||
import com.bonus.sgzb.base.domain.MaPartType;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@Mapper
|
||||
public interface ExcelMapper {
|
||||
|
||||
|
||||
String selectPaName(@Param("firstLevel") String firstLevel);
|
||||
|
||||
|
||||
int insertPaName(MaPartType firstLevel);
|
||||
|
||||
void insertPaTwoName(MaPartType maPartType);
|
||||
|
||||
void insertPaThreeName(MaPartType maPartType);
|
||||
}
|
||||
|
|
@ -0,0 +1,164 @@
|
|||
package com.bonus.sgzb.base.service.impl;// ExcelServiceImpl.java
|
||||
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.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;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
public class ExcelServiceImpl implements ExcelService {
|
||||
|
||||
@Autowired
|
||||
ExcelMapper excelMapper;
|
||||
|
||||
|
||||
/*
|
||||
* 将读取的excel文件转为
|
||||
* */
|
||||
@Override
|
||||
public Map<String, Map<String, List<String>>> readExcelFile(String filePath) {
|
||||
|
||||
FileInputStream excelFile = null;
|
||||
Workbook workbook = null;
|
||||
try {
|
||||
excelFile = new FileInputStream(new File(filePath));
|
||||
workbook = new XSSFWorkbook(excelFile);
|
||||
Sheet datatypeSheet = workbook.getSheetAt(0);
|
||||
Iterator<Row> iterator = datatypeSheet.iterator();
|
||||
String fourthLevel = "";
|
||||
String fifthLevel ="";
|
||||
Long id = null;
|
||||
Map<String, Map<String, List<String>>> level3Relation = new HashMap<>();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
Row currentRow = iterator.next();
|
||||
if (currentRow.getRowNum() == 0) {
|
||||
// 跳过标题行
|
||||
continue;
|
||||
}
|
||||
|
||||
Cell firstLevelCell = currentRow.getCell(1);
|
||||
Cell secondLevelCell = currentRow.getCell(2);
|
||||
Cell thirdLevelCell = currentRow.getCell(3);
|
||||
Cell fourthLevelCell = currentRow.getCell(4);
|
||||
Cell fifthLevelCell = currentRow.getCell(5);
|
||||
|
||||
|
||||
String firstLevel = getCellValueAsString(firstLevelCell);
|
||||
String secondLevel = getCellValueAsString(secondLevelCell);
|
||||
String thirdLevel = getCellValueAsString(thirdLevelCell);
|
||||
fourthLevel = getCellValueAsString(fourthLevelCell);
|
||||
fifthLevel = getCellValueAsString(fifthLevelCell);
|
||||
|
||||
level3Relation.computeIfAbsent(firstLevel, k -> new HashMap<>())
|
||||
.computeIfAbsent(secondLevel, k -> new ArrayList<>())
|
||||
.add(thirdLevel);
|
||||
}
|
||||
|
||||
// 遍历外层Map
|
||||
for (Map.Entry<String, Map<String, List<String>>> 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();
|
||||
|
||||
}
|
||||
//
|
||||
|
||||
|
||||
|
||||
Map<String, List<String>> secondLevelMap = entry1.getValue(); // 获取对应于第一层级键的内层Map
|
||||
|
||||
// 遍历内层Map
|
||||
for (Map.Entry<String, List<String>> 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);//第二层在数据库中查询不到则插入数据,则插入时候设置关联关系
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return level3Relation;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException("Error reading Excel file", e);
|
||||
} finally {
|
||||
if (workbook != null) {
|
||||
try {
|
||||
workbook.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
if (excelFile != null) {
|
||||
try {
|
||||
excelFile.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private String getCellValueAsString(Cell cell) {
|
||||
if (cell == null) return "";
|
||||
switch (cell.getCellType()) {
|
||||
case STRING:
|
||||
return cell.getStringCellValue();
|
||||
case NUMERIC:
|
||||
return String.valueOf(cell.getNumericCellValue());
|
||||
case BOOLEAN:
|
||||
return String.valueOf(cell.getBooleanCellValue());
|
||||
case FORMULA:
|
||||
return cell.getCellFormula();
|
||||
case BLANK:
|
||||
return "";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.sgzb.base.mapper.ExcelMapper">
|
||||
<insert id="insertPaName" 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
|
||||
(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>
|
||||
|
||||
|
||||
<select id="selectPaName" resultType="java.lang.String">
|
||||
SELECT pa_id FROM ma_part_type WHERE pa_name = #{firstLevel}
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue