//package com.engine.salary.service.impl; // //import com.alibaba.fastjson.JSONObject; //import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; //import com.engine.core.impl.Service; //import com.engine.salary.service.SalaryArchiveItemService; //import com.google.common.collect.Lists; //import com.weaver.common.base.entity.result.WeaResult; //import com.weaver.common.base.enumeration.result.WeaResultCodeEnum; //import com.weaver.common.batch.context.BatchExportContext; //import com.weaver.common.batch.entity.BatchCallbackMessage; //import com.weaver.common.batch.handler.BatchExportHandler; //import com.weaver.common.component.table.page.Page; //import com.weaver.common.distribution.genid.IdGenerator; //import com.weaver.hrm.salary.common.excel.ExcelSheetData; //import com.weaver.hrm.salary.common.excel.ExportExcelInfo; //import com.weaver.hrm.salary.dao.SalaryArchiveItemMapper; //import com.weaver.hrm.salary.dao.SalaryArchiveMapper; //import com.weaver.hrm.salary.dao.SalaryItemMapper; //import com.weaver.hrm.salary.entity.salaryarchive.dto.*; //import com.weaver.hrm.salary.entity.salaryarchive.param.*; //import com.weaver.hrm.salary.entity.salaryarchive.po.SalaryArchiveItemPO; //import com.weaver.hrm.salary.entity.salaryarchive.po.SalaryArchivePO; //import com.weaver.hrm.salary.entity.salaryitem.po.SalaryItemPO; //import com.weaver.hrm.salary.enums.SalaryOnOffEnum; //import com.weaver.hrm.salary.enums.SalaryUserStatusEnum; //import com.weaver.hrm.salary.enums.salaryarchive.SalaryArchiveItemAdjustReasonEnum; //import com.weaver.hrm.salary.exception.SalaryRunTimeException; //import com.weaver.hrm.salary.service.SalaryBatchService; //import com.weaver.hrm.salary.util.SalaryDateUtil; //import com.weaver.hrm.salary.util.SalaryI18nUtil; //import org.apache.commons.collections4.CollectionUtils; //import org.apache.commons.lang3.StringUtils; //import org.slf4j.Logger; //import org.slf4j.LoggerFactory; //import org.springframework.transaction.annotation.Transactional; // //import javax.annotation.Resource; //import java.text.SimpleDateFormat; //import java.time.LocalDate; //import java.time.LocalDateTime; //import java.util.*; //import java.util.stream.Collectors; // ///** // * 薪资档案薪资项目 // *

Copyright: Copyright (c) 2022

// *

Company: 泛微软件

