线下对比表头改造成分组的样式

This commit is contained in:
Harryxzy 2023-11-15 17:12:52 +08:00
parent 2c12b10171
commit 97a5d4ab91
6 changed files with 137 additions and 43 deletions

View File

@ -23,7 +23,6 @@ import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.Column;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
@ -86,36 +85,77 @@ public class SalaryAcctResultBO {
// }
/**
* 构建薪资核算结果列表的表头线下对比
*
* @param salarySobItemAggregateDTO
* @return
*/
public static List<Column> buildTableColumns4ComparisonResult(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set<Long> excludeSalaryItemIds) {
List<Column> columns = Lists.newArrayList();
public static List<WeaTableColumnGroup> buildTableColumns4ComparisonResult(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set<Long> excludeSalaryItemIds) {
List<WeaTableColumnGroup> columns = Lists.newArrayList();
// 员工信息字段
for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
columns.add(new Column(salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldId()));
columns.add(new WeaTableColumnGroup("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldId()));
}
// 薪资项目分组下的薪资项目
for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) {
if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) {
continue;
}
List<WeaTableColumnGroup> childrenColumns = Lists.newArrayList();
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
continue;
}
columns.add(new Column(salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
}
WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns);
columns.add(weaTableColumnWapper);
}
// 没有分类的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
continue;
}
columns.add(new Column(salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
}
return columns;
}
/**
* 构建薪资核算结果列表的表头线下对比
*
* @param salarySobItemAggregateDTO
* @return
*/
public static List<WeaTableColumnGroup> buildTableColumns4ComparisonResultByGroup(SalarySobItemAggregateDTO salarySobItemAggregateDTO, Set<Long> excludeSalaryItemIds) {
List<WeaTableColumnGroup> columns = Lists.newArrayList();
// 员工信息字段
for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
columns.add(new WeaTableColumnGroup("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId(), salarySobEmpFieldDTO.getFieldId()));
}
// 薪资项目分组下的薪资项目
for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) {
if (CollectionUtils.isEmpty(salarySobItemGroupDTO.getItems())) {
continue;
}
List<WeaTableColumnGroup> childrenColumns = Lists.newArrayList();
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
continue;
}
childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
}
WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns);
columns.add(weaTableColumnWapper);
}
// 没有分类的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
if (excludeSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
continue;
}
columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), "" + salarySobItemDTO.getSalaryItemId()));
}
return columns;
}

View File

