钱智,批量在线算税
This commit is contained in:
parent
83adc57dda
commit
6a01e1b0f6
|
|
@ -39,4 +39,10 @@ public class SalaryAcctRecordQueryParam extends BaseQueryParam {
|
|||
|
||||
private String startMonthStr;
|
||||
private String endMonthStr;
|
||||
|
||||
/**
|
||||
* 最后操作
|
||||
* SalaryAcctOptEnum
|
||||
*/
|
||||
private List<String> lastOperates;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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 {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue