weaver-hrm-salary/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl...

632 lines
40 KiB
Java
Raw Normal View History

2022-04-08 19:08:59 +08:00
package com.engine.salary.service.impl;
2022-04-12 19:25:19 +08:00
import com.engine.common.util.ServiceUtil;
2022-04-08 19:08:59 +08:00
import com.engine.core.impl.Service;
2022-04-29 17:15:22 +08:00
import com.engine.salary.cache.SalaryCacheKey;
2022-04-08 19:08:59 +08:00
import com.engine.salary.common.LocalDateRange;
2022-05-31 16:02:41 +08:00
import com.engine.salary.encrypt.salaryacct.SalaryAcctResultPOEncrypt;
2022-04-08 19:08:59 +08:00
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
2022-04-11 20:17:47 +08:00
import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO;
import com.engine.salary.entity.report.bo.SalaryAcctResultReportBO;
import com.engine.salary.entity.report.po.SalaryAcctResultReportPO;
2022-04-11 20:17:47 +08:00
import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculateBO;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculatePriorityBO;
2022-04-08 19:08:59 +08:00
import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO;
import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO;
2022-04-11 20:17:47 +08:00
import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO;
2022-04-08 19:08:59 +08:00
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO;
2022-04-11 20:17:47 +08:00
import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam;
2022-04-08 19:08:59 +08:00
import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctResultSaveParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
2022-04-11 20:17:47 +08:00
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultTempPO;
2022-04-28 15:02:11 +08:00
import com.engine.salary.entity.salaryformula.ExpressFormula;
2022-04-08 19:08:59 +08:00
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.dto.*;
2022-08-24 10:31:42 +08:00
import com.engine.salary.entity.salarysob.po.*;
2022-05-31 16:41:11 +08:00
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
2022-04-11 20:17:47 +08:00
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
2022-04-08 19:08:59 +08:00
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper;
import com.engine.salary.service.*;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
2022-04-12 19:25:19 +08:00
import com.engine.salary.util.db.MapperProxyFactory;
2022-04-08 19:08:59 +08:00
import com.engine.salary.util.page.PageInfo;
2022-04-11 20:17:47 +08:00
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
2022-04-11 20:17:47 +08:00
import com.weaver.util.threadPool.ThreadPoolUtil;
import com.weaver.util.threadPool.constant.ModulePoolEnum;
import com.weaver.util.threadPool.entity.LocalRunnable;
2022-04-08 19:08:59 +08:00
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
2022-04-11 20:17:47 +08:00
import org.apache.commons.collections4.MapUtils;
2022-04-08 19:08:59 +08:00
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
2022-04-08 19:08:59 +08:00
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
2022-04-12 19:25:19 +08:00
import weaver.hrm.User;
2022-04-08 19:08:59 +08:00
2022-04-11 20:17:47 +08:00
import java.math.BigDecimal;
2022-04-08 19:08:59 +08:00
import java.util.*;
2022-04-11 20:17:47 +08:00
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingDeque;
2022-04-08 19:08:59 +08:00
import java.util.stream.Collectors;
/**
* 薪资核算结果
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Slf4j
public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctResultService {
2022-04-29 17:15:22 +08:00
private SalaryAcctResultMapper getSalaryAcctResultMapper() {
2022-04-12 19:25:19 +08:00
return MapperProxyFactory.getProxy(SalaryAcctResultMapper.class);
}
2022-04-29 17:15:22 +08:00
2022-04-12 19:25:19 +08:00
private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) {
return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-04-12 19:25:19 +08:00
private SalarySobItemService getSalarySobItemService(User user) {
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-04-12 19:25:19 +08:00
private SalaryItemService getSalaryItemService(User user) {
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-04-12 19:25:19 +08:00
private SalarySobEmpFieldService getSalarySobEmpFieldService(User user) {
return ServiceUtil.getService(SalarySobEmpFieldServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-04-12 19:25:19 +08:00
private SalarySobService getSalarySobService(User user) {
return ServiceUtil.getService(SalarySobServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-04-12 19:25:19 +08:00
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-05-31 21:05:59 +08:00
private TaxAgentService getTaxAgentService(User user) {
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
2022-05-31 16:41:11 +08:00
}
2022-04-08 19:08:59 +08:00
2022-04-12 19:25:19 +08:00
private SalaryEmployeeService getSalaryEmployeeService(User user) {
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-04-12 19:25:19 +08:00
private SalaryFormulaService getSalaryFormulaService(User user) {
return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-04-12 19:25:19 +08:00
private SalarySobAdjustRuleService getSalarySobAdjustRuleService(User user) {
return ServiceUtil.getService(SalarySobAdjustRuleServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-08-24 10:31:42 +08:00
private SalarySobItemHideService getSalarySobItemHideService(User user) {
return (SalarySobItemHideService) ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user);
}
2022-04-12 19:25:19 +08:00
private SalaryAcctCalculateService getSalaryAcctCalculateService(User user) {
return ServiceUtil.getService(SalaryAcctCalculateServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
private SalaryAcctProgressService getSalaryAcctProgressService(User user) {
return ServiceUtil.getService(SalaryAcctProgressServiceImpl.class, user);
2022-04-29 17:15:22 +08:00
}
2022-04-08 19:08:59 +08:00
private DataSourceTransactionManager dataSourceTransactionManager;
2022-04-12 19:25:19 +08:00
private SalaryAcctResultTempService getSalaryAcctResultTempService(User user) {
return ServiceUtil.getService(SalaryAcctResultTempServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-07 16:54:10 +08:00
// private LoggerTemplate salaryAcctRecordLoggerTemplate;
2022-04-08 19:08:59 +08:00
2022-04-28 15:02:11 +08:00
private SIAccountService getSIAccountService(User user) {
return ServiceUtil.getService(SIAccountServiceImpl.class, user);
2022-04-28 15:02:11 +08:00
}
2022-04-08 19:08:59 +08:00
2022-04-12 19:25:19 +08:00
private AttendQuoteFieldService getAttendQuoteFieldService(User user) {
return ServiceUtil.getService(AttendQuoteFieldServiceImpl.class, user);
}
private SalaryAcctReportService getSalaryAcctReportService(User user) {
return ServiceUtil.getService(SalaryAcctReportServiceImpl.class, user);
2022-04-12 19:25:19 +08:00
}
2022-04-29 17:15:22 +08:00
2022-08-24 10:31:42 +08:00
private SalarySobItemGroupService getSalarySobItemGroupService(User user) {
return (SalarySobItemGroupService) ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user);
}
2022-04-12 19:25:19 +08:00
private SalaryCheckResultService salaryCheckResultService;
2022-04-08 19:08:59 +08:00
@Override
public List<SalaryAcctResultPO> listBySalaryAcctRecordIds(Collection<Long> salaryAcctRecordIds) {
if (CollectionUtils.isEmpty(salaryAcctRecordIds)) {
return Collections.emptyList();
}
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).build());
2022-05-31 16:02:41 +08:00
SalaryAcctResultPOEncrypt.decryptList(salaryAcctResultPOS);
2022-05-24 09:23:17 +08:00
return salaryAcctResultPOS;
2022-04-08 19:08:59 +08:00
}
@Override
public List<SalaryAcctResultPO> listBySalaryAcctEmployeeId(Long salaryAcctEmployeeId) {
2022-05-24 09:23:17 +08:00
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpId(salaryAcctEmployeeId).build());
2022-05-31 16:02:41 +08:00
SalaryAcctResultPOEncrypt.decryptList(salaryAcctResultPOS);
2022-05-24 09:23:17 +08:00
// 解密
return salaryAcctResultPOS;
2022-04-08 19:08:59 +08:00
}
@Override
public List<SalaryAcctResultPO> listBySalaryAcctEmployeeIds(Collection<Long> salaryAcctEmployeeIds) {
if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) {
return Collections.emptyList();
}
2022-05-24 09:23:17 +08:00
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpIds(salaryAcctEmployeeIds).build());
// 解密
2022-06-02 17:01:26 +08:00
SalaryAcctResultPOEncrypt.decryptList(salaryAcctResultPOS);
2022-05-24 09:23:17 +08:00
return salaryAcctResultPOS;
2022-04-08 19:08:59 +08:00
}
@Override
public List<SalaryAcctResultPO> listBySalaryAcctRecordIdsAndEmployeeIds(Collection<Long> salaryAcctRecordIds, Collection<Long> employeeIds) {
if (CollectionUtils.isEmpty(salaryAcctRecordIds) || CollectionUtils.isEmpty(employeeIds)) {
return Collections.emptyList();
}
2022-05-24 09:23:17 +08:00
List<SalaryAcctResultPO> salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).employeeIds(employeeIds).build());
2022-05-31 16:02:41 +08:00
SalaryAcctResultPOEncrypt.decryptList(salaryAcctResultPOS);
2022-05-24 09:23:17 +08:00
return salaryAcctResultPOS;
2022-04-08 19:08:59 +08:00
}
@Override
public SalaryAcctResultDetailDTO getBySalaryAcctEmployeeId(Long salaryAcctEmployeeId) {
// 查询薪资核算人员
2022-04-12 19:25:19 +08:00
SalaryAcctEmployeePO salaryAcctEmployeePO = getSalaryAcctEmployeeService(user).getById(salaryAcctEmployeeId);
2022-04-08 19:08:59 +08:00
if (Objects.isNull(salaryAcctEmployeePO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "薪资核算人员不存在或已被删除"));
}
2022-08-24 10:31:42 +08:00
//----------------------------------------------
// 查询薪资账套的薪资项目分类
List<SalarySobItemGroupPO> salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobIdWithItemHide(salaryAcctEmployeePO.getSalarySobId());
// 获取关闭显示的分类
List<Long> hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salaryAcctEmployeePO.getSalarySobId()).isGroup(1).build());
// 过滤关闭显示的薪资项目分类
salarySobItemGroupPOS = salarySobItemGroupPOS.stream().filter(group -> !(hideGroupIDs.contains(group.getId()))).collect(Collectors.toList());
// 获取薪资项目分类ID
List<Long> salarySobItemGroupIds = salarySobItemGroupPOS.stream().map(SalarySobItemGroupPO::getId).collect(Collectors.toList());
// 查询薪资账套的薪资项目副本(已经过滤关闭分类显示按钮的薪资项目)
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).listBySalarySobIdAndGroupId(salaryAcctEmployeePO.getSalarySobId(),salarySobItemGroupIds);
//----------------------------------------------
2022-04-08 19:08:59 +08:00
// 查询薪资核算所用薪资账套的薪资项目副本
2022-08-24 10:31:42 +08:00
// List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctEmployeePO.getSalarySobId());
// 获取关闭显示的薪资项目
List<Long> hideItemIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salaryAcctEmployeePO.getSalarySobId()).isGroup(0).build());
// 过滤薪资项目
salarySobItemPOS = salarySobItemPOS.stream().filter(item->!(hideItemIDs.contains(item.getSalaryItemId())) ).collect(Collectors.toList());
2022-04-08 19:08:59 +08:00
// 查询薪资项目
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId);
2022-04-12 19:25:19 +08:00
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds);
2022-04-08 19:08:59 +08:00
// 查询薪资核算所用薪资账套的人员信息字段
2022-04-12 19:25:19 +08:00
List<SalarySobEmpFieldPO> salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctEmployeePO.getSalarySobId());
2022-04-08 19:08:59 +08:00
// 查询人员信息
2022-04-12 19:25:19 +08:00
DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salaryAcctEmployeePO.getEmployeeId());
2022-04-08 19:08:59 +08:00
// 查询薪资核算结果
List<SalaryAcctResultPO> salaryAcctResultPOS = listBySalaryAcctEmployeeId(salaryAcctEmployeeId);
// 查询个税扣缴义务人
2022-05-31 16:41:11 +08:00
TaxAgentPO taxAgent = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId());
2022-08-24 10:31:42 +08:00
2022-04-08 19:08:59 +08:00
// 转换成薪资核算结果详情dto
return SalaryAcctResultBO.convert2DetailDTO(simpleEmployee, taxAgent, salaryAcctEmployeePO, salarySobEmpFieldPOS, salarySobItemPOS, salaryItemPOS, salaryAcctResultPOS);
}
@Override
public PageInfo<Map<String, Object>> listPageByParam(SalaryAcctResultQueryParam queryParam) {
// 查询薪资核算人员(分页)
2022-04-12 19:25:19 +08:00
PageInfo<SalaryAcctEmployeePO> page = getSalaryAcctEmployeeService(user).listPageByResultQueryParam(queryParam);
2022-04-08 19:08:59 +08:00
// 查询薪资核算结果
List<Map<String, Object>> data = listBySalaryAcctEmployees(page.getList(), queryParam);
// 薪资核算结果的分页结果
PageInfo<Map<String, Object>> resultPage = new PageInfo<>();
resultPage.setList(data);
2022-04-19 19:32:09 +08:00
resultPage.setTotal(page.getTotal());
resultPage.setPageNum(page.getPageNum());
resultPage.setPageSize(page.getPageSize());
2022-04-08 19:08:59 +08:00
return resultPage;
}
@Override
public List<Map<String, Object>> listByParam(SalaryAcctResultQueryParam queryParam) {
// 查询薪资核算人员
2022-04-12 19:25:19 +08:00
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam);
2022-04-08 19:08:59 +08:00
// 查询薪资核算结果
return listBySalaryAcctEmployees(salaryAcctEmployeePOS, queryParam);
}
/**
* 根据薪资核算人员查询薪资核算结果
*
* @param salaryAcctEmployeePOS 薪资核算人员
* @param queryParam 列表查询条件
* @return
*/
private List<Map<String, Object>> listBySalaryAcctEmployees(List<SalaryAcctEmployeePO> salaryAcctEmployeePOS, SalaryAcctResultQueryParam queryParam) {
2022-04-08 19:08:59 +08:00
if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) {
return Collections.emptyList();
}
// 查询薪资核算记录
2022-04-12 19:25:19 +08:00
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
2022-04-08 19:08:59 +08:00
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
// 查询薪资核算所用的薪资账套的员工信息字段
2022-04-12 19:25:19 +08:00
List<SalarySobEmpFieldPO> salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
2022-04-08 19:08:59 +08:00
// 查询薪资核算所用薪资账套的薪资项目
2022-04-12 19:25:19 +08:00
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
2022-04-08 19:08:59 +08:00
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId);
2022-04-12 19:25:19 +08:00
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds);
2022-04-08 19:08:59 +08:00
// 查询薪资核算结果
Set<Long> salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId);
List<SalaryAcctResultPO> salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds);
// 查询人员信息
List<Long> employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList());
2022-04-12 19:25:19 +08:00
List<DataCollectionEmployee> simpleEmployees = getSalaryEmployeeService(user).listByIds(employeeIds);
2022-04-08 19:08:59 +08:00
// 查询个税扣缴义务人
Set<Long> taxAgentIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getTaxAgentId);
2022-05-31 16:41:11 +08:00
List<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds);
2022-04-08 19:08:59 +08:00
// 判断是否存在合并计税
Set<Long> salaryAcctEmployeeIds4ConsolidatedTax;
if (StringUtils.isNotEmpty(queryParam.getConsolidatedTaxation())) {
// 如果查询条件中含有"合并计税"那么在入参中的salaryAcctEmployeePOS就已经全部都是存在合并计税的人员了前面已经过滤了无需再次查询合并计税的人员
salaryAcctEmployeeIds4ConsolidatedTax = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId);
} else {
// 如果查询条件中没有包含"合并计税",那么就需要查询出存在合并计税的人,标记给前端
SalaryAcctEmployeeQueryParam accEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder().salaryAcctRecordId(queryParam.getSalaryAcctRecordId()).ids(SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId)).build();
2022-04-12 19:25:19 +08:00
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS4ConsolidatedTax = getSalaryAcctEmployeeService(user).listByParam4ConsolidatedTax(accEmployeeQueryParam);
2022-04-08 19:08:59 +08:00
salaryAcctEmployeeIds4ConsolidatedTax = SalaryEntityUtil.properties(salaryAcctEmployeePOS4ConsolidatedTax, SalaryAcctEmployeePO::getId);
}
// 查询公式详情
Set<Long> formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId);
2022-04-12 19:25:19 +08:00
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);
2022-04-08 19:08:59 +08:00
Map<Long, String> expressFormulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula);
Map<Long, String> customParameters = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getSalaryItemId, salarySobItemPO -> {
if (salarySobItemPO.getFormulaId() <= 0) {
return SalaryI18nUtil.getI18nLabel(92004, "输入/导入");
}
return expressFormulaMap.getOrDefault(salarySobItemPO.getFormulaId(), StringUtils.EMPTY);
});
// 转换成薪资核算结果列表
return SalaryAcctResultBO.buildTableData(salaryItemPOS, salarySobEmpFieldPOS, simpleEmployees, salaryAcctEmployeePOS, salaryAcctResultPOS, taxAgentPOS, salaryAcctEmployeeIds4ConsolidatedTax, customParameters);
2022-04-08 19:08:59 +08:00
}
@Override
public ConsolidatedTaxDetailDTO getConsolidatedTaxDetail(Long salaryAcctEmployeeId) {
// 查询当前的薪资核算人员
2022-04-12 19:25:19 +08:00
SalaryAcctEmployeePO salaryAcctEmployeePO = getSalaryAcctEmployeeService(user).getById(salaryAcctEmployeeId);
2022-04-08 19:08:59 +08:00
if (Objects.isNull(salaryAcctEmployeePO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "薪资核算人员不存在或已被删除"));
}
// 查询当前的薪资核算人员的个税扣缴义务人
2022-05-31 16:41:11 +08:00
TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId());
2022-04-08 19:08:59 +08:00
// 查询当前的薪资核算人员的人员信息
2022-04-12 19:25:19 +08:00
DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salaryAcctEmployeePO.getEmployeeId());
2022-04-08 19:08:59 +08:00
// 查询当前的薪资核算记录
2022-04-12 19:25:19 +08:00
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctEmployeePO.getSalaryAcctRecordId());
2022-04-08 19:08:59 +08:00
// 查询当前薪资核算记录所用的薪资账套
2022-04-12 19:25:19 +08:00
SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId());
2022-04-08 19:08:59 +08:00
// 当前薪资核算记录所用的薪资账套的员工信息字段
2022-04-12 19:25:19 +08:00
List<SalarySobEmpFieldPO> salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salarySobPO.getId());
2022-04-08 19:08:59 +08:00
List<SalaryAcctRecordPO> salaryAcctRecordPOS = Collections.singletonList(salaryAcctRecordPO);
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = Collections.singletonList(salaryAcctEmployeePO);
// 如果当前薪资核算记录所用的薪资账套的薪资类型是工资薪金,代表可能存在合并计税
if (Objects.equals(salarySobPO.getIncomeCategory(), IncomeCategoryEnum.WAGES_AND_SALARIES.getValue())) {
// 查询所有薪资类型为工资薪金的账套
2022-04-12 19:25:19 +08:00
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByIncomeCategory(IncomeCategoryEnum.WAGES_AND_SALARIES);
2022-04-08 19:08:59 +08:00
// 查询相同税款所属期内的薪资类型为工资薪金的账套的所有核算记录
Set<Long> salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId);
LocalDateRange taxCycleDateRange = SalaryDateUtil.localDate2Range(salaryAcctRecordPO.getTaxCycle());
2022-04-12 19:25:19 +08:00
salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, taxCycleDateRange);
2022-04-08 19:08:59 +08:00
// 查询当前薪资核算人员所涉及的合并计税的所有薪资核算人员
Set<Long> salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId);
salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByRecordIdsAndEmpIdAndTaxAgentId(salaryAcctRecordIds, salaryAcctEmployeePO.getEmployeeId(), salaryAcctEmployeePO.getTaxAgentId());
2022-04-08 19:08:59 +08:00
}
// 查询薪资核算人员的薪资核算结果
Set<Long> salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId);
List<SalaryAcctResultPO> salaryAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds);
// 查询薪资核算人员所有合并计税的薪资核算记录所用的账套
Set<Long> salarySobIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getSalarySobId);
2022-04-12 19:25:19 +08:00
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByIds(salarySobIds);
2022-04-08 19:08:59 +08:00
// 查询薪资项目所引用的薪资项目
2022-04-12 19:25:19 +08:00
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).listBySalarySobIds(salarySobIds);
2022-04-08 19:08:59 +08:00
// 查询薪资项目
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId);
2022-04-12 19:25:19 +08:00
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds);
2022-04-08 19:08:59 +08:00
// 转换成合并计税详情dto
return SalaryAcctResultBO.convert2ConsolidatedTaxDetailDTO(simpleEmployee, taxAgentPO, salarySobEmpFieldPOS, salaryItemPOS, salaryAcctEmployeePOS, salarySobPOS, salaryAcctRecordPOS, salaryAcctResultPOS);
2022-04-08 19:08:59 +08:00
}
@Override
public Map<String, SalaryAcctResultListColumnDTO> getColumnBySalaryAcctRecordId(Long salaryAcctRecordId) {
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId);
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
Map<String, SalaryAcctResultListColumnDTO> resultMap = Maps.newHashMap();
// 查询薪资核算使用的薪资账套下的薪资项目
SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateBySalarySobId(salaryAcctRecordPO.getSalarySobId());
for (SalarySobItemIncomeCategoryDTO incomeCategoryDTO : salarySobItemAggregateDTO.getIncomeCategories()) {
for (SalarySobItemGroupDTO salarySobItemGroupDTO : incomeCategoryDTO.getItemGroups()) {
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
SalaryAcctResultListColumnDTO salaryAcctResultListColumnDTO = new SalaryAcctResultListColumnDTO()
.setColumnName(salarySobItemDTO.getName())
.setFormulaId(salarySobItemDTO.getFormulaId())
.setFormulaContent(salarySobItemDTO.getFormulaContent())
.setShowLock((!Objects.equals(salarySobItemDTO.getFormulaId(), NumberUtils.LONG_ZERO) && salarySobItemDTO.isCanEdit())
|| Objects.equals(salarySobItemDTO.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE));
resultMap.put("" + salarySobItemDTO.getSalaryItemId(), salaryAcctResultListColumnDTO);
}
}
for (SalarySobItemDTO salarySobItemDTO : incomeCategoryDTO.getItems()) {
SalaryAcctResultListColumnDTO salaryAcctResultListColumnDTO = new SalaryAcctResultListColumnDTO()
.setColumnName(salarySobItemDTO.getName())
.setFormulaId(salarySobItemDTO.getFormulaId())
.setFormulaContent(salarySobItemDTO.getFormulaContent())
.setShowLock((!Objects.equals(salarySobItemDTO.getFormulaId(), NumberUtils.LONG_ZERO) && salarySobItemDTO.isCanEdit())
|| Objects.equals(salarySobItemDTO.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE));
resultMap.put("" + salarySobItemDTO.getSalaryItemId(), salaryAcctResultListColumnDTO);
}
}
return resultMap;
}
2022-04-08 19:08:59 +08:00
@Override
public void save(SalaryAcctResultSaveParam saveParam) {
List<DataCollectionEmployee> dataCollectionEmployees = getSalaryEmployeeService(user).listAllForReport();
Map<Long, DataCollectionEmployee> emps = SalaryEntityUtil.convert2Map(dataCollectionEmployees, DataCollectionEmployee::getEmployeeId);
2022-04-08 19:08:59 +08:00
// 查询薪资核算人员
2022-04-12 19:25:19 +08:00
SalaryAcctEmployeePO salaryAcctEmployeePO = getSalaryAcctEmployeeService(user).getById(saveParam.getSalaryAcctEmpId());
2022-04-08 19:08:59 +08:00
if (Objects.isNull(salaryAcctEmployeePO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "薪资核算人员不存在或已被删除"));
}
// 保存参数转换成薪资核算结果po
2022-04-29 17:15:22 +08:00
List<SalaryAcctResultPO> salaryAcctResultPOS = SalaryAcctResultBO.convert2PO(saveParam, salaryAcctEmployeePO, (long) user.getUID());
2022-04-08 19:08:59 +08:00
// 删除原来的薪资核算结果
deleteBySalaryAcctEmployeeIds(Collections.singleton(saveParam.getSalaryAcctEmpId()));
// 保存薪资核算结果
if (CollectionUtils.isNotEmpty(salaryAcctResultPOS)) {
2022-06-02 17:01:26 +08:00
// 加密
SalaryAcctResultPOEncrypt.encryptList(salaryAcctResultPOS);
2022-06-16 17:55:26 +08:00
List<List<SalaryAcctResultPO>> partition = Lists.partition(salaryAcctResultPOS, 100);
partition.forEach(getSalaryAcctResultMapper()::batchInsert);
2022-04-08 19:08:59 +08:00
}
2022-07-04 18:58:49 +08:00
//报表
getSalaryAcctReportService(user).deleteBySalaryAcctEmpIds(Collections.singleton(saveParam.getSalaryAcctEmpId()));
List<SalaryAcctResultReportPO> salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2PO(saveParam, salaryAcctEmployeePO, (long) user.getUID(), emps);
if (CollectionUtils.isNotEmpty(salaryAcctResultReportPOS)) {
getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS);
}
2022-07-04 18:58:49 +08:00
2022-04-08 19:08:59 +08:00
// 查询操作日志的targetName
2022-07-04 18:58:49 +08:00
// String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(salaryAcctEmployeePO.getSalaryAcctRecordId());
2022-04-08 19:08:59 +08:00
// 查询人员信息
2022-07-04 18:58:49 +08:00
// DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salaryAcctEmployeePO.getEmployeeId());
2022-04-08 19:08:59 +08:00
// 查询个税扣缴义务人
2022-05-31 16:41:11 +08:00
// TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salaryAcctEmployeePO.getTaxAgentId());
2022-04-08 19:08:59 +08:00
// 记录日志
2022-04-07 16:54:10 +08:00
// String operateDesc = simpleEmployee.getUsername() + "(" + Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse(StringUtils.EMPTY) + ")";
// LoggerContext<SalaryCheckResultPO> loggerContext = new LoggerContext<>();
// loggerContext.setTargetId(String.valueOf(salaryAcctEmployeePO.getSalaryAcctRecordId()));
// loggerContext.setTargetName(targetName);
// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc);
// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "编辑薪资核算结果") + ": " + operateDesc);
// loggerContext.setNewValueList(Lists.newArrayList(salaryAcctResultPOS));
// salaryAcctRecordLoggerTemplate.write(loggerContext);
2022-04-08 19:08:59 +08:00
}
@Override
public void batchSave(Collection<SalaryAcctResultPO> salaryAcctResultPOS) {
if (CollectionUtils.isNotEmpty(salaryAcctResultPOS)) {
List<SalaryAcctResultPO> list = (List<SalaryAcctResultPO>) salaryAcctResultPOS;
2022-06-16 17:55:26 +08:00
// 数据加密
SalaryAcctResultPOEncrypt.encryptList(list);
List<List<SalaryAcctResultPO>> partition = Lists.partition(list, 100);
partition.forEach(getSalaryAcctResultMapper()::batchInsert);
2022-04-08 19:08:59 +08:00
}
}
2022-04-08 19:08:59 +08:00
@Override
public void deleteBySalaryAcctEmployeeIds(Collection<Long> salaryAcctEmployeeIds) {
2022-04-12 19:25:19 +08:00
getSalaryAcctResultMapper().deleteBySalaryAcctEmpIds(salaryAcctEmployeeIds);
2022-04-08 19:08:59 +08:00
}
@Override
public void deleteByAcctEmployeeIdsAndSalaryItemIds(Collection<Long> salaryAcctEmployeeIds, Collection<Long> salaryItemIds) {
2022-04-12 19:25:19 +08:00
getSalaryAcctResultMapper().deleteByAcctEmpIdsAndSalaryItemIds(salaryAcctEmployeeIds, salaryItemIds);
2022-04-08 19:08:59 +08:00
}
@Override
public void deleteBySalaryAcctRecordIds(Collection<Long> salaryAcctRecordIds) {
2022-04-12 19:25:19 +08:00
getSalaryAcctResultMapper().deleteBySalaryAcctRecordIds(salaryAcctRecordIds);
2022-04-08 19:08:59 +08:00
}
2022-04-11 20:17:47 +08:00
@Override
public void calculate(SalaryAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee) {
2022-06-15 17:53:12 +08:00
log.info("开始核算V2{}", calculateParam);
2022-04-11 20:17:47 +08:00
try {
// 1、查询薪资核算记录
2022-04-12 19:25:19 +08:00
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(calculateParam.getSalaryAcctRecordId());
2022-04-11 20:17:47 +08:00
if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
2022-06-15 17:53:12 +08:00
//查询对应账套
SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId());
if (Objects.isNull(salarySobPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资账套不存在或已被删除"));
}
2022-04-11 20:17:47 +08:00
// 1.1、如果薪资核算记录已经归档了,就不能继续核算
if (!Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99148, "当前薪资核算记录已归档,请重新打开后再进行核算"));
}
// 2、查询薪资核算记录的薪资周期、考勤周期等
2022-04-12 19:25:19 +08:00
SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(calculateParam.getSalaryAcctRecordId());
2022-04-11 20:17:47 +08:00
// 3、查询薪资核算记录所用薪资账套的薪资项目副本
2022-04-12 19:25:19 +08:00
List<SalarySobItemPO> salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
2022-04-11 20:17:47 +08:00
if (CollectionUtils.isEmpty(salarySobItemPOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99151, "当前所用的薪资账套未选择任何薪资项目,无法核算"));
}
// 4、查询当前租户的所有薪资项目
2022-04-12 19:25:19 +08:00
List<SalaryItemPO> salaryItemPOS = getSalaryItemService(user).listAll();
2022-04-11 20:17:47 +08:00
// 5、查询薪资核算记录所用薪资账套的调薪计薪规则
2022-04-12 19:25:19 +08:00
List<SalarySobAdjustRulePO> salarySobAdjustRulePOS = getSalarySobAdjustRuleService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
2022-04-28 15:02:11 +08:00
// 6、查询社保福利的所有字段
Map<String, String> welfareColumns = getSIAccountService(user).welfareColumns();
2022-04-11 20:17:47 +08:00
// 7、查询考勤引用的所有字段
2022-04-12 19:25:19 +08:00
List<AttendQuoteFieldListDTO> attendQuoteFieldListDTOS = getAttendQuoteFieldService(user).listAll();
2022-04-11 20:17:47 +08:00
// 8、查询公式详情
Set<Long> formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId);
formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId));
2022-04-14 10:03:49 +08:00
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);
2022-04-11 20:17:47 +08:00
// 9、计算薪资项目的运算优先级
List<List<Long>> salarySobItemsWithPriority = SalaryAcctCalculatePriorityBO.calculatePriority(salarySobItemPOS, salaryItemPOS, expressFormulas);
// 10、根据id查询其他合并计税的薪资核算记录
2022-04-12 19:25:19 +08:00
List<SalaryAcctRecordPO> otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAcctRecordPO.getId());
2022-04-11 20:17:47 +08:00
// 11、查询本次核算人员
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS;
if (CollectionUtils.isEmpty(calculateParam.getIds())) {
2022-04-12 19:25:19 +08:00
salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordPO.getId());
2022-04-11 20:17:47 +08:00
} else {
2022-04-12 19:25:19 +08:00
salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByIds(calculateParam.getIds());
2022-04-11 20:17:47 +08:00
}
if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(103378, "薪资核算人员不能为空"));
}
// 11.1、初始化进度
SalaryAcctProgressDTO initProgress = new SalaryAcctProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY);
2022-04-29 17:15:22 +08:00
getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress);
2022-04-11 20:17:47 +08:00
// 12、对薪资核算人员进行拆分
2022-05-09 10:32:14 +08:00
List<List<SalaryAcctEmployeePO>> partition = Lists.partition(salaryAcctEmployeePOS, 500);
2022-04-11 20:17:47 +08:00
// 12.1、监控子线程的任务执行
CountDownLatch childMonitor = new CountDownLatch(partition.size());
// 12.2、记录子线程的执行结果
BlockingDeque<SalaryAcctCalculateBO.Result> calculateResults = new LinkedBlockingDeque<>(partition.size());
// 12.3、生成本次运算的key
String calculateKey = UUID.randomUUID().toString();
// 12.4、多线程运算,运算结果存放在临时表中
for (List<SalaryAcctEmployeePO> acctEmployeePOS : partition) {
SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO().setSalaryAcctRecordPO(salaryAcctRecordPO).setSalarySobPO(salarySobPO).setSalarySobCycleDTO(salarySobCycleDTO).setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS).setSalarySobItemPOS(salarySobItemPOS).setSalaryItemIdWithPriorityList(salarySobItemsWithPriority).setExpressFormulas(expressFormulas).setSalaryItemPOS(salaryItemPOS).setSalarySobAdjustRulePOS(salarySobAdjustRulePOS).setWelfareColumns(MapUtils.emptyIfNull(welfareColumns)).setAttendQuoteFieldListDTOS(attendQuoteFieldListDTOS).setSalaryAcctEmployeePOS(acctEmployeePOS).setChildMonitor(childMonitor).setResults(calculateResults).setCalculateKey(calculateKey);
2022-04-11 20:17:47 +08:00
LocalRunnable localRunnable = new LocalRunnable() {
@Override
public void execute() {
2022-04-12 19:25:19 +08:00
getSalaryAcctCalculateService(user).calculate(salaryAcctCalculateBO, simpleEmployee);
2022-04-11 20:17:47 +08:00
}
};
ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.HRM, "salaryAcctCalculateV2", localRunnable);
2022-04-11 20:17:47 +08:00
}
// 13、等待所有子线程执行完毕
childMonitor.await();
// 14、判断子线程执行结果
boolean allSuccess = calculateResults.stream().allMatch(SalaryAcctCalculateBO.Result::isStatus);
if (!allSuccess) {
// 薪资核算实现的线程的错误信息
String errorMsg = calculateResults.stream().filter(result -> !result.isStatus()).map(SalaryAcctCalculateBO.Result::getErrMsg).collect(Collectors.joining("|"));
2022-04-29 17:15:22 +08:00
getSalaryAcctProgressService(user).fail(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), errorMsg);
2022-04-11 20:17:47 +08:00
// 删除薪资核算临时存储表中的数据
2022-04-12 19:25:19 +08:00
getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey);
2022-04-11 20:17:47 +08:00
return;
}
// 15、处理核算结果临时表数据
handleSalaryAcctResultTemp(calculateParam, calculateKey);
// 16、开始运行校验规则
2022-04-07 16:54:10 +08:00
// SalaryAcctCheckParam salaryAcctCheckParam = new SalaryAcctCheckParam()
// .setSalaryAcctRecordId(calculateParam.getSalaryAcctRecordId())
// .setIds(calculateParam.getIds());
2022-04-08 19:08:59 +08:00
// salaryCheckResultService.check(salaryAcctCheckParam, true, simpleEmployee);
2022-04-29 17:15:22 +08:00
// Thread.sleep(10);
getSalaryAcctProgressService(user).finish(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), true);
2022-04-11 20:17:47 +08:00
// 记录日志
// 查询操作日志的targetName
2022-04-12 19:25:19 +08:00
// String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(calculateParam.getSalaryAcctRecordId());
2022-04-07 16:54:10 +08:00
// LoggerContext<SalaryCheckResultPO> loggerContext = new LoggerContext<>();
// loggerContext.setTargetId(String.valueOf(calculateParam.getSalaryAcctRecordId()));
// loggerContext.setTargetName(targetName);
// loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue());
// loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(95783, "薪资核算"));
// loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(95783, "薪资核算"));
// salaryAcctRecordLoggerTemplate.write(loggerContext);
2022-04-11 20:17:47 +08:00
} catch (Exception e) {
log.info("薪资核算出错:{}", e.getMessage(), e);
2022-04-29 17:15:22 +08:00
// throw new SalaryRunTimeException(e);
getSalaryAcctProgressService(user).fail(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage());
2022-04-11 20:17:47 +08:00
} finally {
// 数据库字段加密用
}
}
2022-04-08 19:08:59 +08:00
/**
* 处理薪资核算临时存储表中的数据
*
* @param calculateParam
* @param calculateKey
*/
2022-04-11 20:17:47 +08:00
private void handleSalaryAcctResultTemp(SalaryAcctCalculateParam calculateParam, String calculateKey) {
2022-04-12 19:25:19 +08:00
// TransactionStatus status = dataSourceTransactionManager.getTransaction(new DefaultTransactionDefinition());
// try {
2022-04-29 17:15:22 +08:00
// 查询薪资核算结果的临时存储
List<SalaryAcctResultTempPO> salaryAcctResultTempPOS = getSalaryAcctResultTempService(user).listByCalculateKey(calculateKey);
// 删除原来的薪资核算结果
if (CollectionUtils.isNotEmpty(calculateParam.getIds())) {
getSalaryAcctResultMapper().deleteBySalaryAcctEmpIds(calculateParam.getIds());
} else {
getSalaryAcctResultMapper().deleteBySalaryAcctRecordIds(Collections.singleton(calculateParam.getSalaryAcctRecordId()));
getSalaryAcctReportService(user).deleteBySalaryAcctRecordId(calculateParam.getSalaryAcctRecordId());
2022-04-29 17:15:22 +08:00
}
// 保存薪资的薪资核算结果
List<SalaryAcctResultPO> salaryAcctResultPOS = SalaryAcctResultBO.convert2ResultPO(salaryAcctResultTempPOS);
batchSave(salaryAcctResultPOS);
//保存核算报表数据
List<SalaryAcctResultReportPO> salaryAcctResultReportPOS = SalaryAcctResultReportBO.convert2ReportPO(salaryAcctResultTempPOS, calculateParam.getEmps());
getSalaryAcctReportService(user).batchSave(salaryAcctResultReportPOS);
2022-04-29 17:15:22 +08:00
// 删除薪资核算临时存储表中的数据
getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey);
2022-04-12 19:25:19 +08:00
// // 提交事务
// dataSourceTransactionManager.commit(status);
// } catch (Exception e) {
// dataSourceTransactionManager.rollback(status);
// throw e;
// }
2022-04-11 20:17:47 +08:00
}
2022-06-07 19:10:40 +08:00
@Override
public List<SalaryAcctResultPO> listBySalaryAcctRecordIdsAndTaxAgentIds(Collection<Long> salaryAcctRecordIds, Collection<Long> taxAgentIds) {
if (CollectionUtils.isEmpty(salaryAcctRecordIds)) {
return Collections.emptyList();
}
2022-06-15 12:03:17 +08:00
return SalaryAcctResultPOEncrypt.decryptList(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).taxAgentIds(taxAgentIds).build()));
2022-06-07 19:10:40 +08:00
}
2022-04-08 19:08:59 +08:00
}