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; /** * 薪资项目 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @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 buildSalaryArchiveItemForm(Date effectiveTime, String adjustReason, String description) { // 控件数据 Map 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 buildSalaryArchiveItemAdjustDetailTable(List> tableData) { Map map = new HashMap<>(); // 表头 List columns = new ArrayList<>(); columns.add(SalaryI18nUtil.getI18nLabel(84960, "薪资项目")); columns.add(SalaryI18nUtil.getI18nLabel(85433, "调整前")); columns.add(SalaryI18nUtil.getI18nLabel(85434, "调整后")); // 获取所有可被引用的薪资项目 List salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); List> salaryItems = salaryItemList.stream().map(m -> { Map 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> 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> 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 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 adjustRecordList(SalaryItemAdjustRecordQueryParam queryParam) { // 获取所有可被引用的薪资项目 List salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); List salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); List listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds); PageInfo list = getSalaryArchiveItemService(user).salaryItemAdjustRecordListPage(queryParam, salaryItemIds); List listResult = list.getList(); //获取上次更改的记录 listResult.forEach(m -> { if (!org.springframework.util.CollectionUtils.isEmpty(listAll)) { listAll.removeIf(a -> a.getId().equals(m.getId())); } Optional 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 singleSalaryItemAdjustRecordList(SingleSalaryItemAdjustRecordQueryParam queryParam) { if (queryParam.getSalaryArchiveId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100425, "薪资档案id不能为空")); } // 获取所有可被引用的薪资项目 List salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); List salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); SalaryItemAdjustRecordQueryParam adjustRecordQueryParam = new SalaryItemAdjustRecordQueryParam(); BeanUtils.copyProperties(queryParam, adjustRecordQueryParam); //所有调整记录 List listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds); //操作记录 //根据条件分页查询调整记录 PageInfo adjustlistByParamPage = getSalaryArchiveItemService(user).salaryItemAdjustRecordListPage(adjustRecordQueryParam, salaryItemIds); List adjustPageList = adjustlistByParamPage.getList(); List resultList = Lists.newArrayList(); adjustPageList.forEach(m -> { if (CollectionUtils.isNotEmpty(listAll)) { listAll.removeIf(a -> a.getId().equals(m.getId())); } Optional 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 salaryItemPageIds = resultList.stream().map(SingleSalaryItemAdjustRecordListDTO::getSalaryItemId).collect(Collectors.toList()); List effectiveSalaryItems = getSalaryArchiveItemService(user).getEffectiveSalaryItems(queryParam.getSalaryArchiveId(), salaryItemPageIds); // 行记录按钮权限控制 for (int i = 0; i < resultList.size(); i++) { SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecord = resultList.get(i); Optional 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 listPage = new PageInfo(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); } }