diff --git a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java index d138cc23e..5e9d93e88 100644 --- a/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java +++ b/src/com/engine/salary/entity/taxdeclaration/po/TaxDeclareStatusPO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.taxdeclaration.po; +import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -34,6 +35,7 @@ public class TaxDeclareStatusPO { private Integer taxDeclareType; /** * 申报状态 + * @see TaxDeclareStatusEnum */ private Integer taxDeclareStatus; /** diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index c8da3fde0..23f2b4799 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -72,6 +72,8 @@ import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum.NOT_DECLARE; + /** * 个税申报 *

Copyright: Copyright (c) 2022

@@ -278,12 +280,12 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe TaxDeclareRecordPO oldTaxDeclareRecord = taxDeclareRecordMap.get(taxCycleEntry.getKey() + "-" + taxAgentIdEntry.getKey()); // 如果已经生成了个税申报表,并且个税申报表已经申报过了,就跳过 if (oldTaxDeclareRecord != null) { - if (!(Objects.equals(oldTaxDeclareRecord.getTaxDeclareType(), TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) && Objects.equals(oldTaxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()))) { + if (!(Objects.equals(oldTaxDeclareRecord.getTaxDeclareType(), TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) && Objects.equals(oldTaxDeclareRecord.getTaxDeclareStatus(), NOT_DECLARE.getValue()))) { continue; } needDeleteTaxDeclareRecordIds.add(oldTaxDeclareRecord.getId()); } - TaxDeclareRecordPO taxDeclareRecord = new TaxDeclareRecordPO().setId(IdGenerator.generate()).setTaxAgentId(taxAgentIdEntry.getKey()).setSalaryMonth(saveParam.getSalaryMonth()).setTaxCycle(taxCycleEntry.getKey()).setTaxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()).setTaxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()).setRemark(saveParam.getDescription()).setCreator((long) user.getUID()).setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()).setCreateTime(now).setUpdateTime(now); + TaxDeclareRecordPO taxDeclareRecord = new TaxDeclareRecordPO().setId(IdGenerator.generate()).setTaxAgentId(taxAgentIdEntry.getKey()).setSalaryMonth(saveParam.getSalaryMonth()).setTaxCycle(taxCycleEntry.getKey()).setTaxDeclareType(TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()).setTaxDeclareStatus(NOT_DECLARE.getValue()).setRemark(saveParam.getDescription()).setCreator((long) user.getUID()).setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()).setCreateTime(now).setUpdateTime(now); newTaxDeclareRecords.add(taxDeclareRecord); // 生成个税申报表 TaxDeclarationResult taxDeclarationResult = generateReportPerRecord(taxDeclareRecord, taxAgentIdEntry.getValue()); @@ -348,7 +350,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (Objects.isNull(taxDeclareRecord)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156495, "参数异常,个税申报记录不存在或已被删除")); } - if (!Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()) && !Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue())) { + if (!Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), NOT_DECLARE.getValue()) && !Objects.equals(taxDeclareRecord.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(182700, "对不起,只有未申报状态下可以刷新数据")); } // 查询税款所属期下的薪资核算人员 @@ -488,7 +490,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe for (Map.Entry> taxCycleEntry : taxCycleKeySalaryAcctTaxAgentMap.entrySet()) { Set archivedTaxAgentIds = SalaryEntityUtil.properties(taxCycleEntry.getValue(), SalaryAcctTaxAgentPO::getTaxAgentId); List taxDeclareRecords = listBySalaryMonthAndTaxAgentIds(saveParam.getSalaryMonth(), archivedTaxAgentIds); - TaxDeclareRecordPO declareSuccessTaxDeclareRecord = taxDeclareRecords.stream().filter(taxDeclareRecordPO -> archivedTaxAgentIds.contains(taxDeclareRecordPO.getTaxAgentId()) && !(Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()) || Objects.equals(taxDeclareRecordPO.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_FAIL.getValue()))).findAny().orElse(null); + 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()))); @@ -589,7 +591,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (CollectionUtils.isEmpty(taxDeclareRecords)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160524, "个税申报表不存在或已被删除")); } - List cantDeleteTaxDeclareRecords = taxDeclareRecords.stream().filter(e -> !(Objects.equals(e.getTaxDeclareType(), TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) && Objects.equals(e.getTaxDeclareStatus(), TaxDeclareStatusEnum.NOT_DECLARE.getValue()))).collect(Collectors.toList()); + List cantDeleteTaxDeclareRecords = taxDeclareRecords.stream().filter(e -> !(Objects.equals(e.getTaxDeclareType(), TaxDeclareTypeEnum.NORMAL_DECLARE.getValue()) && Objects.equals(e.getTaxDeclareStatus(), NOT_DECLARE.getValue()))).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(cantDeleteTaxDeclareRecords)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(177854, "个税申报表已经申报,无法删除")); } @@ -1064,7 +1066,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe //更新申报状态 declareStatus.setTaxDeclareType(TaxDeclareTypeEnum.UPDATE_DECLARE.getValue()); - declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.NOT_DECLARE.getValue()); + declareStatus.setTaxDeclareStatus(NOT_DECLARE.getValue()); declareStatus.setRequestId(""); getTaxDeclareStatusMapper().updateIgnoreNull(declareStatus); @@ -1200,14 +1202,19 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } Set reportTypes = new HashSet<>(); - taxDeclarations.forEach(taxDeclarationPO -> { reportTypes.add(IncomeCategoryEnum.parseByValue(taxDeclarationPO.getIncomeCategory()).getReportType().getValue()); }); List statuses = new ArrayList<>(); - reportTypes.forEach(reportType -> { + + int personNum = 0; + BigDecimal taxPayAmount = new BigDecimal(0); + BigDecimal taxPaidAmount = new BigDecimal(0); + BigDecimal taxPurePaidAmount = new BigDecimal(0); + + for (Integer reportType : reportTypes) { TaxDeclareStatusPO declareStatus = getTaxDeclareStatus(id, reportType); if (declareStatus == null) { declareStatus = TaxDeclareStatusPO.builder() @@ -1225,9 +1232,23 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe .build(); getTaxDeclareStatusMapper().insertIgnoreNull(declareStatus); } - statuses.add(declareStatus); - }); + + personNum += declareStatus.getPersonNum(); + taxPayAmount = taxPayAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPayAmount())); + taxPaidAmount = taxPaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPaidAmount())); + taxPurePaidAmount = taxPurePaidAmount.add(SalaryEntityUtil.empty2Zero(declareStatus.getTaxPurePaidAmount())); + } + + //更新记录的状态,各个报表状态一致则采纳,否则取最小的进度状态 + Integer declareStatusEnum = statuses.stream().map(TaxDeclareStatusPO::getTaxDeclareStatus).min(Comparator.comparing(Integer::valueOf)).orElse(NOT_DECLARE.getValue()); + + taxDeclareRecord.setPersonNum(personNum); + taxDeclareRecord.setTaxPayAmount(taxPayAmount.toString()); + taxDeclareRecord.setTaxPaidAmount(taxPaidAmount.toString()); + taxDeclareRecord.setTaxPurePaidAmount(taxPurePaidAmount.toString()); + taxDeclareRecord.setTaxDeclareStatus(declareStatusEnum); + updateById(taxDeclareRecord); return statuses; } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 67bb280e7..74cf1999c 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -373,7 +373,7 @@ public class TaxDeclareRecordWrapper extends Service { .displayIcon(Objects.equals(taxDeclareRecord.getDisplayUpdateIcon(), 1)) .declareFailSize(taxDeclareFails.size()) .abnormalSize(notDeclareTaxDeclareEmployees.size() + noValueTaxDeclareEmployees.size()) - .taxPaidAmount(SalaryEntityUtil.thousandthConvert(taxDeclareRecord.getTaxPaidAmount())) + .taxPaidAmount(SalaryEntityUtil.thousandthConvert(taxDeclareStatus.getTaxPaidAmount())) .build(); }