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.param.SalaryArchiveItemSaveParam; import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustBeforeParam; import com.engine.salary.entity.salaryarchive.param.SalaryItemAdjustRecordQueryParam; 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.google.common.collect.Lists; import org.springframework.stereotype.Component; import weaver.hrm.User; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; /** * 薪资项目 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ @Component public class SalaryArchiveItemWrapper extends Service { private SalaryArchiveItemService getSalaryArchiveItemService(User user) { return (SalaryArchiveItemService) ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user); } private ExecutorService taskExecutor; /** * 构建薪资项目基础信息表单 * * @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); return data; } /** * 构建薪资档案调整明细 * * @return */ private Map buildSalaryArchiveItemAdjustDetailTable(List> tableData) { Map map = new HashMap<>(); // 表头 List headers = new ArrayList<>(); headers.add(SalaryI18nUtil.getI18nLabel(84960, "薪资项目")); headers.add(SalaryI18nUtil.getI18nLabel(85433, "调整前")); headers.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("headers", headers); map.put("list", tableData); map.put("salaryItemList", salaryItems); return map; } /** * 获取薪资项目调整前的值 * * @param adjustBeforeParam * @return */ public String getSalaryItemAdjustBeforeValue(SalaryItemAdjustBeforeParam adjustBeforeParam) { return getSalaryArchiveItemService(user).getSalaryItemAdjustBeforeValue(adjustBeforeParam); } /** * 通过薪资档案的薪资项目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 List 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); List list = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(queryParam, salaryItemIds); //获取上次更改的记录 list.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 WeaTable 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); // PageInfo page = getSalaryArchiveItemService(user).salaryItemAdjustRecordListPage(adjustRecordQueryParam, salaryItemIds); // // PageInfo listPage = new PageInfo(); // // List listAll = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds); // List list = page.getList(); // List resultList = Lists.newArrayList(); // list.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.setAdjustReason(SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason())); // // SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecordList = new SingleSalaryItemAdjustRecordListDTO(); // BeanUtils.copyProperties(m, singleSalaryItemAdjustRecordList); // resultList.add(singleSalaryItemAdjustRecordList); // }); // listPage.setList(resultList); // // WeaTable weaTable = FormatManager.getInstance() // .genTable(SingleSalaryItemAdjustRecordListDTO.class, listPage); // weaTable.setModule("hrmsalary"); // List salaryItemPageIds = listPage.getList().stream().map(SingleSalaryItemAdjustRecordListDTO::getSalaryItemId).collect(Collectors.toList()); // List effectiveSalaryItems = getSalaryArchiveItemService(user).getEffectiveSalaryItems(queryParam.getSalaryArchiveId(), salaryItemPageIds); // // 行记录按钮权限控制 // for (int i = 0; i < listPage.getList().size(); i++) { // SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecord = (SingleSalaryItemAdjustRecordListDTO)listPage.getList().get(i); // Optional optional = effectiveSalaryItems.stream().filter(f -> f.getSalaryItemId().equals(singleSalaryItemAdjustRecord.getSalaryItemId())).findFirst(); // Date effectiveDate = optional.map(SalaryArchiveItemPO::getEffectiveTime).orElse(null); // List permissions = weaTable.getOperatesPermission().get(i); // for (int j = 0; j < permissions.size(); j++) { // Permission permission = permissions.get(j); // if (effectiveDate != null && singleSalaryItemAdjustRecord.getEffectiveTime().isBefore(effectiveDate)) { // permission.setVisible(false); // permission.setDisabled(true); // } // if (j > 0 && singleSalaryItemAdjustRecord.getEffectiveTime().equals(effectiveDate)) { // permission.setVisible(false); // permission.setDisabled(false); // } // } // } // return weaTable; // } // // /** // * 导出薪资项目调整记录列表 // * // * @param queryParam // * @param employeeId // * @param tenantKey // * @return // */ // public Map exportAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam, Long employeeId, String tenantKey) { // // 构建异步导出参数 // Map map = salaryBatchService.buildeExportParam("exportSalaryArchiveItemAdjustRecord"); // // String username = UserContext.getCurrentUser().getUsername(); // String eteamsId = TenantRpcContext.getEteamsId(); // taskExecutor.execute(() -> { // try { // DSTenantKeyThreadVar.tenantKey.set(tenantKey); // // getSalaryArchiveItemService(user).exportAdjustRecordList(map, username, eteamsId, queryParam, employeeId, tenantKey); // } finally { // DSTenantKeyThreadVar.tenantKey.remove(); // } // }); // return map; // } }