From 79632dd1bf442313dcf6337dfd733f2f0452f636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 7 Jun 2022 19:10:40 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E8=A1=A8=E5=88=86=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sql/分权.sql | 2 +- .../salaryacct/po/SalaryAcctResultPO.java | 1 + .../salaryacct/SalaryAcctResultMapper.xml | 7 +- .../service/SalaryAcctResultService.java | 9 + .../impl/AddUpDeductionServiceImpl.java | 6 + .../impl/AddUpSituationServiceImpl.java | 10 +- .../impl/OtherDeductionServiceImpl.java | 6 + .../impl/SalaryAcctRecordServiceImpl.java | 29 +-- .../impl/SalaryAcctResultServiceImpl.java | 8 + .../service/impl/SalarySobServiceImpl.java | 16 +- .../engine/salary/util/SalaryDateUtil.java | 18 ++ .../salary/wrapper/AddUpDeductionWrapper.java | 7 - .../salary/wrapper/AddUpSituationWrapper.java | 2 - .../wrapper/SalaryAcctRecordWrapper.java | 2 +- .../wrapper/SalaryArchiveTaxAgentWrapper.java | 2 +- .../salary/wrapper/TaxDeclarationWrapper.java | 169 ++++++------------ 16 files changed, 144 insertions(+), 150 deletions(-) diff --git a/resource/sql/分权.sql b/resource/sql/分权.sql index 15116bb76..9f329ea24 100644 --- a/resource/sql/分权.sql +++ b/resource/sql/分权.sql @@ -133,4 +133,4 @@ ALTER TABLE hrsa_tax_agent ADD COLUMN payment_agency varchar(255) NULL COMMENT ' ALTER TABLE hrsa_salary_sob ADD COLUMN tax_agent_id bigint(0) NULL COMMENT '个税扣缴义务人的主键id' AFTER tenant_key; -INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 1, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams'); +INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams'); diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultPO.java index caf483bb9..d9cbb7a65 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctResultPO.java @@ -93,4 +93,5 @@ public class SalaryAcctResultPO { private Collection salaryAcctRecordIds; private Collection salaryAcctEmpIds; private Collection employeeIds; + private Collection taxAgentIds; } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml index 5c84efe1b..cf8c4ebd1 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.xml @@ -122,7 +122,12 @@ #{employeeId} - + + AND tax_agent_id IN + + #{taxAgentId} + + ORDER BY id DESC diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index c3c68396a..d73748fe1 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -131,4 +131,13 @@ public interface SalaryAcctResultService { * @param simpleEmployee */ void calculate(SalaryAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee); + + /** + * 根据薪资核算记录的id、个税扣缴义务人查询薪资核算结果 + * + * @param salaryAcctRecordIds 薪资核算记录的id + * @param taxAgentIds 个税扣缴义务人id + * @return + */ + List listBySalaryAcctRecordIdsAndTaxAgentIds(Collection salaryAcctRecordIds, Collection taxAgentIds); } diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index ad3017f8a..b2984b15e 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -398,6 +398,12 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction @Override public PageInfo listPage(AddUpDeductionQueryParam queryParam) { + //申报月份 + List declareMonth = queryParam.getDeclareMonth(); + if (CollectionUtils.isNotEmpty(declareMonth)) { + queryParam.setDeclareMonth(declareMonth.stream().map(e -> e + "-01 00:00:00").collect(Collectors.toList())); + } + long employeeId = user.getUID(); // 未开启分权或是薪酬模块总管理员 diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index 177098d58..cb2d79b94 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -161,6 +161,12 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation @Override public PageInfo listPage(AddUpSituationQueryParam queryParam) { + + List taxYearMonth = queryParam.getTaxYearMonth(); + if(CollectionUtils.isNotEmpty(taxYearMonth)){ + queryParam.setTaxYearMonth(taxYearMonth.stream().map(e -> e + "-01 00:00:00").collect(Collectors.toList())); + } + long employeeId = user.getUID(); // 未开启分权或是薪酬模块总管理员 if (!getTaxAgentService(user).isOpenDevolution() || getTaxAgentService(user).isChief(employeeId)) { @@ -222,7 +228,9 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100353, "参数有误:税款所属期必传")); } AddUpSituationBiz biz = new AddUpSituationBiz(); - biz.deleteSome(AddUpSituation.builder().employeeIds(employeeIds).taxYearMonth(SalaryDateUtil.toDateStartOfMonth(taxYearMonth)).build()); + String formatLocalDate = SalaryDateUtil.getFormatLocalDate(SalaryDateUtil.toDateStartOfMonth(taxYearMonth)); + Date date = SalaryDateUtil.localDateToDate(LocalDate.parse(formatLocalDate, SalaryDateUtil.DATE_FORMATTER)); + biz.deleteSome(AddUpSituation.builder().employeeIds(employeeIds).taxYearMonth(date).build()); return Boolean.TRUE; } diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 5f184cd7a..8fe92a2c7 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -72,6 +72,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction @Override public PageInfo listPage(OtherDeductionQueryParam queryParam) { + //申报月份 + List declareMonth = queryParam.getDeclareMonth(); + if (CollectionUtils.isNotEmpty(declareMonth)) { + queryParam.setDeclareMonth(declareMonth.stream().map(e -> e + "-01 00:00:00").collect(Collectors.toList())); + } + long employeeId = user.getUID(); // 未开启分权或是薪酬模块总管理员 if (!getTaxAgentV2Service(user).isOpenDevolution() || getTaxAgentV2Service(user).isChief(employeeId)) { diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 460131073..7b3ef09bd 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -148,20 +148,21 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe // 判断是否开启了分权 Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); - // 如果没有开启分权,直接分页 - if (!needAuth) { - // 查询薪资核算记录 - SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); - List salaryAcctRecordPOS = getSalaryAcctRecordMapper().listSome(po); - page.setList(salaryAcctRecordPOS); - return page; - } else { - List salaryAcctRecords = getSalaryAcctRecordMapper().listSome(po); - List canViewSalaryAcctRecords = filterByAuthority(salaryAcctRecords, currentEmployeeId); - page.setTotal(canViewSalaryAcctRecords.size()); - page.setList(SalaryPageUtil.subList((int) page.getPageNum(), (int) page.getPageSize(), canViewSalaryAcctRecords)); - return page; + if (needAuth) { + List salarySobPOS = getSalarySobService(user).listByAdmin(); + Set salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); + + if (CollectionUtils.isEmpty(salarySobIds)) { + return new PageInfo<>(); + } + + po.setSalarySobIds(salarySobIds); } + + // 查询薪资核算记录 + SalaryPageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); + List salaryAcctRecordPOS = getSalaryAcctRecordMapper().listSome(po); + return new PageInfo<>(salaryAcctRecordPOS,SalaryAcctRecordPO.class); } @Override @@ -518,7 +519,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe .map(SalaryAcctEmployeePO::getSalaryAcctRecordId) .collect(Collectors.toSet()); return salaryAcctRecords.stream() - .filter(salaryAcctRecordPO -> canViewSalaryAcctRecordIds.contains(salaryAcctRecordPO.getId()) || Objects.equals(salaryAcctRecordPO.getCreator(), employeeId)) + .filter(salaryAcctRecordPO -> canViewSalaryAcctRecordIds.contains(salaryAcctRecordPO.getId())) .collect(Collectors.toList()); } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index fccaeb35f..883639b2d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -541,4 +541,12 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // throw e; // } } + + @Override + public List listBySalaryAcctRecordIdsAndTaxAgentIds(Collection salaryAcctRecordIds, Collection taxAgentIds) { + if (CollectionUtils.isEmpty(salaryAcctRecordIds)) { + return Collections.emptyList(); + } + return getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordIds(salaryAcctRecordIds).taxAgentIds(taxAgentIds).build()); + } } diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index 5e74503b2..705c62469 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -379,6 +379,19 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { @Override public void deleteByIds(Collection ids) { + + //分权 + Boolean isOpenDevolution = getTaxAgentService(user).isOpenDevolution(); + if (isOpenDevolution) { + List salarySobPOS = listByAdmin(); + Set salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); + Optional first = ids.stream().filter(f -> !salarySobIds.contains(f)).findFirst(); + if (first.isPresent()) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98379, "无权限删除")); + } + } + + // 查询薪资账套 List salarySobPOS = listByIds(ids); if (CollectionUtils.isEmpty(salarySobPOS)) { @@ -535,12 +548,9 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { public List filterByAdmin(List salarySobPOS) { long employeeId = user.getUID(); - // 判断是否是“总管理员” - Boolean isChief = getTaxAgentService(user).isChief(employeeId); // 是否开启分权 Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); // 开启分权后 - // 总管理员都能看见 // 管理员自己管理的个税下的 if (!openDevolution) { return salarySobPOS; diff --git a/src/com/engine/salary/util/SalaryDateUtil.java b/src/com/engine/salary/util/SalaryDateUtil.java index 37536ed53..e622321b1 100644 --- a/src/com/engine/salary/util/SalaryDateUtil.java +++ b/src/com/engine/salary/util/SalaryDateUtil.java @@ -461,6 +461,24 @@ public class SalaryDateUtil { return localDate; } + + public static Date dateStrToLocalTime(String date) { + Date localDate = null; + try { + if (date.contains("/")) { + SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); + localDate = format.parse(date); + } else if (date.contains("-")) { + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + localDate = format.parse(date); + } + } catch (Exception e) { + log.error("日期解析异常,{}", date); + localDate = null; + } + + return localDate; + } } diff --git a/src/com/engine/salary/wrapper/AddUpDeductionWrapper.java b/src/com/engine/salary/wrapper/AddUpDeductionWrapper.java index a2ad02299..ecb7fdc37 100644 --- a/src/com/engine/salary/wrapper/AddUpDeductionWrapper.java +++ b/src/com/engine/salary/wrapper/AddUpDeductionWrapper.java @@ -54,13 +54,6 @@ public class AddUpDeductionWrapper extends Service { * @return */ public PageInfo list(AddUpDeductionQueryParam queryParam) { - - //申报月份 - List declareMonth = queryParam.getDeclareMonth(); - if (CollectionUtils.isNotEmpty(declareMonth)) { - queryParam.setDeclareMonth(declareMonth.stream().map(e -> e + "-01 00:00:00").collect(Collectors.toList())); - } - PageInfo pageInfo = getAddUpDeductionService(user).listPage(queryParam); return pageInfo; diff --git a/src/com/engine/salary/wrapper/AddUpSituationWrapper.java b/src/com/engine/salary/wrapper/AddUpSituationWrapper.java index 313098bd5..df004f7fa 100644 --- a/src/com/engine/salary/wrapper/AddUpSituationWrapper.java +++ b/src/com/engine/salary/wrapper/AddUpSituationWrapper.java @@ -57,8 +57,6 @@ public class AddUpSituationWrapper extends Service { * @return */ public PageInfo list(AddUpSituationQueryParam queryParam) { -// queryParam.setTaxYearMonthDate(CollectionUtils.emptyIfNull(queryParam.getTaxYearMonth()).stream().map(e-> LocalDate.of(e.getYear(),e.getMonthValue(),1)).collect(Collectors.toList())); - return getAddUpSituationService(user).listPage(queryParam); } diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index cd8d6c5a6..7d4f8d091 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -181,7 +181,7 @@ public class SalaryAcctRecordWrapper extends Service { } /** - * 重新归档 + * 重新核算 * * @param id 薪资核算记录的id */ diff --git a/src/com/engine/salary/wrapper/SalaryArchiveTaxAgentWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveTaxAgentWrapper.java index 7f7858221..69b7a509f 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveTaxAgentWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveTaxAgentWrapper.java @@ -88,7 +88,7 @@ public class SalaryArchiveTaxAgentWrapper extends Service { private Map buildTaxAgentForm(Date effectiveTime, String adjustReason, String adjustBefore, Long adjustAfter) { // 个税扣缴义务人下拉列表 - Collection taxAgentList = getTaxAgentService(user).findAll(); + Collection taxAgentList = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long)user.getUID()); Map map = new HashMap<>(); map.put("adjustReasonList", SalaryArchiveTaxAgentAdjustReasonEnum.getList()); map.put("taxAgentList", taxAgentList); diff --git a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java index da1565b51..daa3c44db 100644 --- a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java @@ -3,7 +3,6 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.EmployBiz; -import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.common.LocalDateRange; import com.engine.salary.component.WeaFormOption; import com.engine.salary.entity.datacollection.AddUpSituation; @@ -36,6 +35,7 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; import org.springframework.transaction.annotation.Transactional; import weaver.hrm.User; @@ -92,6 +92,10 @@ public class TaxDeclarationWrapper extends Service { private SalaryAcctResultService getSalaryAcctResultService(User user) { return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } + private SalaryItemService getSalaryItemService(User user) { + return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + /** * 个税申报表列表 @@ -192,76 +196,79 @@ public class TaxDeclarationWrapper extends Service { public void save(TaxDeclarationSaveParam saveParam) { long currentEmployeeId = user.getUID(); + // 个税扣缴义务人id + Set taxAgentIds; + Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); + if (BooleanUtils.isFalse(openDevolution)) { + taxAgentIds = SalaryEntityUtil.properties(getTaxAgentService(user).listAll(), TaxAgentPO::getId); + } else { + taxAgentIds = SalaryEntityUtil.properties(getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId), TaxAgentPO::getId); + } + + // 检查是否具有权限 + if (CollectionUtils.isEmpty(taxAgentIds)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "对不起,您不具备任何个税扣缴义务人的管理权限")); + } + + // 查询个税扣缴义务人 + List taxAgentPOS = getTaxAgentService(user).listByIds(taxAgentIds); + Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgentPO::getId, TaxAgentPO::getName); + // 薪资所属月的日期范围 LocalDateRange salaryMonthDateRange = SalaryDateUtil.localDate2Range(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1))); if (Objects.isNull(salaryMonthDateRange)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "薪资所属月参数错误")); } - Long taxAgentId = saveParam.getTaxAgentId(); - - if (Objects.isNull(taxAgentId)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "请选择个税扣缴义务人")); - } - - //查询个税扣缴义务人 - TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxAgentId); - if (Objects.isNull(taxAgentPO)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "所选个税扣缴义务人不存在")); - } - - //开启分权 - Boolean isNeedAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId); - if (isNeedAuth) { - Collection taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin(currentEmployeeId); - Set taxAgentIds = SalaryEntityUtil.properties(taxAgentPOS, TaxAgentPO::getId); - if(!taxAgentIds.contains(taxAgentId)){ - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "无权限操作所选个税扣缴义务人")); - } - } - - //获取个税扣缴义务人下的账套 - List salarySobs = getSalarySobService(user).listByTaxAgentId(taxAgentId); - Set salarySobIds = SalaryEntityUtil.properties(salarySobs, SalarySobPO::getId); - // 查询薪资所属月个税扣缴义务人已经生成过的个税申报表 - List taxDeclarationPOS = listBySalaryMonthTax(TaxDeclarationPO.builder().salaryMonths(salaryMonthDateRange).taxAgentId(taxAgentId).build()); + List taxDeclarationPOS = listBySalaryMonthTax(TaxDeclarationPO.builder().salaryMonths(salaryMonthDateRange).taxAgentIds(taxAgentNameMap.keySet()).build()); // 已经生成过个税申报表,不允许再次生成个税申报表 if (CollectionUtils.isNotEmpty(taxDeclarationPOS)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98873, "{0}已经生成过个税申报表,不允许再次生成").replace("{0}", saveParam.getSalaryMonth().toString())); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(107986, "{0}在{1}已经生成过个税申报表,不允许再次生成") + .replace("{0}", taxAgentNameMap.get(taxDeclarationPOS.get(0).getTaxAgentId())) + .replace("{1}", saveParam.getSalaryMonth().toString())); } // 查询薪资所属月的薪资核算记录 - List salaryAcctRecordPOS = listBySalaryMonth(SalaryAcctRecordPO.builder().salaryMonths(salaryMonthDateRange).salarySobIds(salarySobIds).build()); + List salaryAcctRecordPOS = listBySalaryMonth(SalaryAcctRecordPO.builder().salaryMonths(salaryMonthDateRange).build()); // 无薪资核算记录,不允许生成个税申报表 if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", saveParam.getSalaryMonth().toString())); } + // 查询薪资核算结果 + List salaryAcctResultPOS = getSalaryAcctResultService(user) + .listBySalaryAcctRecordIdsAndTaxAgentIds(SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId), taxAgentIds); + + // 无薪资核算结果,不允许生成个税申报表 + if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(110093, "{0}无可申报数据") + .replace("{0}", saveParam.getSalaryMonth().toString())); + } + + Set salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryAcctRecordId); + salaryAcctRecordPOS = salaryAcctRecordPOS.stream().filter(salaryAcctRecordPO -> salaryAcctRecordIds.contains(salaryAcctRecordPO.getId())).collect(Collectors.toList()); // 如果存在未归档的,也不允许生成个税申报表 boolean notArchived = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> !Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue())); if (notArchived) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报").replace("{0}", saveParam.getSalaryMonth().toString())); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报") + .replace("{0}", saveParam.getSalaryMonth().toString())); } // 如果当前薪资所属月下存在不同的税款所属期,属于异常业务场景,不允许生成个税申报表 Date taxCycle = salaryAcctRecordPOS.get(0).getTaxCycle(); boolean differentTaxCycle = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0); if (differentTaxCycle) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表").replace("{0}", saveParam.getSalaryMonth().toString())); - } - // 查询薪资核算结果 - Set salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId); - List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); - // 无薪资核算结果,不允许生成个税申报表 - if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", saveParam.getSalaryMonth().toString())); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表") + .replace("{0}", saveParam.getSalaryMonth().toString())); } // 查询薪资账套 -// Set salarySobIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getSalarySobId); -// List salarySobPOS = getSalarySobService(user).listByIds(salarySobIds); + Set salarySobIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getSalarySobId); + List salarySobPOS = getSalarySobService(user).listByIds(salarySobIds); // 查询所有薪资项目 - List salaryItemPOS = new SalaryItemBiz().listAll(); + List salaryItemPOS = getSalaryItemService(user).listAll(); + + // 处理要保存的数据 - TaxDeclarationBO.Result result = TaxDeclarationBO.handle(saveParam, taxCycle, user, salaryItemPOS, salarySobs, salaryAcctResultPOS); + TaxDeclarationBO.Result result = TaxDeclarationBO.handle(saveParam, taxCycle, user, salaryItemPOS, salarySobPOS, salaryAcctResultPOS); // 保存个税申报表 if (CollectionUtils.isNotEmpty(result.getNeedInsertTaxDeclarations())) { getTaxDeclarationMapper().batchInsert(result.getNeedInsertTaxDeclarations()); @@ -272,88 +279,12 @@ public class TaxDeclarationWrapper extends Service { } // 保存累计情况 if (CollectionUtils.isNotEmpty(result.getNeedInsertAccumulatedSituations())) { - Set taxAgentIds = SalaryEntityUtil.properties(result.getNeedInsertTaxDeclarations(), TaxDeclarationPO::getTaxAgentId); getAddUpSituationService(user).deleteByTaxYearMonthAndTaxAgentIds(SalaryDateUtil.localDate2YearMonth(taxCycle), taxAgentIds); List> partition = Lists.partition((List) result.getNeedInsertAccumulatedSituations(), 100); partition.forEach(getAddUpSituationMapper()::insertData); } // 更新薪资核算记录的状态 getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED); -// -// } else { -// -// // 查询薪资所属月已经生成过的个税申报表 -// List taxDeclarationPOS = listBySalaryMonthTax(TaxDeclarationPO.builder().salaryMonths(salaryMonthDateRange).build()); -// // 已经生成过个税申报表,不允许再次生成个税申报表 -// if (CollectionUtils.isNotEmpty(taxDeclarationPOS)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98873, "{0}已经生成过个税申报表,不允许再次生成").replace("{0}", saveParam.getSalaryMonth().toString())); -// } -// // 查询薪资所属月的薪资核算记录 -// List salaryAcctRecordPOS = listBySalaryMonth(SalaryAcctRecordPO.builder().salaryMonths(salaryMonthDateRange).build()); -// // 无薪资核算记录,不允许生成个税申报表 -// if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", saveParam.getSalaryMonth().toString())); -// } -// // 如果存在未归档的,也不允许生成个税申报表 -// boolean notArchived = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> !Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue())); -// if (notArchived) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报").replace("{0}", saveParam.getSalaryMonth().toString())); -// } -// // 如果当前薪资所属月下存在不同的税款所属期,属于异常业务场景,不允许生成个税申报表 -// Date taxCycle = salaryAcctRecordPOS.get(0).getTaxCycle(); -// boolean differentTaxCycle = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0); -// if (differentTaxCycle) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表").replace("{0}", saveParam.getSalaryMonth().toString())); -// } -// // 查询薪资核算结果 -// Set salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getId); -// List salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); -// // 无薪资核算结果,不允许生成个税申报表 -// if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", saveParam.getSalaryMonth().toString())); -// } -// // 查询薪资账套 -// Set salarySobIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getSalarySobId); -// List salarySobPOS = getSalarySobService(user).listByIds(salarySobIds); -// -// // 查询所有薪资项目 -// List salaryItemPOS = new SalaryItemBiz().listAll(); -// // 处理要保存的数据 -// TaxDeclarationBO.Result result = TaxDeclarationBO.handle(saveParam, taxCycle, user, salaryItemPOS, salarySobPOS, salaryAcctResultPOS); -// // 保存个税申报表 -// if (CollectionUtils.isNotEmpty(result.getNeedInsertTaxDeclarations())) { -// getTaxDeclarationMapper().batchInsert(result.getNeedInsertTaxDeclarations()); -// } -// // 保存个税申报表明细 -// if (CollectionUtils.isNotEmpty(result.getNeedInsertTaxDeclarationDetails())) { -// getTaxDeclarationDetailService(user).batchSave(result.getNeedInsertTaxDeclarationDetails()); -// } -// // 保存累计情况 -// if (CollectionUtils.isNotEmpty(result.getNeedInsertAccumulatedSituations())) { -// Set taxAgentIds = SalaryEntityUtil.properties(result.getNeedInsertTaxDeclarations(), TaxDeclarationPO::getTaxAgentId); -// getAddUpSituationService(user).deleteByTaxYearMonthAndTaxAgentIds(SalaryDateUtil.localDate2YearMonth(taxCycle), taxAgentIds); -// List> partition = Lists.partition((List) result.getNeedInsertAccumulatedSituations(), 100); -// partition.forEach(getAddUpSituationMapper()::insertData); -// } -// // 更新薪资核算记录的状态 -// getSalaryAcctRecordService(user).updateStatusByIds(salaryAcctRecordIds, SalaryAcctRecordStatusEnum.DECLARED); -// } - // 查询个税扣缴义务人 -// Set taxAgentIds = SalaryEntityUtil.properties(result.getNeedInsertTaxDeclarations(), TaxDeclarationPO::getTaxAgentId); -// List taxAgentPOS = new TaxAgentBiz().listByIds(taxAgentIds); -// Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgentPOS, TaxAgent::getId, TaxAgent::getName); - // 记录日志 - /*for (TaxDeclarationPO taxDeclarationPO : result.getNeedInsertTaxDeclarations()) { - String targetName = SalaryDateUtil.toYearMonth(taxDeclarationPO.getSalaryMonth()) - + "(" + taxAgentNameMap.getOrDefault(taxDeclarationPO.getTaxAgentId(), StringUtils.EMPTY) + ")"; - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(String.valueOf(taxDeclarationPO.getId())); - loggerContext.setTargetName(targetName); - loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(99815, "生成个税申报表")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(99815, "生成个税申报表")); - taxDeclarationLoggerTemplate.write(loggerContext); - }*/ } public List listBySalaryMonthTax(TaxDeclarationPO build) {