// * // * @author qiantao // * @version 1.0 // **/ //public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchiveItemService { // private static final Logger log = LoggerFactory.getLogger(SalaryArchiveItemServiceImpl.class); // @Resource // private SalaryArchiveMapper salaryArchiveMapper; // @Resource // private SalaryItemMapper salaryItemMapper; // @Resource // private SalaryArchiveItemMapper salaryArchiveItemMapper; // @Resource // private SalaryBatchService salaryBatchService; // // @Override // public SalaryArchiveItemPO getById(Long salaryArchiveItemId, String tenantKey) { // return salaryArchiveItemMapper.getById(salaryArchiveItemId, tenantKey); // } // // /** // * 获取未生效 // * // * @param salaryArchiveId // * @param salaryItemIds // * @param tenantKey // * @return // */ // private List getIneffectiveSalaryItems(Long salaryArchiveId, List salaryItemIds, String tenantKey) { // // 没有薪资项目时,给个不存在的,否则加载所有不合理 // salaryItemIds = CollectionUtils.isEmpty(salaryItemIds)?Collections.singletonList(0L):salaryItemIds; // return new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) // .eq(SalaryArchiveItemPO::getDeleteType, 0) // .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) // .eq(SalaryArchiveItemPO::getSalaryArchiveId, salaryArchiveId) // .in(SalaryArchiveItemPO::getSalaryItemId, salaryItemIds) // .gt(SalaryArchiveItemPO::getEffectiveTime, LocalDate.now()) // .list(); // } // // /** // * 获取当前已生效 // * // * @param salaryArchiveId // * @param salaryItemIds // * @param tenantKey // * @return // */ // @Override // public List getEffectiveSalaryItems(Long salaryArchiveId, List salaryItemIds, String tenantKey) { // // 没有薪资项目时,给个不存在的,否则加载所有不合理 // salaryItemIds = CollectionUtils.isEmpty(salaryItemIds)?Collections.singletonList(0L):salaryItemIds; // return new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) // .eq(SalaryArchiveItemPO::getDeleteType, 0) // .eq(SalaryArchiveItemPO::getTenantKey, tenantKey) // .eq(SalaryArchiveItemPO::getSalaryArchiveId, salaryArchiveId) // .in(SalaryArchiveItemPO::getSalaryItemId, salaryItemIds) // .le(SalaryArchiveItemPO::getEffectiveTime, LocalDate.now()) // .orderByDesc(SalaryArchiveItemPO::getEffectiveTime) // .list(); // } // // @Override // public String getSalaryItemAdjustBeforeValue(SalaryItemAdjustBeforeParam adjustBeforeParam, Long currentEmployeeId, String currentTenantKey) { // WeaResult checkResult = SalaryItemAdjustBeforeParam.checkParam(adjustBeforeParam, currentEmployeeId, currentTenantKey); // if (checkResult.getCode() == WeaResultCodeEnum.ERROR.getCode()) { // return checkResult.getData(); // } // List archiveItemList; // if (adjustBeforeParam.getSalaryArchiveItemId()==null) { // archiveItemList = getEffectiveSalaryItems(adjustBeforeParam.getSalaryArchiveId(), Collections.singletonList(adjustBeforeParam.getSalaryItemId()), currentTenantKey); // } else { // SalaryArchiveItemPO salaryArchiveItem = salaryArchiveItemMapper.getById(adjustBeforeParam.getSalaryArchiveItemId(), currentTenantKey); // if (salaryArchiveItem == null) { // return ""; // } // // 如果不是当前记录的 // if (!salaryArchiveItem.getSalaryItemId().equals(adjustBeforeParam.getSalaryItemId())) { // archiveItemList = getEffectiveSalaryItems(adjustBeforeParam.getSalaryArchiveId(), Collections.singletonList(adjustBeforeParam.getSalaryItemId()), currentTenantKey); // } else { // archiveItemList = new LambdaQueryChainWrapper<>(salaryArchiveItemMapper) // .eq(SalaryArchiveItemPO::getDeleteType, 0) // .eq(SalaryArchiveItemPO::getTenantKey, currentTenantKey) // .eq(SalaryArchiveItemPO::getSalaryArchiveId, adjustBeforeParam.getSalaryArchiveId()) // .eq(SalaryArchiveItemPO::getSalaryItemId, salaryArchiveItem.getSalaryItemId()) // .lt(SalaryArchiveItemPO::getEffectiveTime, salaryArchiveItem.getEffectiveTime()) // .orderByDesc(SalaryArchiveItemPO::getEffectiveTime) // .list(); // } // } // // return CollectionUtils.isNotEmpty(archiveItemList)?archiveItemList.get(0).getItemValue():""; // } // // @Override // @Transactional(rollbackFor = Exception.class) // public String saveSalaryItem(SalaryArchiveItemSaveParam saveParam, Long employeeId, String tenantKey) { // // 检查参数 // SalaryArchiveItemSaveParam.checkParam(saveParam, employeeId, tenantKey); // // Long salaryArchiveId = saveParam.getSalaryArchiveId(); // // 获取所有可被引用的薪资项目 // List salaryItems = getCanAdjustSalaryItems(tenantKey); // // 待处理薪资项目 // List salaryArchiveItems = saveParam.getSalaryArchiveItems().stream().filter(e -> { // Optional optional = salaryItems.stream().filter(i -> i.getId().equals(e.getSalaryItemId())).findFirst(); // return optional.isPresent(); // }).collect(Collectors.toList()); // List salaryItemIds = salaryArchiveItems.stream().map(SalaryArchiveItemDetailSaveParam::getSalaryItemId).collect(Collectors.toList()); // // // 薪资档案 // SalaryArchivePO salaryArchive = salaryArchiveMapper.getById(salaryArchiveId, tenantKey); // // 获取当前已生效数据 // List effectiveSalaryItems = getEffectiveSalaryItems(salaryArchiveId, salaryItemIds, tenantKey); // // // 获取未生效数据 // List ineffectiveSalaryItems = getIneffectiveSalaryItems(salaryArchiveId, salaryItemIds, tenantKey); // // 待保存生效时间 // LocalDate saveEffectiveTime = saveParam.getEffectiveTime(); // // 当天 // LocalDate today = LocalDate.now(); // // 当前时间 // LocalDateTime nowTime = LocalDateTime.now(); // // List effectiveSalaryItemDels = Lists.newArrayList(); // List salaryArchiveItemNews = Lists.newArrayList(); // salaryArchiveItems.forEach(e -> { // // 已生效 // List effectiveList = effectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList()); // // 当前已生效 // SalaryArchiveItemPO effectiveSalaryItem = CollectionUtils.isNotEmpty(effectiveList)&&effectiveList.size()>0?effectiveList.get(0):null; // // 当前已生效的前一次调整 // SalaryArchiveItemPO effectiveBeforeSalaryItem = CollectionUtils.isNotEmpty(effectiveList)&&effectiveList.size()>1?effectiveList.get(1):null; // // 未生效 // Optional optionalIneffective = ineffectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).findFirst(); // SalaryArchiveItemPO ineffectiveSalaryItem = optionalIneffective.orElse(null); // // // 1.检验是否可以调整 // if (effectiveSalaryItem != null) { // // 当前已经生效的时间 // LocalDate effectiveTime = effectiveSalaryItem.getEffectiveTime(); // // 1.1 如果早于<当前已生效 // if (saveEffectiveTime.isBefore(effectiveTime)) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100429, "生效日期不可早于当前已生效的调整日期")); // // 1.2 如果等于当前已生效 // } else if (saveEffectiveTime.isEqual(effectiveTime)) { // if (effectiveBeforeSalaryItem !=null && effectiveBeforeSalaryItem.getItemValue().equals(e.getAdjustValue())) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100432, "调整前后不可相同")); // } // if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100434, "与未生效的调整后不可相同")); // } // // 1.3 如果>已经生效且<=今天 // } else if (saveEffectiveTime.isAfter(effectiveTime) && !saveEffectiveTime.isAfter(today)) { // if (effectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100432, "调整前后不可相同")); // } // if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100434, "与未生效的调整后不可相同")); // } // // 1.4 如果>今天 // } else if (saveEffectiveTime.isAfter(today) && effectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100432, "调整前后不可相同")); // } // } else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100434, "与未生效的调整后不可相同")); // } // // 2.数据处理 // if (effectiveSalaryItem != null && saveEffectiveTime.isEqual(effectiveSalaryItem.getEffectiveTime())) { // effectiveSalaryItemDels.add(effectiveSalaryItem.getId()); // } // if (ineffectiveSalaryItem != null && saveEffectiveTime.isAfter(today)) { // effectiveSalaryItemDels.add(ineffectiveSalaryItem.getId()); // } // salaryArchiveItemNews.add(buildInsert(salaryArchive, e.getSalaryItemId(), e.getAdjustValue(), saveParam, nowTime, employeeId, tenantKey)); // }); // // // 落库处理 // if (CollectionUtils.isNotEmpty(effectiveSalaryItemDels)) { // salaryArchiveItemMapper.deleteBatchIds(effectiveSalaryItemDels); // } // if (CollectionUtils.isNotEmpty(salaryArchiveItemNews)) { // salaryArchiveItemMapper.batchInsert(salaryArchiveItemNews); // } // // return StringUtils.EMPTY; // } // // /** // * 插入 // * // * @param salaryArchive // * @param saveParam // * @param nowTime // * @param employeeId // * @param tenantKey // */ // private SalaryArchiveItemPO buildInsert(SalaryArchivePO salaryArchive, Long salaryItemId, String adjustValue, SalaryArchiveItemSaveParam saveParam, LocalDateTime nowTime, Long employeeId, String tenantKey) { // return SalaryArchiveItemPO.builder() // .id(IdGenerator.generate()) // .salaryArchiveId(saveParam.getSalaryArchiveId()) // .employeeId(salaryArchive.getEmployeeId()) // .effectiveTime(saveParam.getEffectiveTime()) // .adjustReason(saveParam.getAdjustReason().getValue()) // .description(saveParam.getDescription()) // .salaryItemId(salaryItemId) // // 调整后 // .itemValue(adjustValue) // .operator(employeeId) // .operateTime(nowTime) // .createTime(LocalDateTime.now()) // .updateTime(LocalDateTime.now()) // .creator(employeeId) // .tenantKey(tenantKey) // .build(); // } // // @Override // @Transactional(rollbackFor = Exception.class) // public String deleteSalaryItem(Long salaryArchiveItemId, Long currentEmployeeId, String currentTenantKey) { // SalaryArchiveItemPO salaryArchiveItem = salaryArchiveItemMapper.getById(salaryArchiveItemId, currentTenantKey); // if (salaryArchiveItem == null) { // return StringUtils.EMPTY; // } // if (salaryArchiveItem.getEffectiveTime().isAfter(LocalDate.now())) { // salaryArchiveItem.setDeleteType(1); // // 删除未生效数据 // salaryArchiveItemMapper.updateById(salaryArchiveItem); // } // return StringUtils.EMPTY; // } // // /** // * 获取所有可被引用的薪资项目 // * // * @param tenantKey // * @return // */ // @Override // public List getCanAdjustSalaryItems(String tenantKey) { // return new LambdaQueryChainWrapper<>(salaryItemMapper) // .eq(SalaryItemPO::getDeleteType, 0) // .eq(SalaryItemPO::getTenantKey, tenantKey) // .eq(SalaryItemPO::getUseInEmployeeSalary, SalaryOnOffEnum.ON.getValue()) // .list(); // } // // // // @Override // public Page salaryItemAdjustRecordListPage(Page page, SalaryItemAdjustRecordQueryParam queryParam, List salaryItemIds, String tenantKey) { // salaryArchiveItemMapper.salaryItemAdjustRecordList(page, queryParam, salaryItemIds, tenantKey); // return page; // } // // @Override // public List salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam, List salaryItemIds, String tenantKey) { // return salaryArchiveItemMapper.salaryItemAdjustRecordList(queryParam, salaryItemIds, tenantKey); // } // // @Override // public void exportAdjustRecordList(Map map, String username, String eteamsId, SalaryItemAdjustRecordQueryParam queryParam, Long currentEmployeeId, String currentTenantKey) { // List sheetList = new ArrayList<>(); // // ExcelSheetData excelSheetData = new ExcelSheetData(); // // 1.工作簿名称 // String nameI18n = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 100438, "薪资项目调整记录"); // excelSheetData.setSheetName(nameI18n); // String[] header = { // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85429, "姓名"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 86187, "员工状态"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 86185, "部门"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 84960, "薪资项目"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85433, "调整前"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85434, "调整后"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85431, "调整原因"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85904, "生效日期"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85435, "操作人"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85436, "操作时间"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 84961, "备注") // }; // // 2.表头 // excelSheetData.setHeaders(Collections.singletonList(header)); // // 获取所有可被引用的薪资项目 // List salaryItemList = getCanAdjustSalaryItems(currentTenantKey); // List salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); // // 获取记录 // List list = salaryArchiveItemMapper.salaryItemAdjustRecordList(queryParam, salaryItemIds, currentTenantKey); // List listAll = salaryArchiveItemMapper.salaryItemAdjustRecordList(SalaryItemAdjustRecordQueryParam.builder().build(), salaryItemIds, currentTenantKey); // // 人员信息赋值 // 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(), currentEmployeeId, currentTenantKey)); // m.setAdjustReason(SalaryArchiveItemAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason(), currentEmployeeId, currentTenantKey)); // }); // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // List> rows = new ArrayList<>(); // for (SalaryItemAdjustRecordListDTO dto : list) { // List row = new ArrayList<>(); // row.add(dto.getUsername()); // row.add(dto.getEmployeeStatus()); // row.add(dto.getDepartmentName()); // row.add(dto.getAdjustItem()); // row.add(dto.getAdjustBefore()); // row.add(dto.getAdjustAfter()); // row.add(dto.getAdjustReason()); // row.add(dto.getEffectiveTime()+""); // row.add(dto.getOperator()); // row.add(format.format(dto.getOperateTime())); // row.add(dto.getDescription()); // rows.add(row); // } // // 3.表数据 // excelSheetData.setRows(rows); // // sheetList.add(excelSheetData); // // salaryBatchService.simpleExportExcel(ExportExcelInfo.builder() // .bizId(map.get("biz").toString()) // .flag(true) // .userId(currentEmployeeId) // .eteamsId(eteamsId) // .tenantKey(currentTenantKey) // .operator(username) // .module(map.get("module").toString()) // .fileName(nameI18n + SalaryDateUtil.getFormatLocalDateTime(LocalDateTime.now())) // .handlerName(map.get("function").toString()) // .dataType(nameI18n) // .function(map.get("function").toString()).build(), sheetList); // } // // @BatchExportHandler("exportSalaryArchiveItemAdjustRecord") // public void exportSalaryArchiveItemAdjustRecordHandler() { // BatchCallbackMessage message = BatchExportContext.getBatchCallbackMessage(); // log.info("接受到薪资项目操作记录导出的结果:{}", JSONObject.toJSONString(message)); // } //}