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.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.SalaryArchiveItemService; import com.engine.salary.service.SalaryItemService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.impl.SalaryArchiveItemServiceImpl; import com.engine.salary.service.impl.SalaryItemServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.proxy.SalaryArchiveItemWrapperProxy; 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 implements SalaryArchiveItemWrapperProxy { private SalaryArchiveItemService getSalaryArchiveItemService(User user) { return (SalaryArchiveItemService) ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user); } private SalaryItemService getSalaryItemService(User user) { return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user); } private TaxAgentService getTaxAgentService(User user) { return (TaxAgentService) ServiceUtil.getService(TaxAgentServiceImpl.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(); Set taxAgentIds = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()) .stream().map(TaxAgentPO::getId) .collect(Collectors.toSet()); List> salaryItems = salaryItemList.stream() .filter(po -> getSalaryItemService(user).filterInRange(taxAgentIds, po)) .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 checkSaveSalaryItem(SalaryArchiveItemSaveParam saveParam) { return getSalaryArchiveItemService(user).checkSaveSalaryItem(saveParam); } /** * 保存薪资项目调整 * * @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 (!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(UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(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())) .filter(f ->f.getSalaryItemId().equals(m.getSalaryItemId())) .filter(f->f.getEffectiveTime().before(m.getEffectiveTime())) .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; } /** * @return void * @description 单个档案的薪资项目调整的编辑 * @author Harryxzy * @date 2022/11/14 11:46 */ @Override public String editSingleSalaryItem(SalaryArchiveItemSaveParam salaryArchiveItemSaveParam) { return getSalaryArchiveItemService(user).editSingleSalaryItem(salaryArchiveItemSaveParam); } /** * 导出薪资项目调整记录列表 * * @param queryParam * @return */ public XSSFWorkbook exportAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam) { return getSalaryArchiveItemService(user).exportAdjustRecordList(queryParam); } /** * @return void * @description 获取单个档案的单个薪资项目调整信息 * @author Harryxzy * @date 2022/11/11 14:39 */ public SalaryArchiveItemFormDTO getSingleSalaryItemInfo(SingleSalaryItemAdjustRecordListDTO queryParam) { SalaryArchiveItemPO byId = getSalaryArchiveItemService(user).getById(queryParam.getId()); if (Objects.isNull(byId)) { throw new SalaryRunTimeException("该薪资项目调整信息不存在"); } // 获取所有可被引用的薪资项目 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 adjustPageList = getSalaryArchiveItemService(user).salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().salaryArchiveId(byId.getSalaryArchiveId()).build(), salaryItemIds); 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(byId.getSalaryArchiveId(), salaryItemPageIds); // 行记录按钮权限控制 for (int i = 0; i < resultList.size(); i++) { SingleSalaryItemAdjustRecordListDTO singleSalaryItemAdjustRecord = resultList.get(i); if (singleSalaryItemAdjustRecord.getId().equals(queryParam.getId())) { // 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); // } singleSalaryItemAdjustRecord.setCanOperator(Boolean.TRUE); Map map = new HashMap<>(3); map.put("salaryItem", String.valueOf(singleSalaryItemAdjustRecord.getSalaryItemId())); map.put("salaryBefore", singleSalaryItemAdjustRecord.getAdjustBefore()); map.put("adjustAfter", singleSalaryItemAdjustRecord.getAdjustAfter()); // 调整明细数据 List> tableData = Lists.newArrayList(); tableData.add(map); return SalaryArchiveItemFormDTO.builder() .canOperator(singleSalaryItemAdjustRecord.getCanOperator()) .salaryArchiveId(byId.getSalaryArchiveId()) .salaryArchiveItemForm(buildSalaryArchiveItemForm(byId.getEffectiveTime(), byId.getAdjustReason(), byId.getDescription())) .salaryArchiveItemDetail(buildSalaryArchiveItemAdjustDetailTable(tableData)) .build(); } } return null; } }