Merge branch 'release/2.15.1.2407.01' into custom/京贵投资
This commit is contained in:
commit
0f6184fc9b
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Reference in New Issue