package com.engine.salary.service.impl; import com.engine.core.impl.Service; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.salaryarchive.dto.TaxAgentAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveTaxAgentQueryParam; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveTaxAgentSaveParam; import com.engine.salary.entity.salaryarchive.param.TaxAgentAdjustRecordQueryParam; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.archive.SalaryArchiveMapper; import com.engine.salary.mapper.archive.SalaryArchiveTaxAgentMapper; import com.engine.salary.service.SalaryArchiveTaxAgentService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.PageUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Date; import java.util.List; /** * 薪资档案-个税扣缴义务人 *

Copyright: Copyright (c) 2022

*

Company: 泛微软件

* * @author qiantao * @version 1.0 **/ public class SalaryArchiveTaxAgentServiceImpl extends Service implements SalaryArchiveTaxAgentService { private static final Logger log = LoggerFactory.getLogger(SalaryArchiveTaxAgentServiceImpl.class); private SalaryArchiveMapper salaryArchiveMapper; private SalaryArchiveTaxAgentMapper salaryArchiveTaxAgentMapper; private TaxAgentService taxAgentService; // private SalaryBatchService salaryBatchService; @Override public SalaryArchiveTaxAgentPO getById(Long salaryArchiveTaxAgentId) { return salaryArchiveTaxAgentMapper.getById(salaryArchiveTaxAgentId); } @Override public PageInfo taxAgentAdjustRecordListPage(TaxAgentAdjustRecordQueryParam queryParam) { PageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); List taxAgentAdjustRecordListDTOS = salaryArchiveTaxAgentMapper.taxAgentAdjustRecordList(queryParam); PageInfo pageInfo = new PageInfo(taxAgentAdjustRecordListDTOS, TaxAgentAdjustRecordListDTO.class); return pageInfo; } @Override public List taxAgentAdjustRecordList(TaxAgentAdjustRecordQueryParam queryParam) { return salaryArchiveTaxAgentMapper.taxAgentAdjustRecordList(queryParam); } /** * 获取未生效 * * @param salaryArchiveId * @return */ private SalaryArchiveTaxAgentPO getIneffectiveTaxAgent(Long salaryArchiveId) { List ineffectiveTaxAgentList = salaryArchiveTaxAgentMapper.getIneffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam.builder().salaryArchiveId(salaryArchiveId).effectiveTime(new Date()).build()); return CollectionUtils.isNotEmpty(ineffectiveTaxAgentList) ? ineffectiveTaxAgentList.get(0) : null; } /** * 获取当前已生效 * * @param salaryArchiveId * @return */ @Override public SalaryArchiveTaxAgentPO getEffectiveTaxAgent(Long salaryArchiveId) { List effectiveTaxAgentList = salaryArchiveTaxAgentMapper.getEffectiveTaxAgentList(SalaryArchiveTaxAgentQueryParam.builder().salaryArchiveId(salaryArchiveId).effectiveTime(new Date()).build()); return CollectionUtils.isNotEmpty(effectiveTaxAgentList) ? effectiveTaxAgentList.get(0) : null; } @Override public String saveTaxAgent(SalaryArchiveTaxAgentSaveParam saveParam) { // 校验参数 SalaryArchiveTaxAgentSaveParam.checkParam(saveParam); // 薪资档案 SalaryArchivePO salaryArchive = salaryArchiveMapper.getById(saveParam.getSalaryArchiveId()); // 获取当前已生效 SalaryArchiveTaxAgentPO effectiveTaxAgent = getEffectiveTaxAgent(saveParam.getSalaryArchiveId()); // 获取当前已生效之前的 List salaryArchiveTaxAgents = Lists.newArrayList(); if (effectiveTaxAgent != null) { salaryArchiveTaxAgents = salaryArchiveTaxAgentMapper.getTaxAgentLtTimeBySalaryArchiveId( SalaryArchiveTaxAgentQueryParam .builder() .salaryArchiveId(saveParam.getSalaryArchiveId()) .effectiveTime(effectiveTaxAgent.getEffectiveTime()) .build()); } // 获取未生效数据 SalaryArchiveTaxAgentPO ineffectiveTaxAgent = getIneffectiveTaxAgent(saveParam.getSalaryArchiveId()); // 待保存生效时间 Date saveEffectiveTime = saveParam.getEffectiveTime(); // 当天 Date today = new Date(); // 1.检验是否可以调整 if (effectiveTaxAgent != null) { // 当前已经生效的时间 Date effectiveTime = effectiveTaxAgent.getEffectiveTime(); // 1.1 如果早于<当前已生效 if (saveEffectiveTime.before(effectiveTime)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期")); // 1.2 如果等于当前已生效 } else if (saveEffectiveTime.equals(effectiveTime)) { if (CollectionUtils.isNotEmpty(salaryArchiveTaxAgents) && salaryArchiveTaxAgents.get(0).getTaxAgentId().equals(saveParam.getTaxAgentId())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同")); } if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(saveParam.getTaxAgentId())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同")); } // 1.3 如果>已经生效且<=今天 } else if (saveEffectiveTime.after(effectiveTime) && !saveEffectiveTime.after(today)) { if (effectiveTaxAgent.getTaxAgentId().equals(saveParam.getTaxAgentId())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同")); } if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(saveParam.getTaxAgentId())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同")); } // 1.4 如果>今天 } else if (saveEffectiveTime.after(today) && effectiveTaxAgent.getTaxAgentId().equals(saveParam.getTaxAgentId())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同")); } } else if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(saveParam.getTaxAgentId())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同")); } // 2.数据处理 // 2.数据处理,有的就先删后增 if (effectiveTaxAgent != null && saveEffectiveTime.equals(effectiveTaxAgent.getEffectiveTime())) { salaryArchiveTaxAgentMapper.delete(SalaryArchiveTaxAgentPO.builder().id(effectiveTaxAgent.getId()).build()); } if (ineffectiveTaxAgent != null && saveEffectiveTime.after(today)) { salaryArchiveTaxAgentMapper.delete(SalaryArchiveTaxAgentPO.builder().id(ineffectiveTaxAgent.getId()).build()); } insertTaxAgent(salaryArchive, saveParam); // 3.todo 日志处理 return StringUtils.EMPTY; } /** * 插入 * * @param salaryArchive * @param saveParam */ private void insertTaxAgent(SalaryArchivePO salaryArchive, SalaryArchiveTaxAgentSaveParam saveParam) { long employeeId = user.getUID(); Date now = new Date(); SalaryArchiveTaxAgentPO salaryArchiveTaxAgent = SalaryArchiveTaxAgentPO.builder() // .id(IdGenerator.generate()) .salaryArchiveId(saveParam.getSalaryArchiveId()) .employeeId(salaryArchive.getEmployeeId()) .effectiveTime(saveParam.getEffectiveTime()) .adjustReason(saveParam.getAdjustReason()) // 调整后 .taxAgentId(saveParam.getTaxAgentId()) .operator(employeeId) .operateTime(now) .createTime(now) .updateTime(now) .creator(employeeId) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) .build(); salaryArchiveTaxAgentMapper.insertIgnoreNull(salaryArchiveTaxAgent); } @Override public String deleteTaxAgent(Long salaryArchiveTaxAgentId) { SalaryArchiveTaxAgentPO salaryArchiveTaxAgent = salaryArchiveTaxAgentMapper.getById(salaryArchiveTaxAgentId); if (salaryArchiveTaxAgent == null) { return StringUtils.EMPTY; } if (salaryArchiveTaxAgent.getEffectiveTime().after(new Date())) { salaryArchiveTaxAgent.setDeleteType(1); // 删除未生效数据 salaryArchiveTaxAgentMapper.delete(salaryArchiveTaxAgent); } return StringUtils.EMPTY; } @Override public XSSFWorkbook exportAdjustRecordList(TaxAgentAdjustRecordQueryParam queryParam) { return null; // // 1.工作簿名称 // String nameI18n = SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 99978, "个税扣缴义务人调整记录"); // excelSheetData.setSheetName(nameI18n); // String[] header = { // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 85429, "姓名"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 86187, "员工状态"), // SalaryI18nUtil.getI18nLabel(currentTenantKey, currentEmployeeId, 86185, "部门"), // 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 list = salaryArchiveTaxAgentMapper.taxAgentAdjustRecordList(queryParam, currentTenantKey); // List listAll = salaryArchiveTaxAgentMapper.taxAgentAdjustRecordList(TaxAgentAdjustRecordQueryParam.builder().build(), currentTenantKey); // // 个税扣缴义务人 // Collection taxAgentList = taxAgentService.findAll(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())).findFirst(); // m.setAdjustBefore(optional.isPresent() ? optional.get().getAdjustAfter() : ""); // Optional optionalBefore = taxAgentList.stream().filter(t -> t.getId().toString().equals(m.getAdjustBefore())).findFirst(); // m.setAdjustBefore(optionalBefore.isPresent() ? optionalBefore.get().getName() : ""); // Optional optionalAfter = taxAgentList.stream().filter(t -> t.getId().toString().equals(m.getAdjustAfter())).findFirst(); // m.setAdjustAfter(optionalAfter.isPresent() ? optionalAfter.get().getName() : ""); // // m.setEmployeeStatus(SalaryUserStatusEnum.getDefaultLabelByValue(m.getEmployeeStatus(), currentEmployeeId, currentTenantKey)); // m.setAdjustReason(SalaryArchiveTaxAgentAdjustReasonEnum.getDefaultLabelByValue(m.getAdjustReason(), currentEmployeeId, currentTenantKey)); // }); // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // List> rows = new ArrayList<>(); // for (TaxAgentAdjustRecordListDTO dto : list) { // List row = new ArrayList<>(); // row.add(dto.getUsername()); // row.add(dto.getEmployeeStatus()); // row.add(dto.getDepartmentName()); // 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); } @Override public SalaryArchiveTaxAgentPO getAdjustBeforeTaxAgent(SalaryArchiveTaxAgentPO salaryArchiveTaxAgent) { List salaryArchiveTaxAgents = salaryArchiveTaxAgentMapper.getAdjustBeforeTaxAgent( SalaryArchiveTaxAgentPO .builder() .salaryArchiveId(salaryArchiveTaxAgent.getSalaryArchiveId()) .effectiveTime(salaryArchiveTaxAgent.getEffectiveTime()) .build()); return CollectionUtils.isNotEmpty(salaryArchiveTaxAgents) ? salaryArchiveTaxAgents.get(0) : null; } }