285 lines
13 KiB
Java
285 lines
13 KiB
Java
package com.engine.salary.wrapper;
|
|
|
|
import com.engine.common.util.ServiceUtil;
|
|
import com.engine.core.impl.Service;
|
|
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveItemFormDTO;
|
|
import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO;
|
|
import com.engine.salary.entity.salaryarchive.dto.SingleSalaryItemAdjustRecordListDTO;
|
|
import com.engine.salary.entity.salaryarchive.param.SalaryArchiveItemSaveParam;
|
|
import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustBeforeParam;
|
|
import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustRecordQueryParam;
|
|
import com.engine.salary.entity.salaryarchive.param.SingleSalaryItemAdjustRecordQueryParam;
|
|
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO;
|
|
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
|
|
import com.engine.salary.enums.SalaryUserStatusEnum;
|
|
import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum;
|
|
import com.engine.salary.exception.SalaryRunTimeException;
|
|
import com.engine.salary.service.SalaryArchiveItemService;
|
|
import com.engine.salary.service.impl.SalaryArchiveItemServiceImpl;
|
|
import com.engine.salary.util.SalaryI18nUtil;
|
|
import com.engine.salary.util.page.PageInfo;
|
|
import com.google.common.collect.Lists;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
import org.springframework.beans.BeanUtils;
|
|
import weaver.hrm.User;
|
|
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* 薪资项目
|
|
* <p>Copyright: Copyright (c) 2022</p>
|
|
* <p>Company: 泛微软件</p>
|
|
*
|
|
* @author qiantao
|
|
* @version 1.0
|
|
**/
|
|
|
|
public class SalaryArchiveItemWrapper extends Service {
|
|
|
|
private SalaryArchiveItemService getSalaryArchiveItemService(User user) {
|
|
return (SalaryArchiveItemService) ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user);
|
|
}
|
|
|
|
/**
|
|
* 构建薪资项目基础信息表单
|
|
*
|
|
* @param effectiveTime
|
|
* @param adjustReason
|
|
* @param description
|
|
* @return
|
|
*/
|
|
private Map<String, Object> buildSalaryArchiveItemForm(Date effectiveTime, String adjustReason, String description) {
|
|
|
|
// 控件数据
|
|
Map<String, Object> data = new HashMap<>();
|
|
data.put("effectiveTime", effectiveTime + "");
|
|
data.put("adjustReason", adjustReason);
|
|
data.put("description", description);
|
|
data.put("adjustReasonList", SalaryArchiveItemAdjustReasonEnum.getList());
|
|
|
|
return data;
|
|
}
|
|
|
|
/**
|
|
* 构建薪资档案调整明细
|
|
*
|
|
* @return
|
|
*/
|
|
private Map<String, Object> buildSalaryArchiveItemAdjustDetailTable(List<Map<String, Object>> tableData) {
|
|
Map<String, Object> map = new HashMap<>();
|
|
// 表头
|
|
List<String> columns = new ArrayList<>();
|
|
columns.add(SalaryI18nUtil.getI18nLabel(84960, "薪资项目"));
|
|
columns.add(SalaryI18nUtil.getI18nLabel(85433, "调整前"));
|
|
columns.add(SalaryI18nUtil.getI18nLabel(85434, "调整后"));
|
|
// 获取所有可被引用的薪资项目
|
|
List<SalaryItemPO> salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems();
|
|
List<Map<String, Object>> salaryItems = salaryItemList.stream().map(m -> {
|
|
Map<String, Object> salaryItemMap = new LinkedHashMap<>();
|
|
salaryItemMap.put("id", String.valueOf(m.getId()));
|
|
salaryItemMap.put("content", m.getName());
|
|
return salaryItemMap;
|
|
}).collect(Collectors.toList());
|
|
|
|
map.put("columns", columns);
|
|
map.put("list", tableData);
|
|
map.put("salaryItemList", salaryItems);
|
|
|
|
return map;
|
|
}
|
|
|
|
/**
|
|
* 获取薪资项目调整前的值
|
|
*
|
|
* @param adjustBeforeParam
|
|
* @return
|
|
*/
|
|
public String getSalaryItemAdjustBeforeValue(SalaryItemAdjustBeforeParam adjustBeforeParam) {
|
|
return getSalaryArchiveItemService(user).getSalaryItemAdjustBeforeValue(adjustBeforeParam);
|
|
}
|
|
|
|
public SalaryArchiveItemFormDTO getSalaryItemForm(Long salaryArchiveId) {
|
|
|
|
// 调整明细数据
|
|
List<Map<String, Object>> tableData = Lists.newArrayList();
|
|
|
|
return SalaryArchiveItemFormDTO.builder()
|
|
.salaryArchiveId(salaryArchiveId)
|
|
.salaryArchiveItemForm(buildSalaryArchiveItemForm(null, null, null))
|
|
.salaryArchiveItemDetail(buildSalaryArchiveItemAdjustDetailTable(tableData))
|
|
.build();
|
|
}
|
|
|
|
|
|
/**
|
|
* 通过薪资档案的薪资项目id获取薪资项目调整表单
|
|
*
|
|
* @param salaryArchiveItemId
|
|
* @return
|
|
*/
|
|
public SalaryArchiveItemFormDTO getSalaryItemFormBySalaryArchiveItemId(Long salaryArchiveItemId) {
|
|
if (salaryArchiveItemId == null) {
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100427, "薪资档案的薪资项目id不能为空"));
|
|
}
|
|
SalaryArchiveItemPO salaryArchiveItem = getSalaryArchiveItemService(user).getById(salaryArchiveItemId);
|
|
if (salaryArchiveItem == null) {
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100428, "该薪资档案的薪资项目的调整记录不存在"));
|
|
}
|
|
Long salaryArchiveId = salaryArchiveItem.getSalaryArchiveId();
|
|
Date effectiveTime;
|
|
String adjustReason;
|
|
String description;
|
|
// 调整明细数据
|
|
List<Map<String, Object>> tableData = Lists.newArrayList();
|
|
// 获取调整前
|
|
String archiveItemBeforeValue = getSalaryArchiveItemService(user).getSalaryItemAdjustBeforeValue(SalaryItemAdjustBeforeParam.builder()
|
|
.salaryArchiveId(salaryArchiveItem.getSalaryArchiveId())
|
|
.salaryArchiveItemId(salaryArchiveItem.getId())
|
|
.salaryItemId(salaryArchiveItem.getSalaryItemId())
|
|
.build());
|
|
|
|
effectiveTime = salaryArchiveItem.getEffectiveTime();
|
|
adjustReason = salaryArchiveItem.getAdjustReason();
|
|
description = salaryArchiveItem.getDescription();
|
|
Map<String, Object> map = new HashMap<>(3);
|
|
map.put("salaryItem", String.valueOf(salaryArchiveItem.getSalaryItemId()));
|
|
map.put("salaryBefore", archiveItemBeforeValue);
|
|
map.put("adjustAfter", salaryArchiveItem.getItemValue());
|
|
tableData.add(map);
|
|
|
|
return SalaryArchiveItemFormDTO.builder()
|
|
.salaryArchiveId(salaryArchiveId)
|
|
.salaryArchiveItemForm(buildSalaryArchiveItemForm(effectiveTime, adjustReason, description))
|
|
.salaryArchiveItemDetail(buildSalaryArchiveItemAdjustDetailTable(tableData))
|
|
.build();
|
|
}
|
|
|
|
/**
|
|
* 保存薪资项目调整
|
|
*
|
|
* @param saveParam
|
|
* @return
|
|
*/
|
|
public String saveSalaryItem(SalaryArchiveItemSaveParam saveParam) {
|
|
return getSalaryArchiveItemService(user).saveSalaryItem(saveParam);
|
|
}
|
|
|
|
/**
|
|
* 删除薪资项目调整
|
|
*
|
|
* @param salaryArchiveItemId
|
|
* @return
|
|
*/
|
|
public String deleteSalaryItem(Long salaryArchiveItemId) {
|
|
return getSalaryArchiveItemService(user).deleteSalaryItem(salaryArchiveItemId);
|
|
}
|
|
|
|
|
|
/**
|
|
* 薪资项目调整记录列表
|
|
*
|
|
* @param queryParam
|
|
* @return
|
|
*/
|
|
public PageInfo<SalaryItemAdjustRecordListDTO> adjustRecordList(SalaryItemAdjustRecordQueryParam queryParam) {
|
|
// 获取所有可被引用的薪资项目
|
|
List<SalaryItemPO> salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems();
|
|
List<Long> salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
|
|
|
|
List<SalaryItemAdjustRecordListDTO> listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds);
|
|
PageInfo<SalaryItemAdjustRecordListDTO> list = getSalaryArchiveItemService(user).salaryItemAdjustRecordListPage(queryParam, salaryItemIds);
|
|
List<SalaryItemAdjustRecordListDTO> listResult = list.getList();
|
|
//获取上次更改的记录
|
|
listResult.forEach(m -> {
|
|
if (!org.springframework.util.CollectionUtils.isEmpty(listAll)) {
|
|
listAll.removeIf(a -> a.getId().equals(m.getId()));
|
|
}
|
|
Optional<SalaryItemAdjustRecordListDTO> optional = listAll.stream().filter(f -> f.getSalaryArchiveId().equals(m.getSalaryArchiveId()) && f.getSalaryItemId().equals(m.getSalaryItemId())).findFirst();
|
|
m.setAdjustBefore(optional.isPresent() ? optional.get().getAdjustAfter() : "");
|
|
|
|
m.setEmployeeStatus(SalaryUserStatusEnum.getDefaultLabelByValue(m.getEmployeeStatus()));
|
|
m.setAdjustReason(SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason()));
|
|
});
|
|
|
|
return list;
|
|
}
|
|
|
|
/**
|
|
* 单个档案的薪资项目调整记录列表
|
|
*
|
|
* @param queryParam
|
|
* @return
|
|
*/
|
|
public PageInfo<SingleSalaryItemAdjustRecordListDTO> singleSalaryItemAdjustRecordList(SingleSalaryItemAdjustRecordQueryParam queryParam) {
|
|
if (queryParam.getSalaryArchiveId() == null) {
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100425, "薪资档案id不能为空"));
|
|
}
|
|
// 获取所有可被引用的薪资项目
|
|
List<SalaryItemPO> salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems();
|
|
List<Long> salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
|
|
|
|
SalaryItemAdjustRecordQueryParam adjustRecordQueryParam = new SalaryItemAdjustRecordQueryParam();
|
|
BeanUtils.copyProperties(queryParam, adjustRecordQueryParam);
|
|
|
|
//所有调整记录
|
|
List<SalaryItemAdjustRecordListDTO> listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds);
|
|
|
|
//操作记录
|
|
//根据条件分页查询调整记录
|
|
PageInfo<SalaryItemAdjustRecordListDTO> adjustlistByParamPage = getSalaryArchiveItemService(user).salaryItemAdjustRecordListPage(adjustRecordQueryParam, salaryItemIds);
|
|
List<SalaryItemAdjustRecordListDTO> adjustPageList = adjustlistByParamPage.getList();
|
|
List<SingleSalaryItemAdjustRecordListDTO> resultList = Lists.newArrayList();
|
|
adjustPageList.forEach(m -> {
|
|
if (CollectionUtils.isNotEmpty(listAll)) {
|
|
listAll.removeIf(a -> a.getId().equals(m.getId()));
|
|
}
|
|
Optional<SalaryItemAdjustRecordListDTO> optional = listAll.stream().filter(f -> f.getSalaryArchiveId().equals(m.getSalaryArchiveId()) && f.getSalaryItemId().equals(m.getSalaryItemId())).findFirst();
|
|
m.setAdjustBefore(optional.isPresent() ? optional.get().getAdjustAfter() : "");
|
|
|
|
m.setAdjustReason(SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason()));
|
|
|
|
SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecordList = new SingleSalaryItemAdjustRecordListDTO();
|
|
BeanUtils.copyProperties(m, singleSalaryItemAdjustRecordList);
|
|
resultList.add(singleSalaryItemAdjustRecordList);
|
|
});
|
|
|
|
List<Long> salaryItemPageIds = resultList.stream().map(SingleSalaryItemAdjustRecordListDTO::getSalaryItemId).collect(Collectors.toList());
|
|
List<SalaryArchiveItemPO> effectiveSalaryItems = getSalaryArchiveItemService(user).getEffectiveSalaryItems(queryParam.getSalaryArchiveId(), salaryItemPageIds);
|
|
// 行记录按钮权限控制
|
|
for (int i = 0; i < resultList.size(); i++) {
|
|
SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecord = resultList.get(i);
|
|
Optional<SalaryArchiveItemPO> optional = effectiveSalaryItems.stream().filter(f -> f.getSalaryItemId().equals(singleSalaryItemAdjustRecord.getSalaryItemId())).findFirst();
|
|
Date effectiveDate = optional.map(SalaryArchiveItemPO::getEffectiveTime).orElse(null);
|
|
|
|
if (effectiveDate != null && singleSalaryItemAdjustRecord.getEffectiveTime().before(effectiveDate)) {
|
|
singleSalaryItemAdjustRecord.setCanOperator(Boolean.FALSE);
|
|
} else {
|
|
singleSalaryItemAdjustRecord.setCanOperator(Boolean.TRUE);
|
|
}
|
|
}
|
|
|
|
|
|
PageInfo<SingleSalaryItemAdjustRecordListDTO> listPage = new PageInfo<SingleSalaryItemAdjustRecordListDTO>(resultList, SingleSalaryItemAdjustRecordListDTO.class);
|
|
listPage.setTotal(adjustlistByParamPage.getTotal());
|
|
listPage.setPageNum(adjustlistByParamPage.getPageNum());
|
|
listPage.setPageSize(adjustlistByParamPage.getPageSize());
|
|
|
|
|
|
return listPage;
|
|
}
|
|
|
|
/**
|
|
* 导出薪资项目调整记录列表
|
|
*
|
|
* @param queryParam
|
|
* @return
|
|
*/
|
|
public XSSFWorkbook exportAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam) {
|
|
return getSalaryArchiveItemService(user).exportAdjustRecordList(queryParam);
|
|
}
|
|
|
|
|
|
}
|