Merge branch 'release/2.15.1.2407.01' into custom/京贵投资

This commit is contained in:
Harryxzy 2024-08-16 15:29:26 +08:00
commit 0f6184fc9b
3 changed files with 91 additions and 20 deletions

View File

@ -7,6 +7,7 @@ import com.cloudstore.eccom.result.WeaResultMsg;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.component.SalaryWeaTable;
import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
@ -21,6 +22,8 @@ import com.engine.salary.report.entity.param.SalaryStatisticsEmployeeSalaryQuery
import com.engine.salary.report.service.SalaryStatisticsEmployeeService;
import com.engine.salary.report.service.impl.SalaryStatisticsEmployeeServiceImpl;
import com.engine.salary.report.util.ReportDataUtil;
import com.engine.salary.service.SalaryItemService;
import com.engine.salary.service.impl.SalaryItemServiceImpl;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.excel.ExcelUtilPlus;
@ -57,6 +60,10 @@ public class SalaryStatisticsEmployeeWrapper extends Service {
return ServiceUtil.getService(SalaryStatisticsEmployeeServiceImpl.class, user);
}
private SalaryItemService getSalaryItemService(User user) {
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
/**
* 员工列表
*
@ -164,13 +171,13 @@ public class SalaryStatisticsEmployeeWrapper extends Service {
if (record.containsKey(itemKey)) {
if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString()) && NumberUtils.isCreatable(record.get(itemKey).toString())) {
sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString()));
record.put(itemKey, ReportDataUtil.thousandthConvert(record.get(itemKey).toString()));
record.put(itemKey, record.get(itemKey).toString());
}
}
}
// 薪资项目合计
if (queryParam.isExport()) {
countResultMap.put(itemKey, ReportDataUtil.thousandthConvert(sumBigDecimal.toString()));
countResultMap.put(itemKey, sumBigDecimal.toString());
}
}
}
@ -264,39 +271,61 @@ public class SalaryStatisticsEmployeeWrapper extends Service {
queryParam.setExport(true);
Map<String, Object> resultMap = salaryList(queryParam);
List<WeaTableColumn> columns = (List<WeaTableColumn>)resultMap.get("columns");
List<SalaryItemPO> salaryItemList = ((List<SalaryItemPO>)resultMap.get("salaryItems"));
List<Map<String, Object>> resultList = ((PageInfo<Map<String, Object>>) resultMap.get("pageInfo")).getList();
Map<String, Object> countResult = (Map<String, Object>)resultMap.get("countResult");
Map<String, WeaTableColumn> columnMap = SalaryEntityUtil.convert2Map(columns, WeaTableColumn::getColumn);
List<WeaTableColumn> finalColumns = new ArrayList<>();
// 获取薪资项目保留小数位数
List<SalaryItemPO> salaryItemPOList = getSalaryItemService(user).listAll();
Map<String, SalaryItemPO> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItemPOList, item -> item.getId() + "_salaryItem");
List<Object> finalColumns = new ArrayList<>();
queryParam.getColumns().forEach(col -> {
WeaTableColumn column = columnMap.get(col);
if (column != null) {
finalColumns.add(column);
SalaryItemPO salaryItemPO = salaryItemMap.get(column.getColumn());
Integer pattern = salaryItemPO == null ? 0 : salaryItemPO.getPattern();
String dataType = salaryItemPO == null ? SalaryDataTypeEnum.STRING.getValue() : salaryItemPO.getDataType();
finalColumns.add(new WeaTableColumnGroup("100px", column.getText(), column.getColumn(), "false", pattern, dataType));
}
});
columns = finalColumns;
List<List<Object>> rowList = new ArrayList<>();
// 表头
rowList.add(columns.stream().map(WeaTableColumn::getText).collect(Collectors.toList()));
rowList.add(finalColumns);
// 数据
for (Map<String, Object> valueMap : resultList) {
List<Object> list = new ArrayList<>();
for (WeaTableColumn column : columns) {
list.add(Util.null2String(valueMap.get(column.getColumn())));
for (Object column : finalColumns) {
WeaTableColumnGroup col = (WeaTableColumnGroup)column;
if (col.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())) {
try {
list.add(new BigDecimal(Util.null2String(valueMap.get(col.getColumn()))));
} catch (Exception e) {
list.add(Util.null2String(valueMap.get(col.getColumn())));
}
} else {
list.add(Util.null2String(valueMap.get(col.getColumn())));
}
}
rowList.add(list);
}
// 合计
List<Object> sumRow = new ArrayList<>();
sumRow.add("总计");
for (int i = 1; i < columns.size(); i++) {
sumRow.add(Util.null2String(countResult.get(columns.get(i).getColumn())));
for (int i = 1; i < finalColumns.size(); i++) {
WeaTableColumnGroup weaTableColumnGroup = (WeaTableColumnGroup)finalColumns.get(i);
if (weaTableColumnGroup.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())) {
try {
sumRow.add(new BigDecimal(Util.null2String(countResult.get(weaTableColumnGroup.getColumn()))));
} catch (Exception e) {
sumRow.add(Util.null2String(countResult.get(weaTableColumnGroup.getColumn())));
}
} else {
sumRow.add(Util.null2String(countResult.get(weaTableColumnGroup.getColumn())));
}
}
rowList.add(sumRow);
return ExcelUtilPlus.genWorkbookV2(rowList, "薪资明细", true);
return ExcelUtilPlus.genWorkbookV2WithPattern(rowList, "薪资明细", true);
}
// public Map<String, Object> exportDetailList(SalaryStatisticsEmployeeDetailQueryParam queryParam) {

View File

@ -619,7 +619,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "薪资档案") + "-" + name);
loggerContext.setUser(user);
SalaryElogConfig.salaryArchiveLoggerTemplate.write(loggerContext);
return ExcelUtilPlus.genWorkbookV2WithPattern(rows, sheetName);
return ExcelUtilPlus.genWorkbookV2WithPattern(rows, sheetName, false);
}

View File

@ -6,11 +6,13 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.beans.BeanUtils;
import java.awt.Color;
import java.math.BigDecimal;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -70,7 +72,7 @@ public class ExcelUtilPlus {
}
public static XSSFWorkbook genWorkbookV2WithPattern(List<List<Object>> rowList, String sheetName) {
public static XSSFWorkbook genWorkbookV2WithPattern(List<List<Object>> rowList, String sheetName, boolean lastRowRed) {
XSSFWorkbook workbook = new XSSFWorkbook();
// 设置title样式
@ -102,6 +104,19 @@ public class ExcelUtilPlus {
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
XSSFCellStyle redCellStyle = workbook.createCellStyle();
XSSFFont redFont = workbook.createFont();
redFont.setFontName("宋体");
redFont.setFontHeightInPoints((short) 10);// 设置字体大小
redFont.setColor(new XSSFColor(new Color(0xFF3333), null));
redFont.setBold(true);
redCellStyle.setWrapText(true);
redCellStyle.setFont(redFont);// 选择需要用到的字体格式
redCellStyle.setBorderLeft(BorderStyle.THIN);
redCellStyle.setBorderRight(BorderStyle.THIN);
redCellStyle.setBorderTop(BorderStyle.THIN);
redCellStyle.setBorderBottom(BorderStyle.THIN);
XSSFSheet sheet = workbook.createSheet(sheetName);
//自适应宽度
sheet.autoSizeColumn(0, true);
@ -124,20 +139,38 @@ public class ExcelUtilPlus {
}
HashMap<Integer, XSSFCellStyle> numberCellStyleMap = new HashMap<Integer, XSSFCellStyle>();
HashMap<Integer, XSSFCellStyle> numberRedCellStyleMap = new HashMap<Integer, XSSFCellStyle>();
XSSFDataFormat df = workbook.createDataFormat();
patternList.stream().distinct().filter(a -> a != null).forEach(p -> {
String start = "0.";
if (p == 0) {
start = "0";
}
XSSFCellStyle numberRedCellStyle = workbook.createCellStyle();
// 不能copy在excel里编辑时背景变成了黑色
// BeanUtils.copyProperties(redCellStyle, numberRedCellStyle);
numberRedCellStyle.setWrapText(true);
numberRedCellStyle.setBorderLeft(BorderStyle.THIN);
numberRedCellStyle.setBorderRight(BorderStyle.THIN);
numberRedCellStyle.setBorderTop(BorderStyle.THIN);
numberRedCellStyle.setBorderBottom(BorderStyle.THIN);
numberRedCellStyle.setFont(redFont);
short format = df.getFormat(start + Stream.generate(() -> "0").limit(p).collect(Collectors.joining()) + "_ ");
numberRedCellStyle.setDataFormat(format);
numberRedCellStyleMap.put(p, numberRedCellStyle);
XSSFCellStyle numberCellStyle = workbook.createCellStyle();
BeanUtils.copyProperties(cellStyle, numberCellStyle);
// BeanUtils.copyProperties(cellStyle, numberCellStyle);
numberCellStyle.setFont(font);// 选择需要用到的字体格式
numberCellStyle.setWrapText(true);
numberCellStyle.setBorderLeft(BorderStyle.THIN);
numberCellStyle.setBorderRight(BorderStyle.THIN);
numberCellStyle.setBorderTop(BorderStyle.THIN);
numberCellStyle.setBorderBottom(BorderStyle.THIN);
numberCellStyle.setDataFormat(format);
numberCellStyleMap.put(p, numberCellStyle);
});
for (int rowIndex = 1; rowIndex < rowList.size(); rowIndex++) {
List<Object> infoList = rowList.get(rowIndex);
XSSFRow row = sheet.createRow(rowIndex);
@ -149,16 +182,25 @@ public class ExcelUtilPlus {
if (rowIndex == 0) {
cell.setCellStyle(titleCellStyle);
} else {
cell.setCellStyle(cellStyle);
if (lastRowRed && rowIndex == rowList.size() - 1) {
cell.setCellStyle(redCellStyle);
} else {
cell.setCellStyle(cellStyle);
}
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
} else if (o instanceof BigDecimal) {
if (lastRowRed && rowIndex == rowList.size() - 1) {
cell.setCellStyle(numberRedCellStyleMap.get(patternList.get(cellIndex)));
} else {
cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex)));
}
cell.setCellType(CellType.NUMERIC);
double value = o == null ? 0 : ((BigDecimal) o).doubleValue();
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());
cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex)));
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));