Compare commits

...

3 Commits

Author SHA1 Message Date
Harryxzy 2971217a28 Merge remote-tracking branch 'origin/custom/联特' into custom/联特
# Conflicts:
#	src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java
2025-07-09 13:59:42 +08:00
Harryxzy a7e910a672 联特修复 2025-07-04 16:47:32 +08:00
Harryxzy 16d50d8c1a Merge branch 'release/个税版本' into custom/联特
# Conflicts:
#	src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java
2025-07-04 15:24:11 +08:00
3 changed files with 36 additions and 22 deletions

View File

@ -225,6 +225,7 @@ public interface SalaryAcctRecordService {
* @param salaryAcctRecordIds
* @return
*/
@Deprecated
List<SalaryAcctTaxAgentPO> listBySalaryAcctRecordIds(Collection<Long> salaryAcctRecordIds);
/**

View File

@ -1015,6 +1015,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
return getSalaryAcctRecordMapper().listSome(po);
}
@Deprecated
@Override
public List<SalaryAcctTaxAgentPO> listBySalaryAcctRecordIds(Collection<Long> salaryAcctRecordIds) {
if (CollectionUtils.isEmpty(salaryAcctRecordIds)) {

View File

@ -19,7 +19,6 @@ import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctTaxAgentPO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobAddUpRulePO;
import com.engine.salary.entity.salarysob.po.SalarySobPO;
@ -197,6 +196,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
private TaxPaymentServiceFactory taxPaymentServiceFactory = new TaxPaymentServiceFactory(user);
//是否根据税款所属期进行申报
private final boolean isTaxDeclarationByTaxCycle = "1".equals(getSalarySysConfService(user).getValueByCode(TAX_DECLARATION_DATE_TYPE));
@ -327,13 +327,17 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
// List<SalaryAcctRecordPO> salaryAcctRecords = getSalaryAcctRecordService(user).listBySalaryMonth(salaryMonthRange);
// 查询薪资核算记录关联的个税扣缴义务人
List<SalaryAcctTaxAgentPO> salaryAcctTaxAgents = getSalaryAcctRecordService(user).listBySalaryAcctRecordIds(SalaryEntityUtil.properties(salaryAcctRecords, SalaryAcctRecordPO::getId));
// 按照saveParam中的个税扣缴义务人范围过滤
List<Long> taxAgentIds = SalaryEntityUtil.properties(taxAgents, TaxAgentPO::getId, Collectors.toList());
salaryAcctTaxAgents = salaryAcctTaxAgents.stream().filter(e -> taxAgentIds.contains(e.getTaxAgentId())).collect(Collectors.toList());
List<Long> salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getSalaryAcctRecordId, Collectors.toList());
salaryAcctRecords = salaryAcctRecords.stream().filter(e -> salaryAcctRecordIds.contains(e.getId())).collect(Collectors.toList());
// 获取义务人下有那些账套
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByTaxAgentId(saveParam.getTaxAgentId());
List<Long> salarySobIds = salarySobPOS.stream().map(SalarySobPO::getId).collect(Collectors.toList());
// // 查询薪资核算记录关联的个税扣缴义务人
// List<SalaryAcctTaxAgentPO> salaryAcctTaxAgents = getSalaryAcctRecordService(user).listBySalaryAcctRecordIds(SalaryEntityUtil.properties(salaryAcctRecords, SalaryAcctRecordPO::getId));
// // 按照saveParam中的个税扣缴义务人范围过滤
// List<Long> taxAgentIds = SalaryEntityUtil.properties(taxAgents, TaxAgentPO::getId, Collectors.toList());
// salaryAcctTaxAgents = salaryAcctTaxAgents.stream().filter(e -> taxAgentIds.contains(e.getTaxAgentId())).collect(Collectors.toList());
// List<Long> salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getSalaryAcctRecordId, Collectors.toList());
// salaryAcctRecords = salaryAcctRecords.stream().filter(e -> salaryAcctRecordIds.contains(e.getId())).collect(Collectors.toList());
salaryAcctRecords = salaryAcctRecords.stream().filter(r -> salarySobIds.contains(r.getSalarySobId())).collect(Collectors.toList());
//二开自离账套不参与申报
String notaxsobids = getSalarySysConfService(user).getValueByCode("notaxsobids");
@ -343,7 +347,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
List<Long> finalSalaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctRecords, SalaryAcctRecordPO::getId, Collectors.toList());
// 校验是否可以生成个税申报表
// 返回目前已经生成的个税申报表
List<TaxDeclareRecordPO> taxDeclareRecords = checkBeforeSave(saveParam, taxAgentNameMap, salaryAcctRecords, salaryAcctTaxAgents);
List<TaxDeclareRecordPO> taxDeclareRecords = checkBeforeSave(saveParam, taxAgentNameMap, salaryAcctRecords);
Map<String, TaxDeclareRecordPO> taxDeclareRecordMap = SalaryEntityUtil.convert2Map(taxDeclareRecords, e -> e.getTaxCycle() + "-" + e.getTaxAgentId());
// 查询薪资核算人员
List<SalaryAcctEmployeePO> salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByRecordIdsAndEmpIdAndTaxAgentId(finalSalaryAcctRecordIds, null, taxAgents.stream().findFirst().orElse(new TaxAgentPO()).getId());
@ -402,7 +406,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
//更新核算记录状态
getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED);
getSalaryAcctRecordService(user).updateStatusByIds(finalSalaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED);
// 记录日志
for (TaxDeclareRecordPO taxDeclareRecord : newTaxDeclareRecords) {
LoggerContext<TaxDeclarationPO> loggerContext = new LoggerContext<>();
@ -560,9 +564,9 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
* @param saveParam
* @param taxAgentNameMap
* @param salaryAcctRecords
* @param salaryAcctTaxAgents
* @param
*/
private List<TaxDeclareRecordPO> checkBeforeSave(TaxDeclarationSaveParam saveParam, Map<Long, String> taxAgentNameMap, List<SalaryAcctRecordPO> salaryAcctRecords, List<SalaryAcctTaxAgentPO> salaryAcctTaxAgents) {
private List<TaxDeclareRecordPO> checkBeforeSave(TaxDeclarationSaveParam saveParam, Map<Long, String> taxAgentNameMap, List<SalaryAcctRecordPO> salaryAcctRecords) {
List<TaxDeclareRecordPO> resultList = Lists.newArrayList();
// 如果存在未归档的薪资核算记录不允许生成个税申报表
boolean notArchived = salaryAcctRecords.stream().anyMatch(salaryAcctRecordPO -> Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()));
@ -579,17 +583,25 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(177860, "{0}无可申报数据").replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth())));
}
// 查询已归档的薪资核算记录是否已经生成过个税申报表
Map<Date, List<SalaryAcctTaxAgentPO>> taxCycleKeySalaryAcctTaxAgentMap = SalaryEntityUtil.group2Map(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getTaxCycle);
for (Map.Entry<Date, List<SalaryAcctTaxAgentPO>> taxCycleEntry : taxCycleKeySalaryAcctTaxAgentMap.entrySet()) {
Set<Long> archivedTaxAgentIds = SalaryEntityUtil.properties(taxCycleEntry.getValue(), SalaryAcctTaxAgentPO::getTaxAgentId);
List<TaxDeclareRecordPO> taxDeclareRecords = listBySalaryMonthAndTaxAgentIds(saveParam.getSalaryMonth(), archivedTaxAgentIds);
TaxDeclareRecordPO declareSuccessTaxDeclareRecord = taxDeclareRecords.stream().filter(taxDeclareRecordPO -> archivedTaxAgentIds.contains(taxDeclareRecordPO.getTaxAgentId()) && !(Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), NOT_DECLARE.getValue()) || Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue()))).findAny().orElse(null);
List<TaxDeclareRecordPO> taxDeclareRecords = listBySalaryMonthAndTaxAgentIds(saveParam.getSalaryMonth(), Collections.singletonList(saveParam.getTaxAgentId()));
TaxDeclareRecordPO declareSuccessTaxDeclareRecord = taxDeclareRecords.stream().filter(taxDeclareRecordPO -> !(Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), NOT_DECLARE.getValue()) || Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue()))).findAny().orElse(null);
// 已经申报成功了的个税申报表的个税扣缴义务人不允许重新生成
if (Objects.nonNull(declareSuccessTaxDeclareRecord)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160522, "已开启智能算薪业务,个税扣缴义务人{0}的税款所属期{1}的个税申报表正在申报中或者已经申报成功,不可重复生成").replace("{0}", taxAgentNameMap.get(declareSuccessTaxDeclareRecord.getTaxAgentId())).replace("{1}", SalaryDateUtil.getFormatYearMonth(declareSuccessTaxDeclareRecord.getTaxCycle())));
}
resultList.addAll(taxDeclareRecords);
}
// Map<Date, List<SalaryAcctTaxAgentPO>> taxCycleKeySalaryAcctTaxAgentMap = SalaryEntityUtil.group2Map(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getTaxCycle);
// for (Map.Entry<Date, List<SalaryAcctTaxAgentPO>> taxCycleEntry : taxCycleKeySalaryAcctTaxAgentMap.entrySet()) {
// Set<Long> archivedTaxAgentIds = SalaryEntityUtil.properties(taxCycleEntry.getValue(), SalaryAcctTaxAgentPO::getTaxAgentId);
// List<TaxDeclareRecordPO> taxDeclareRecords = listBySalaryMonthAndTaxAgentIds(saveParam.getSalaryMonth(), archivedTaxAgentIds);
// TaxDeclareRecordPO declareSuccessTaxDeclareRecord = taxDeclareRecords.stream().filter(taxDeclareRecordPO -> archivedTaxAgentIds.contains(taxDeclareRecordPO.getTaxAgentId()) && !(Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), NOT_DECLARE.getValue()) || Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue()))).findAny().orElse(null);
// // 已经申报成功了的个税申报表的个税扣缴义务人不允许重新生成
// if (Objects.nonNull(declareSuccessTaxDeclareRecord)) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160522, "已开启智能算薪业务,个税扣缴义务人{0}的税款所属期{1}的个税申报表正在申报中或者已经申报成功,不可重复生成").replace("{0}", taxAgentNameMap.get(declareSuccessTaxDeclareRecord.getTaxAgentId())).replace("{1}", SalaryDateUtil.getFormatYearMonth(declareSuccessTaxDeclareRecord.getTaxCycle())));
// }
// resultList.addAll(taxDeclareRecords);
// }
return resultList;
}