@ -1,6 +1,6 @@
package com.engine.salary.entity.salaryacct.dto;
import com.engine.salary.util.page.Column;
import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.util.page.PageInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -25,7 +25,7 @@ import java.util.Map;
public class SalaryComparisonResultListDTO {
//列表的表头
private List<Column> weaTableColumns;
private List<WeaTableColumnGroup> weaTableColumns;
//列表数据
private PageInfo<Map<String, Object>> data;

View File

@ -43,7 +43,6 @@ import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.excel.ExcelParseHelper;
import com.engine.salary.util.excel.ExcelSupport;
import com.engine.salary.util.excel.ExcelUtilPlus;
import com.engine.salary.util.page.Column;
import com.engine.salary.util.valid.ValidUtil;
import com.engine.salary.wrapper.SalarySobItemWrapper;
import com.google.common.collect.Lists;
@ -695,16 +694,30 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 查询薪资项目
List<SalaryItemPO> salaryItemPOS = getSalarySobItemService(user).listBySalarySobId4SalaryItem(salaryAcctRecordPO.getSalarySobId());
Set<String> salaryItemIds = SalaryEntityUtil.properties(salaryItemPOS, salaryItemPO -> "" + salaryItemPO.getId());
for (Column weaTableColumn : salaryComparisonResultListDTO.getWeaTableColumns()) {
for (WeaTableColumnGroup weaTableColumnGroup : salaryComparisonResultListDTO.getWeaTableColumns()) {
// 员工信息字段
if (employeeFieldCodeSet.contains(weaTableColumn.getKey())) {
headerList.add(weaTableColumn.getTitle());
}
// 薪资项目的表头
if (salaryItemIds.contains(weaTableColumn.getKey())) {
headerList.add(weaTableColumn.getTitle() + " (线上值)");
headerList.add(weaTableColumn.getTitle() + " (线下值)");
if (employeeFieldCodeSet.contains(weaTableColumnGroup.getColumn())) {
headerList.add(weaTableColumnGroup.getText());
} else {
// 薪资项目的表头
List<WeaTableColumnGroup> childrenList = weaTableColumnGroup.getChildren();
if (CollectionUtils.isEmpty(childrenList)) {
// 是否是无分类
if (salaryItemIds.contains(weaTableColumnGroup.getColumn())) {
headerList.add(weaTableColumnGroup.getText() + " (线上值)");
headerList.add(weaTableColumnGroup.getText() + " (线下值)");
}
} else {
for (WeaTableColumnGroup children : childrenList) {
if (salaryItemIds.contains(children.getColumn())) {
headerList.add(children.getText() + " (线上值)");
headerList.add(children.getText() + " (线下值)");
}
}
}
}
}
List<Map<String, Object>> resultMapList = salaryComparisonResultListDTO.getData().getList();
@ -713,16 +726,28 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
rows.add(headerList);
for (Map<String, Object> map : resultMapList) {
List<Object> row = Lists.newArrayList();
for (Column weaTableColumn : salaryComparisonResultListDTO.getWeaTableColumns()) {
for (WeaTableColumnGroup weaTableColumnGroup : salaryComparisonResultListDTO.getWeaTableColumns()) {
// 员工信息字段的值
if (employeeFieldCodeSet.contains(weaTableColumn.getKey())) {
row.add(map.get(weaTableColumn.getKey()));
if (employeeFieldCodeSet.contains(weaTableColumnGroup.getColumn())) {
row.add(map.get(weaTableColumnGroup.getColumn()));
}
// 薪资项目的值
if (salaryItemIds.contains(weaTableColumn.getKey())) {
Map tempMap = (Map) map.getOrDefault(weaTableColumn.getKey(), Collections.emptyMap());
row.add(tempMap.get("acctResultValue"));
row.add(tempMap.get("excelResultValue"));
List<WeaTableColumnGroup> childrenList = weaTableColumnGroup.getChildren();
if (CollectionUtils.isEmpty(childrenList)) {
// 是否是无分类
if (salaryItemIds.contains(weaTableColumnGroup.getColumn())) {
Map tempMap = (Map) map.getOrDefault(weaTableColumnGroup.getColumn(), Collections.emptyMap());
row.add(tempMap.get("acctResultValue"));
row.add(tempMap.get("excelResultValue"));
}
} else {
for (WeaTableColumnGroup children : childrenList) {
if (salaryItemIds.contains(children.getColumn())) {
Map tempMap = (Map) map.getOrDefault(children.getColumn(), Collections.emptyMap());
row.add(tempMap.get("acctResultValue"));
row.add(tempMap.get("excelResultValue"));
}
}
}
}
rows.add(row);
@ -775,12 +800,37 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
for (SalarySobItemDTO item : salarySobItemAggregateDTO.getItems()) {
headerList.add(item.getName());
}
// 无分类薪资项目id
List<String> noGroupItemIds = salarySobItemAggregateDTO.getItems().stream().map(dto -> String.valueOf(dto.getSalaryItemId())).collect(Collectors.toList());
// 查询列表的表头
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO);
List<Object> finalWeaTableColumns = new ArrayList<>();
finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(85429, "姓名")));
finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人")));
finalWeaTableColumns.add(new WeaTableColumnGroup("150", "部门", "部门"));
finalWeaTableColumns.add(new WeaTableColumnGroup("150", "手机号", "手机号"));
finalWeaTableColumns.add(new WeaTableColumnGroup("150", "工号", "工号"));
for (WeaTableColumnGroup tableColumn : weaTableColumns) {
WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) tableColumn;
if (columnGroupItem.getChildren() != null) {
columnGroupItem.setChildren(columnGroupItem.getChildren());
finalWeaTableColumns.add(columnGroupItem);
} else if (noGroupItemIds.contains(columnGroupItem.getColumn())) {
// 无分类
finalWeaTableColumns.add(columnGroupItem);
}
}
List<List<Object>> rows = new ArrayList<>();
rows.add(headerList);
rows.add(finalWeaTableColumns);
String sheetName = "线下对比结果导入模板";
// return ExcelUtil.genWorkbookV2(rows, sheetName);
return ExcelUtilPlus.genWorkbookV2(rows, sheetName);
// return ExcelUtilPlus.genWorkbookV2(rows, sheetName);
return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, false);
}
public Map<String, Object> importSalaryAcctResult(SalaryAcctImportParam param) {
@ -804,8 +854,8 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
try {
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
map.put("headers", ExcelSupport.getSheetHeader(sheet, 0));
map.put("list", ExcelParseHelper.parse2List(sheet, 1));
map.put("headers", ExcelSupport.getSheetHeader(sheet, 1));
map.put("list", ExcelParseHelper.parse2List(sheet, 2));
return map;
} finally {
@ -921,20 +971,20 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 表头
// List<String> headers = ExcelSupport.getSheetHeader(sheet, 0);
List<String> headers;
if (StringUtils.equals("importSalaryAcctResult", importType)) {
// if (StringUtils.equals("importSalaryAcctResult", importType)) {
headers = ExcelSupport.getSheetHeader(sheet, 1);
} else {
headers = ExcelSupport.getSheetHeader(sheet, 0);
}
// } else {
// headers = ExcelSupport.getSheetHeader(sheet, 0);
// }
// 处理数值
// List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
List<Map<String, Object>> data;
if (StringUtils.equals("importSalaryAcctResult", importType)) {
// if (StringUtils.equals("importSalaryAcctResult", importType)) {
data = ExcelParseHelper.parse2Map(sheet, 2, 1);
} else {
data = ExcelParseHelper.parse2Map(sheet, 1);
}
// } else {
// data = ExcelParseHelper.parse2Map(sheet, 1);
// }
if (CollectionUtils.isEmpty(headers)) {
throw new RuntimeException("表头为空");

View File

@ -2,6 +2,7 @@ package com.engine.salary.service.impl;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.encrypt.EncryptUtil;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO;
@ -27,7 +28,6 @@ import com.engine.salary.service.*;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.Column;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.google.common.collect.Lists;
@ -173,7 +173,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam);
if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) {
// 构建薪资核算结果列表表头
List<Column> weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResult(salarySobItemAggregateDTO, Collections.emptySet());
List<WeaTableColumnGroup> weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResultByGroup(salarySobItemAggregateDTO, Collections.emptySet());
// 构建列表数据
// 返回结果
return new SalaryComparisonResultListDTO().setWeaTableColumns(weaTableColumns).setData(new PageInfo<>());
@ -246,7 +246,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary
.collect(Collectors.toSet());
}
// 构建薪资核算结果列表表头
List<Column> weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResult(salarySobItemAggregateDTO, excludeSalaryItemIds);
List<WeaTableColumnGroup> weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResultByGroup(salarySobItemAggregateDTO, excludeSalaryItemIds);
// 返回结果
return new SalaryComparisonResultListDTO().setWeaTableColumns(weaTableColumns).setData(dtoPage);
}

View File

@ -696,7 +696,7 @@ public class SalaryAcctController {
@Produces(MediaType.APPLICATION_JSON)
public String listComparisonResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryComparisonResultQueryParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryComparisonResultQueryParam, PageInfo<Map<String, Object>>>(user).run(getSalaryComparisonResultWrapper(user)::listPage, param);
return new ResponseResult<SalaryComparisonResultQueryParam, Map<String, Object>>(user).run(getSalaryComparisonResultWrapper(user)::listPage, param);
}

View File

@ -12,6 +12,7 @@ import com.engine.salary.service.impl.SalaryComparisonResultServiceImpl;
import com.engine.salary.util.page.PageInfo;
import weaver.hrm.User;
import java.util.HashMap;
import java.util.Map;
/**
@ -41,13 +42,16 @@ public class SalaryComparisonResultWrapper extends Service {
* @param queryParam 列表查询条件
* @return
*/
public PageInfo<Map<String, Object>> listPage(SalaryComparisonResultQueryParam queryParam) {
public Map<String, Object> listPage(SalaryComparisonResultQueryParam queryParam) {
// 查询薪资核算线下对比列表
SalaryComparisonResultListDTO salaryComparisonResultListDTO = getSalaryComparisonResultService(user).listPageByParam(queryParam);
PageInfo<Map<String, Object>> pageInfo = salaryComparisonResultListDTO.getData();
pageInfo.setColumns(salaryComparisonResultListDTO.getWeaTableColumns());
return pageInfo;
Map<String, Object> datas = new HashMap<>();
datas.put("pageInfo", pageInfo);
datas.put("columns", salaryComparisonResultListDTO.getWeaTableColumns());
return datas;
}
}