diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java index 8424aa765..983d2cdf5 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java @@ -39,4 +39,10 @@ public class SalaryAcctRecordQueryParam extends BaseQueryParam { private String startMonthStr; private String endMonthStr; + + /** + * 最后操作 + * SalaryAcctOptEnum + */ + private List lastOperates; } diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java new file mode 100644 index 000000000..7721d3c0b --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java @@ -0,0 +1,27 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 薪资核算计算个税 + * + * @author xiajun + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryCalcTaxBatParam { + + /** + * 参数错误,薪资核算记录ID不能为空 + */ + @DataCheck(require = true,message = "薪资核算记录ID不能为空") + private List salaryAcctRecordIds; +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java index d4745f149..4e1469fe6 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java @@ -1,7 +1,10 @@ package com.engine.salary.entity.salaryacct.param; import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * 薪资核算计算个税 @@ -9,6 +12,9 @@ import lombok.Data; * @author xiajun */ @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor public class SalaryCalcTaxParam { /** diff --git a/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java new file mode 100644 index 000000000..69352fb16 --- /dev/null +++ b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java @@ -0,0 +1,58 @@ +package com.engine.salary.enums.salaryaccounting; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 操作枚举 + *

Copyright: Copyright (c) 2025

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum SalaryAcctOptEnum implements BaseEnum { + + UNPROCESSED("1", "未处理", 158772), + PROGRESS("2", "薪资计算中", 158770), + COMPLETED("3", "薪资计算完成", 158770), + ONLINE("4", "在线算税中", 158770), + RESULT("5", "已获取算税结果", 158774); + + SalaryAcctOptEnum(String value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + private String value; + + private String defaultLabel; + + private int labelId; + + @Override + public String getValue() { + return value; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + public static SalaryAcctOptEnum getByValue(String value) { + for (SalaryAcctOptEnum e : SalaryAcctOptEnum.values()) { + if (Objects.equals(e.getValue(), value)) { + return e; + } + } + return UNPROCESSED; + } +} diff --git a/src/com/engine/salary/service/SalaryCalcTaxService.java b/src/com/engine/salary/service/SalaryCalcTaxService.java index 7e6efec5c..81c9f3545 100644 --- a/src/com/engine/salary/service/SalaryCalcTaxService.java +++ b/src/com/engine/salary/service/SalaryCalcTaxService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; +import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxBatParam; import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxParam; public interface SalaryCalcTaxService { @@ -26,4 +27,9 @@ public interface SalaryCalcTaxService { * @param salaryCalcTaxParam */ void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam); + + void batCalcTax(SalaryCalcTaxBatParam salaryCalcTaxBatParam); + + void batCalcTaxFeedback(SalaryCalcTaxBatParam salaryCalcTaxBatParam); + } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 1fa0d4203..f1cc07c75 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -12,7 +12,6 @@ import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.param.AbnormalEmployeeListQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -25,6 +24,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.auth.AuthFilterTypeEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctOptEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -52,7 +52,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; import weaver.wechat.util.Utils; -import weaver.wechat.util.Utils; import java.time.YearMonth; import java.util.*; @@ -241,6 +240,11 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe List salaryAcctRecordPOS = getSalaryAcctRecordMapper().listSome(po); salaryAcctRecordPOS = getAuthService(user).auth(salaryAcctRecordPOS, AuthFilterTypeEnum.DATA_OPT, SalaryAcctRecordPO.class); + //过滤 + List lastOperates = queryParam.getLastOperates(); + if(CollUtil.isNotEmpty(lastOperates)){ + salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(salaryAcctRecordPO -> lastOperates.contains(salaryAcctRecordPO.getRunStatus())).collect(Collectors.toList()); + } return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryAcctRecordPOS, SalaryAcctRecordPO.class); @@ -384,81 +388,81 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe //获取账套所属个税扣缴义务人的核算记录 SalarySobPO salarySobPO = getSalarySobService(user).getById(saveParam.getSalarySobId()); List taxAgentIds = salarySobPO.getTaxAgentIds(); - taxAgentIds.forEach(taxAgentId->{ + taxAgentIds.forEach(taxAgentId -> { //查询扣缴义务人下的所有账套 List salarySobPOS = getSalarySobService(user).listByTaxAgentId(taxAgentId); Set salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); //获取账套下的所有核算结果 List salaryAcctRecords = listByTaxCycle(taxCycleYearRange, salarySobIds); - // 获取个税申报功能状态 - TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration(); - if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.OPEN.getValue())) { - // 开启了个税申报功能 - // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 - SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) - && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(hasArchivedSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98752, "税款所属期{0}的薪资核算结果已经归档,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 - SalaryAcctRecordPO notDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> !Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) - && e.getTaxCycle().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(notDeclaredSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98751, "税款所属期{0}的薪资核算结果还未申报,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(notDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - // 如果某个月(税款所属期)已经申报了,不可以新建本月以及之前月份的薪资核算 - SalaryAcctRecordPO hasDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) - && e.getTaxCycle().compareTo(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1))) >= 0) - .findAny() - .orElse(null); - if (Objects.nonNull(hasDeclaredSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98753, "税款所属期{0}的薪资核算结果已经申报,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - } - if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.REBOOT.getValue())) { - // 重启了个税申报功能(不去校验重启之前是否申报数据) - // 如果某个月(薪资所属期)还未归档,不可以新建之后月份的薪资核算 - SalaryAcctRecordPO notArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()) - && e.getSalaryMonth().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getSalaryMonth().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(notArchivedSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98754, "薪资所属期{0}的薪资核算结果还未归档,不能新建薪资所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(notArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 - SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() - .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) - && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) - .findAny() - .orElse(null); - if (Objects.nonNull(hasArchivedSalaryAcctRecordPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98752, "税款所属期{0}的薪资核算结果已经归档,不能新建税款所属期{1}的薪资核算") - .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) - .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); - } - // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 - //获取账套下从重启月至所在年的最后一天的所有核算结果 - Date taxDeclarationRebootDate = getSalarySysConfService(user).getTaxDeclarationRebootDate(); - if (taxDeclarationRebootDate == null) { - throw new SalaryRunTimeException("个税申报功能异常"); + // 获取个税申报功能状态 + TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration(); + if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.OPEN.getValue())) { + // 开启了个税申报功能 + // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 + SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) + && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(hasArchivedSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98752, "税款所属期{0}的薪资核算结果已经归档,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 + SalaryAcctRecordPO notDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> !Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) + && e.getTaxCycle().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(notDeclaredSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98751, "税款所属期{0}的薪资核算结果还未申报,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(notDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)已经申报了,不可以新建本月以及之前月份的薪资核算 + SalaryAcctRecordPO hasDeclaredSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.DECLARED.getValue()) + && e.getTaxCycle().compareTo(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1))) >= 0) + .findAny() + .orElse(null); + if (Objects.nonNull(hasDeclaredSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98753, "税款所属期{0}的薪资核算结果已经申报,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasDeclaredSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } } + if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.REBOOT.getValue())) { + // 重启了个税申报功能(不去校验重启之前是否申报数据) + // 如果某个月(薪资所属期)还未归档,不可以新建之后月份的薪资核算 + SalaryAcctRecordPO notArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()) + && e.getSalaryMonth().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getSalaryMonth().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(notArchivedSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98754, "薪资所属期{0}的薪资核算结果还未归档,不能新建薪资所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(notArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算 + SalaryAcctRecordPO hasArchivedSalaryAcctRecordPO = salaryAcctRecords.stream() + .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue()) + && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getTaxCycle().atDay(1)))) + .findAny() + .orElse(null); + if (Objects.nonNull(hasArchivedSalaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98752, "税款所属期{0}的薪资核算结果已经归档,不能新建税款所属期{1}的薪资核算") + .replace("{0}", SalaryDateUtil.localDate2YearMonth(hasArchivedSalaryAcctRecordPO.getTaxCycle()).toString()) + .replace("{1}", salarySobCycleDTO.getTaxCycle().toString())); + } + // 如果某个月(税款所属期)还未申报,不可以新建之后月份的薪资核算 + //获取账套下从重启月至所在年的最后一天的所有核算结果 + Date taxDeclarationRebootDate = getSalarySysConfService(user).getTaxDeclarationRebootDate(); + if (taxDeclarationRebootDate == null) { + throw new SalaryRunTimeException("个税申报功能异常"); + } LocalDateRange taxCycleRebootYearRange = LocalDateRange.builder() .fromDate(taxDeclarationRebootDate) @@ -1023,7 +1027,8 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe .salaryMonth(salaryMonth) .description(saveParam.getDescription()) .build(); - save(param); + Long salaryAcctRecordId = save(param); + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.UNPROCESSED.getDefaultLabel()); } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 01e1e7e45..f8bae807c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -36,6 +36,7 @@ import com.engine.salary.enums.common.FilterEnum; import com.engine.salary.enums.common.SalaryLogGroupTypeEnum; import com.engine.salary.enums.common.SalaryLogOperateTypeEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctOptEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctResultDataSourceEnum; import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum; @@ -840,6 +841,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salarySobItemPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99151, "当前所用的薪资账套未选择任何薪资项目,无法核算")); } + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(), new Date(), SalaryAcctOptEnum.PROGRESS.getDefaultLabel()); // 回算薪资项目 List salarySobBackItems = Collections.emptyList(); if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { @@ -965,7 +968,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe getSalaryAcctProgressService(user).finish(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), true); //更新薪资核算记录最后操作日期 - getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(), new Date(), "薪资计算完成"); + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(), new Date(), SalaryAcctOptEnum.COMPLETED.getDefaultLabel()); stopWatch.stop(); log.info(stopWatch.prettyPrint()); diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index f76d1354a..9d5dab251 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.salaryacct.bo.SalaryCalcTax; import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; import com.engine.salary.entity.salaryacct.param.AbnormalEmployeeListQueryParam; +import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxBatParam; import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxParam; import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; @@ -19,6 +20,7 @@ import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; import com.engine.salary.entity.taxdeclaration.response.DeclareTaxResponse; import com.engine.salary.enums.common.SalaryLogOperateTypeEnum; +import com.engine.salary.enums.salaryaccounting.SalaryAcctOptEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.OnlineCalculateTaxException; @@ -303,4 +305,34 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe // 记录日志 getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.GET_CALC_TAX_FEEDBACK); } + + @Override + public void batCalcTax(SalaryCalcTaxBatParam salaryCalcTaxBatParam) { + List salaryAcctRecordIds = salaryCalcTaxBatParam.getSalaryAcctRecordIds(); + salaryAcctRecordIds.forEach(salaryAcctRecordId -> { + try { + SalaryCalcTaxParam param = SalaryCalcTaxParam.builder().salaryAcctRecordId(salaryAcctRecordId).build(); + calcTax(param); + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.ONLINE.getDefaultLabel()); + }catch (Exception e){ + log.error("获取在线算税异常,{}",salaryAcctRecordId, e); + } + }); + } + + @Override + public void batCalcTaxFeedback(SalaryCalcTaxBatParam salaryCalcTaxBatParam) { + List salaryAcctRecordIds = salaryCalcTaxBatParam.getSalaryAcctRecordIds(); + salaryAcctRecordIds.forEach(salaryAcctRecordId -> { + try { + SalaryCalcTaxParam param = SalaryCalcTaxParam.builder().salaryAcctRecordId(salaryAcctRecordId).build(); + calcTaxFeedback(param); + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.RESULT.getDefaultLabel()); + }catch (Exception e){ + log.error("获取在线算税结果异常,{}",salaryAcctRecordId, e); + } + }); + } } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 4757a8c32..e714125f9 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -593,6 +593,25 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::calcTaxFeedback, salaryCalcTaxParam); } + + @POST + @Path("/acctresult/batCalcTax") + @ApiOperation("计算个税") + @Produces(MediaType.APPLICATION_JSON) + public String batCalcTax(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalaryCalcTaxBatParam salaryCalcTaxParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::batCalcTax, salaryCalcTaxParam); + } + + @POST + @Path("/acctresult/batCalcTaxFeedback") + @ApiOperation("获取个税计算反馈") + @Produces(MediaType.APPLICATION_JSON) + public String batCalcTaxFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalaryCalcTaxBatParam salaryCalcTaxParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::batCalcTaxFeedback, salaryCalcTaxParam); + } + //计算税后工资 @POST @Path("/acctresult/afterTaxAccounting") diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index c2a3d45eb..b5b8d4e2e 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -371,4 +371,12 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult public void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam) { getSalaryCalcTaxService(user).calcTaxFeedback(salaryCalcTaxParam); } + + public void batCalcTax(SalaryCalcTaxBatParam salaryCalcTaxBatParam) { + getSalaryCalcTaxService(user).batCalcTax(salaryCalcTaxBatParam); + } + + public void batCalcTaxFeedback(SalaryCalcTaxBatParam salaryCalcTaxBatParam) { + getSalaryCalcTaxService(user).batCalcTaxFeedback(salaryCalcTaxBatParam); + } }