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

154 lines
7.9 KiB
Java
Raw Normal View History

2023-08-11 14:20:14 +08:00
package com.engine.salary.service.impl;
2023-08-14 20:07:29 +08:00
import com.cloudstore.eccom.pc.table.WeaTableColumn;
2023-08-17 19:04:20 +08:00
import com.engine.common.util.ServiceUtil;
2023-08-11 14:20:14 +08:00
import com.engine.core.impl.Service;
2023-08-17 19:04:20 +08:00
import com.engine.salary.encrypt.EncryptUtil;
2023-08-14 20:07:29 +08:00
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
import com.engine.salary.entity.extemp.po.ExtEmpPO;
import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationValueList;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
2023-08-11 14:20:14 +08:00
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO;
2023-08-14 20:07:29 +08:00
import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO;
import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum;
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper;
import com.engine.salary.service.*;
2023-08-17 19:04:20 +08:00
import com.engine.salary.util.JsonUtil;
2023-08-14 20:07:29 +08:00
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryEnumUtil;
2023-08-17 19:04:20 +08:00
import com.engine.salary.util.db.MapperProxyFactory;
2023-08-11 14:20:14 +08:00
import com.engine.salary.util.page.PageInfo;
2023-08-14 20:07:29 +08:00
import com.engine.salary.util.page.SalaryPageUtil;
2023-08-17 19:04:20 +08:00
import com.google.common.collect.Lists;
2023-08-11 14:20:14 +08:00
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
2023-08-17 19:04:20 +08:00
import weaver.hrm.User;
2023-08-11 14:20:14 +08:00
import java.util.*;
import java.util.stream.Collectors;
/**
2023-08-23 16:49:45 +08:00
* 个税申报表
* <p>Copyright: Copyright (c) 2023</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
2023-08-11 14:20:14 +08:00
@Slf4j
public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclarationValueService {
2023-08-17 19:04:20 +08:00
public EncryptUtil encryptUtil = new EncryptUtil();
2023-08-11 14:20:14 +08:00
2023-08-17 19:04:20 +08:00
private TaxDeclarationValueMapper getTaxDeclarationValueMapper() {
return MapperProxyFactory.getProxy(TaxDeclarationValueMapper.class);
}
2023-08-20 14:03:43 +08:00
2023-08-17 19:04:20 +08:00
private SalaryEmployeeService getSalaryEmployeeService(User user) {
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
2023-08-20 14:03:43 +08:00
2023-08-17 19:04:20 +08:00
private ExtEmpService getExtEmpService(User user) {
return ServiceUtil.getService(ExtEmpServiceImpl.class, user);
}
2023-08-20 14:03:43 +08:00
2023-08-17 19:04:20 +08:00
private EmployeeDeclareService getEmployeeDeclareService(User user) {
return ServiceUtil.getService(EmployeeDeclareServiceImpl.class, user);
}
2023-08-20 14:03:43 +08:00
2023-08-17 19:04:20 +08:00
private TaxReportColumnService getTaxReportColumnService(User user) {
return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user);
}
2023-08-20 14:03:43 +08:00
2023-08-11 14:20:14 +08:00
@Override
2023-08-14 20:07:29 +08:00
public PageInfo<TaxDeclarationValuePO> listPageByTaxDeclarationIds(TaxDeclarationValueListQueryParam queryParam, Collection<Long> taxDeclarationIds) {
2023-08-17 19:04:20 +08:00
List<TaxDeclarationValuePO> taxDeclarationValuePOS = getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
2023-08-20 14:03:43 +08:00
taxDeclarationValuePOS = decryptBatch(taxDeclarationValuePOS);
2023-08-14 20:07:29 +08:00
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), taxDeclarationValuePOS, TaxDeclarationValuePO.class);
2023-08-11 14:20:14 +08:00
}
@Override
public List<TaxDeclarationValuePO> listByTaxDeclarationIds(Collection<Long> taxDeclarationIds) {
2023-08-17 19:04:20 +08:00
List<TaxDeclarationValuePO> taxDeclarationValues = getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
2023-08-11 14:20:14 +08:00
return decryptBatch(taxDeclarationValues);
}
@Override
public List<TaxDeclarationValuePO> listByTaxDeclarationIdsNoDecrypt(Collection<Long> taxDeclarationIds) {
2023-08-17 19:04:20 +08:00
return getTaxDeclarationValueMapper().listSome(TaxDeclarationValuePO.builder().taxDeclarationIds(taxDeclarationIds).build());
2023-08-11 14:20:14 +08:00
}
@Override
public TaxDeclarationValueListDTO convert2List(TaxDeclarationPO taxDeclaration, List<TaxDeclarationValuePO> taxDeclarationValues) {
// 查询个税申报表表头
IncomeCategoryEnum incomeCategoryEnum = SalaryEnumUtil.enumMatchByValue(taxDeclaration.getIncomeCategory(), IncomeCategoryEnum.class);
2023-08-17 19:04:20 +08:00
List<TaxReportColumnPO> taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum);
2023-08-11 14:20:14 +08:00
// 人员id
Set<Long> employeeIds = SalaryEntityUtil.properties(taxDeclarationValues, TaxDeclarationValuePO::getEmployeeId);
// 查询报送的人员
2023-08-17 19:04:20 +08:00
List<EmployeeDeclarePO> employeeDeclares = getEmployeeDeclareService(user).listByTaxCycleAndTaxAgentIdAndEmployeeIds(taxDeclaration.getTaxCycle(), taxDeclaration.getTaxAgentId(), employeeIds);
2023-08-11 14:20:14 +08:00
// 查询人员信息
List<Long> simpleEmployeeIds = taxDeclarationValues.stream()
.filter(taxDeclarationValue -> Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.ORGANIZATION.getValue()))
.map(TaxDeclarationValuePO::getEmployeeId)
.distinct()
.collect(Collectors.toList());
2023-08-17 19:04:20 +08:00
List<DataCollectionEmployee> simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIds(simpleEmployeeIds);
2023-08-11 14:20:14 +08:00
// 查询人员薪资(身份证号码等)
2023-08-17 19:04:20 +08:00
List<DataCollectionEmployee> simpleUserInfos = getSalaryEmployeeService(user).getEmployeeByIds(simpleEmployeeIds);
2023-08-11 14:20:14 +08:00
// 查询外部人员
2023-08-14 20:07:29 +08:00
List<Long> extEmployeeIds = taxDeclarationValues.stream()
2023-08-11 14:20:14 +08:00
.filter(taxDeclarationValue -> Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.EXT_EMPLOYEE.getValue()))
.map(TaxDeclarationValuePO::getEmployeeId)
2023-08-14 20:07:29 +08:00
.collect(Collectors.toList());
2023-08-17 19:04:20 +08:00
List<ExtEmpPO> extEmployees = getExtEmpService(user).getExtEmpByIds(extEmployeeIds);
2023-08-11 14:20:14 +08:00
// 列表表头
List<WeaTableColumn> weaTableColumns = TaxDeclarationValueList.buildTableColumns(taxReportColumns);
// 列表数据
List<Map<String, Object>> data = TaxDeclarationValueList.buildTableData(incomeCategoryEnum, taxReportColumns, taxDeclarationValues,
employeeDeclares, simpleEmployees, simpleUserInfos, extEmployees);
return new TaxDeclarationValueListDTO().setColumns(weaTableColumns).setData(data);
}
@Override
public void batchSave(List<TaxDeclarationValuePO> taxDeclarationValues) {
if (CollectionUtils.isNotEmpty(taxDeclarationValues)) {
2023-08-17 19:04:20 +08:00
// 加密
taxDeclarationValues.forEach(taxDeclarationValue ->
taxDeclarationValue.setResultValueJson(JsonUtil.toJsonString(taxDeclarationValue.getResultValue())));
taxDeclarationValues = encryptUtil.encryptList(taxDeclarationValues, TaxDeclarationValuePO.class);
// 分批保存
List<List<TaxDeclarationValuePO>> partition = Lists.partition(taxDeclarationValues, 100);
for (List<TaxDeclarationValuePO> subTaxDeclarationValues : partition) {
2023-08-20 14:03:43 +08:00
subTaxDeclarationValues.forEach(getTaxDeclarationValueMapper()::insertIgnoreNull);
// getTaxDeclarationValueMapper().batchInsert(subTaxDeclarationValues);
2023-08-17 19:04:20 +08:00
}
2023-08-11 14:20:14 +08:00
}
}
@Override
public void deleteByTaxDeclareRecordIds(Collection<Long> taxDeclareRecordIds) {
if (CollectionUtils.isEmpty(taxDeclareRecordIds)) {
return;
}
2023-08-17 19:04:20 +08:00
getTaxDeclarationValueMapper().deleteBytaxDeclareRecordIds(taxDeclareRecordIds);
2023-08-11 14:20:14 +08:00
}
private List<TaxDeclarationValuePO> decryptBatch(List<TaxDeclarationValuePO> taxDeclarationValues) {
if (CollectionUtils.isEmpty(taxDeclarationValues)) {
return Collections.emptyList();
}
2023-08-17 19:04:20 +08:00
// 解密
taxDeclarationValues = encryptUtil.decryptList(taxDeclarationValues, TaxDeclarationValuePO.class);
taxDeclarationValues.forEach(salaryAcctResultValue -> {
salaryAcctResultValue.setResultValue(JsonUtil.parseMap(salaryAcctResultValue.getResultValueJson(), String.class));
});
2023-08-11 14:20:14 +08:00
return taxDeclarationValues;
}
}