钱智,批量在线算税

This commit is contained in:
钱涛 2025-11-17 15:02:11 +08:00
parent 83adc57dda
commit 6a01e1b0f6
10 changed files with 242 additions and 72 deletions

View File

@ -39,4 +39,10 @@ public class SalaryAcctRecordQueryParam extends BaseQueryParam {
private String startMonthStr;
private String endMonthStr;
/**
* 最后操作
* SalaryAcctOptEnum
*/
private List<String> lastOperates;
}

View File

@ -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<Long> salaryAcctRecordIds;
}

View File

@ -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 {
/**

View File

@ -0,0 +1,58 @@
package com.engine.salary.enums.salaryaccounting;
import com.engine.salary.enums.BaseEnum;
import java.util.Objects;
/**
* 操作枚举
* <p>Copyright: Copyright (c) 2025</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public enum SalaryAcctOptEnum implements BaseEnum<String> {
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;
}
}

View File

@ -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);
}

View File

@ -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<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordMapper().listSome(po);
salaryAcctRecordPOS = getAuthService(user).auth(salaryAcctRecordPOS, AuthFilterTypeEnum.DATA_OPT, SalaryAcctRecordPO.class);
//过滤
List<String> 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<Long> taxAgentIds = salarySobPO.getTaxAgentIds();
taxAgentIds.forEach(taxAgentId->{
taxAgentIds.forEach(taxAgentId -> {
//查询扣缴义务人下的所有账套
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByTaxAgentId(taxAgentId);
Set<Long> salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId);
//获取账套下的所有核算结果
List<SalaryAcctRecordPO> 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());
}
}

View File

@ -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<SalarySobBackItemPO> 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());

View File

@ -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<Long> 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<Long> 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);
}
});
}
}

View File

@ -593,6 +593,25 @@ public class SalaryAcctController {
return new ResponseResult<SalaryCalcTaxParam, SalaryCalcTaxInfoDTO>(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<SalaryCalcTaxBatParam, SalaryCalcTaxInfoDTO>(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<SalaryCalcTaxBatParam, SalaryCalcTaxInfoDTO>(user).run(getSalaryAcctResultWrapper(user)::batCalcTaxFeedback, salaryCalcTaxParam);
}
//计算税后工资
@POST
@Path("/acctresult/afterTaxAccounting")

View File

@ -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);
}
}