薪资核算导入支持vlookup函数
This commit is contained in:
parent
8742ee7857
commit
2a58b4972b
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
// }
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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*********************************/
|
||||
|
|
|
|||
Loading…
Reference in New Issue