薪资核算导入支持vlookup函数

This commit is contained in:
Harryxzy 2024-08-20 13:48:31 +08:00
parent 8742ee7857
commit 2a58b4972b
4 changed files with 39 additions and 10 deletions

View File

@ -4,6 +4,7 @@ import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO;
import com.engine.salary.entity.salaryacct.param.*;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.util.excel.ExcelPreviewDTO;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.List;
@ -113,7 +114,7 @@ public interface SalaryAcctExcelService {
Map<String, Object> preview(SalaryAcctImportParam param);
Map<String, Object> previewImportSalaryAcctResult(SalaryAcctImportParam param);
ExcelPreviewDTO previewImportSalaryAcctResult(SalaryAcctImportParam param);
void cacheImportField(List<Long> salaryItems);

View File

@ -47,6 +47,7 @@ import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
import com.engine.salary.util.*;
import com.engine.salary.util.db.IdGenerator;
import com.engine.salary.util.excel.ExcelParseHelper;
import com.engine.salary.util.excel.ExcelPreviewDTO;
import com.engine.salary.util.excel.ExcelSupport;
import com.engine.salary.util.excel.ExcelUtilPlus;
import com.engine.salary.util.page.PageInfo;
@ -63,7 +64,9 @@ import org.apache.commons.collections4.ListUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.BeanUtils;
@ -985,7 +988,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
}
@Override
public Map<String, Object> previewImportSalaryAcctResult(SalaryAcctImportParam param) {
public ExcelPreviewDTO previewImportSalaryAcctResult(SalaryAcctImportParam param) {
//1参数校验
ValidUtil.doValidator(param);
@ -995,11 +998,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
InputStream fileInputStream = null;
try {
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
map.put("headers", ExcelSupport.getSheetHeader(sheet, 1));
map.put("list", ExcelParseHelper.parse2List(sheet, 2, 1));
return map;
Workbook workbook = ExcelSupport.parseFile(fileInputStream, EXCEL_TYPE_XLSX);
// 创建一个公式求值器对象
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Sheet sheet = workbook.getSheetAt(0);
return ExcelPreviewDTO.builder()
.headers(ExcelSupport.getSheetHeader(sheet, 1))
.list(ExcelParseHelper.parse2List(sheet, evaluator, 2, 1)).build();
} finally {
IOUtils.closeQuietly(fileInputStream);
}
@ -1074,7 +1079,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
Workbook workbook = ExcelSupport.parseFile(fileInputStream, EXCEL_TYPE_XLSX);
Sheet sheet = workbook.getSheetAt(0);
// 错误提示信息
@ -1094,7 +1100,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
List<Map<String, Object>> data;
// if (StringUtils.equals("importSalaryAcctResult", importType)) {
data = ExcelParseHelper.parse2Map(sheet, 2, 1);
data = ExcelParseHelper.parse2Map(workbook, 0, 2, 1);
// } else {
// data = ExcelParseHelper.parse2Map(sheet, 1);
// }

View File

@ -204,6 +204,27 @@ public class ExcelParseHelper {
return result;
}
public static List<Map<String, Object>> parse2Map(Workbook workbook, int sheetIndex, int rowIndex, int headerRowIndex) {
// 创建一个公式求值器对象
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
Sheet sheet = workbook.getSheetAt(sheetIndex);
int rowCount = sheet.getPhysicalNumberOfRows(); // 总行数
int cellCount = sheet.getRow(headerRowIndex).getPhysicalNumberOfCells(); // 总列数
List<String> sheetHeader = ExcelSupport.getSheetHeader(sheet, headerRowIndex);
List<Map<String, Object>> result = new ArrayList<>();
for (; rowIndex < rowCount; rowIndex++) {
Map<String, Object> cellResult = new HashMap<>();
for (int j = 0; j < cellCount; j++) {
String key = sheetHeader.get(j);
cellResult.put(key, ExcelSupport.getCellValue(sheet, evaluator, rowIndex, j));
}
result.add(cellResult);
}
return result;
}
/**
* 将sheet数据转为map
*

View File

@ -9,6 +9,7 @@ import com.engine.salary.service.SalaryAcctExcelService;
import com.engine.salary.service.impl.SalaryAcctExcelServiceImpl;
import com.engine.salary.util.ResponseResult;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.excel.ExcelPreviewDTO;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.wrapper.*;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
@ -691,7 +692,7 @@ public class SalaryAcctController {
@Produces(MediaType.APPLICATION_JSON)
public String importSalaryAcctResultPreview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctImportParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctImportParam, Map<String, Object>>(user).run(getSalaryAcctExcelService(user)::previewImportSalaryAcctResult, param);
return new ResponseResult<SalaryAcctImportParam, ExcelPreviewDTO>(user).run(getSalaryAcctExcelService(user)::previewImportSalaryAcctResult, param);
}
// **********************************薪资核算结果 end*********************************/