|
|
|
|
@ -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);
|
|
|
|
|
// 已经申报成功了的个税申报表的个税扣缴义务人不允许重新生成
|
|
|
|
|
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);
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|