From be3b4fc7e141bca05beff2164510c59f894fc4b5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 4 Jul 2025 15:13:28 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E7=89=88=E6=9C=AC=20?= =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E7=94=B3=E6=8A=A5bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TaxDeclareRecordServiceImpl.java | 62 ++++++++++++++++++- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 13ae9c1a8..2c78fa48e 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -48,6 +48,7 @@ import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentTaxReturnStatusEnum; import com.engine.salary.enums.taxdeclaration.*; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareStatusMapper; import com.engine.salary.remote.tax.client.DeclareClient; @@ -55,6 +56,8 @@ import com.engine.salary.remote.tax.response.declare.GetCompanyIncomesResponse; import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.service.*; import com.engine.salary.service.factory.TaxPaymentServiceFactory; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; @@ -77,6 +80,7 @@ import java.util.*; import java.util.stream.Collectors; import static com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum.NOT_DECLARE; +import static com.engine.salary.sys.constant.SalarySysConstant.TAX_DECLARATION_DATE_TYPE; /** * 个税申报 @@ -182,9 +186,20 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe return ServiceUtil.getService(OtherDeductionServiceImpl.class, user); } + private SalaryAcctRecordMapper getSalaryAcctRecordMapper() { + return MapperProxyFactory.getProxy(SalaryAcctRecordMapper.class); + } + private TaxPaymentServiceFactory taxPaymentServiceFactory = new TaxPaymentServiceFactory(user); + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + + //是否根据税款所属期进行申报 + private final boolean isTaxDeclarationByTaxCycle = "1".equals(getSalarySysConfService(user).getValueByCode(TAX_DECLARATION_DATE_TYPE)); + // private TaxPaymentRequestMapper taxPaymentRequestMapper; @@ -274,9 +289,44 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 根据个税扣缴义务人范围查询个税扣缴义务人 Collection taxAgents = queryByTaxAgentRange(saveParam); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); + + Date taxCycle; + List salaryAcctRecords = new ArrayList<>(); + //根据税款所属期申报 + if (isTaxDeclarationByTaxCycle) { + taxCycle = saveParam.getTaxCycle(); + if (Objects.isNull(taxCycle)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "税款所属期参数错误")); + } + + // 查询薪资所属月的薪资核算记录 + salaryAcctRecords = listByTaxCycle(SalaryAcctRecordPO.builder().taxCycle(taxCycle).build()); + // 无薪资核算记录,不允许生成个税申报表 + if (CollectionUtils.isEmpty(salaryAcctRecords)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98874, "{0}无申报数据").replace("{0}", SalaryDateUtil.getFormatYearMonth(taxCycle))); + } + } else { + //根据薪资所属月申报 + // 薪资所属月的日期范围 + LocalDateRange salaryMonthDateRange = SalaryDateUtil.localDate2Range(saveParam.getSalaryMonth()); + if (Objects.isNull(salaryMonthDateRange)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "薪资所属月参数错误")); + } + // 查询薪资所属月的薪资核算记录 + salaryAcctRecords = listBySalaryMonth(SalaryAcctRecordPO.builder().salaryMonths(salaryMonthDateRange).build()); + // 如果当前薪资所属月下存在不同的税款所属期,属于异常业务场景,不允许生成个税申报表 + taxCycle = salaryAcctRecords.get(0).getTaxCycle(); + boolean differentTaxCycle = salaryAcctRecords.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0); + if (differentTaxCycle) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表") + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + } + } // 查询薪资所属月下的薪资核算记录,并按照权限过滤 - LocalDateRange salaryMonthRange = new LocalDateRange().setFromDate(saveParam.getSalaryMonth()).setEndDate(saveParam.getSalaryMonth()); - List salaryAcctRecords = getSalaryAcctRecordService(user).listBySalaryMonth(salaryMonthRange); + // LocalDateRange salaryMonthRange = new LocalDateRange().setFromDate(saveParam.getSalaryMonth()).setEndDate(saveParam.getSalaryMonth()); + // List salaryAcctRecords = getSalaryAcctRecordService(user).listBySalaryMonth(salaryMonthRange); + + // 查询薪资核算记录关联的个税扣缴义务人 List salaryAcctTaxAgents = getSalaryAcctRecordService(user).listBySalaryAcctRecordIds(SalaryEntityUtil.properties(salaryAcctRecords, SalaryAcctRecordPO::getId)); // 按照saveParam中的个税扣缴义务人范围过滤 @@ -362,6 +412,14 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } } + public List listBySalaryMonth(SalaryAcctRecordPO po) { + return getSalaryAcctRecordMapper().listSome(po); + } + + public List listByTaxCycle(SalaryAcctRecordPO po) { + return getSalaryAcctRecordMapper().listSome(po); + } + @Override public void refreshData(Long id) { // 查询个税申报记录 From b55ea81e4e18c61352bfc22167a08475a92fac3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 7 Jul 2025 10:20:24 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/lib/hrmelog.jar | Bin 138117 -> 138098 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resource/WEB-INF/lib/hrmelog.jar b/resource/WEB-INF/lib/hrmelog.jar index 7589cfeae2af120009328d9fce0d18905612e06a..ba4091f61da05482aa31da16145b2ef8ce271720 100644 GIT binary patch delta 4520 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 SaE{!{|2E1K2q>Q=5dI69l4_m+ delta 4457 zcmZWtdpy(YANPH1Gn-*-!${>WQm#n{NfKQ|x!*~bBcYqiDeLM`PSQGkCB`AQ$ZZ|# zf|5{_s7_^y$*GQCF?2DN`OTiqtKaYV$9wP3`*VGsXRi+v_4pGUyyB*HvKWGl3|>a2 z)6>sCOHl_S{%s}s9k2+~A>wP(b|GQ|Q-J70un;VUAYE4%?M48Rc^DAHV)kk95fLM1 zlDZ!Aj1qy_0Pw#n0!8+HOb@iMS-86rO>d0YUx}TKFZq9JA7O_?&m+zUFy=_1SU;cb zqNpp;^N1FxBLGBpxzc7x)sZcs9QCh4V14W;)o_X4+(1GJC_hW6tWZdy)v|!hE~Z_O z^xK}Q%ZyT2hK(hudjQz9r>-uOPbb3@qmb~!2wk^PR|gQ&o(y*m4(XF04msbj1OZVWmhI~3YG)v>Z?4P_ zKZZ;sR|_?ry?Dl%?Fz66ks3XuD5}sh*H3cBvxli%Bqx3g6d61oFMbP5yRt>7p%Tzy zlUUMetSl&(%w?p|4OYaqD+7`^E6c6t=E%-1w~$<|Bz0Y8ZaJ~8LPt{YwSBV$9*t80 z*ncOTv&pf~Uoq19S68;o_$&Hof(oFq2_3&Ui!-9>BxE_vEy{*=sQ?AkP!&))1VzLY zUKZ3&1+jqQI2A-v=1(Eygyqk@DXd?LatK$Db#R;U;4;<^#GFS z2EDBT2%LFu5hDKo#-vOa9n#KGMEdnAJrFdS4k##f3{hr;M99_}uQ{x8-nO1n7xn~0 zj8kr_ePS^0Zzl!q#d#V>@`~eguex2ddiDJ326W#*?%z+__V+m!IDV?$v2o)}IxB_0 z(@JG&*`?eTQ+|H}fASE&>D!ta!J|;2Vwn1}B3m4rIvG(;@(pvDI_K-DtlNrrj}d5n zFv=OkpQrW&1nZ{gsKmn`(4pXc^^uQu=GQe@^N= zbGz<%fhvBWvAO2v4m(2f-pZl@Ati6{UX; znz~1QbS?Qy$EA?7g|&(P#e@LMZB+#~qb_QBk^UN!ozOONuE}N;c6B8A+@rNBY-v#{ zEU3r|4x?mv*c|s7=Vr7`AK7d9#_PU?%O9~CR~@5NyS;zu2rQAK8&oA?w+)=Pd?{b* zSEgX}&uDMqGjikBkY~YpeKq>ksC&fFWM|{mf)!Qap$`Mo^=YI?!{Y-D{?|TWbI*-t zkUw``SUh}@kW*5f#=w!YV_oMt;duA%akHMb`D>QruTXTn^Y++8+jenZ4H^hHldE8L1cd04KBqNZaDT|+uH9=8w#%xF zwA!+@F3-AcLk}ULdL&WyPN*|TO-)fK6P!ahTsB6N&)L8X0hoIn* zE#tDJ*r8uRS}y86u1j)kTVcv7$kplepxkv_6aTZIe8Ke!pYY80T{wB~q-G$uS%WoRhV^3Y# zC_F~8TQTUl^gVZGR4e7-NYG5N=lkowEsI@waP+XziWgh=GZL^)SL%10<*}%j5-;Jx z^N6gFn8KIw53V*jPE{srZq5$AddlSW*tw(#llo!$#K&RJQf_j>Uk&q3Xp5aoul=WP z?7~~Of&RVa4%P1#+6i*Z)}AZ2@N`hW9e3*eUcuF2{H4f}yv2bx>?2Lp>pkz$OG&=8 zo=smPeeGJb<#VkVSr=HBX{B#ztktY{=;$S9^Z3yFQ*l9$Zn#|B|FXlo>e-vx zWPIfLQQM6AL1&G;?@bPE9z12mv}f(5vi~&4*DMmeJZ>9Ncx+;MM=fS_=yOVwy-Ofd zeWa08yiB;=s?o4WVd6$!LV;}fnphXLRKc^5@wb^L$y4{|{m$@A`ufp-s4-&2LWj2T z1sfj+Zk2!s~epfuOXwNG{Y)|kxUD~RA*QOLxM#<-?m#wj_+mamX zcJ~?zQqI48^5R#wfYP+YoD*>yCq|2_4SEeUN?QUCkmI}G*{@y03>mKfRs*fKr+1mGld3v({PXEQnduuH6pD(X^apK0}tMe?M(zRlo zaO?;BS+U{$?{>V~euCo^%2>b{WPCE?Y8(o+)Bd(Pk@}6#TZvbDJ$P%7*V_Hf_MCsK z{j%pVuePgC`+s;d>9&~fnaRNXn#Oxg7rNRDseSrf%vnQ?bqkWv1ka9F+Gp=KCF>ok zZHedaq`H=TjrQZdA(&ZQb~9ZURAKU9>(u+ZX~LX+Lpv|uiB+nqTlt)^`jNpwdVY9i zfcJrK@Abatk54b@;gm!~U11dqzgK;H+Avzad{gPRvXX6;MV#6y^YrIYO%~TpnVs%= z^|IN9UVnrpoW|rXOao?=P!_BH55i2&}{hV13tP7l3XUIXRgUHA^&G|cidv)_<(foop_Psn8 zE^R0Gkvz3g?F@6Wbp~u&Cx)6oh#38D3cMgV3W6aRk^poy0(_x79|1uS&CGED00ctrIskqUQDs2@M0;g{Kdhl! z7C1vr4Ff_TmxKYUA!^2e%@C<$MZU9(J9+>swTkLr3poN#nr$aes%ysqA81`D2f`pa zAt&lb9HmcA#^n47^%>kE>X>Tb%5Iu~2D2p|+920_a42*4foVMYW8 zASxq@bhEo4N>l(xA<9w!QP5Y^IUS{t0Ni#_Cz7<)Y?3tjXA%Tobv5dB9* z>b71Ltb&{sMIc_smbbZ8J6;;}$EDdadTp$f> zf~cA%^(CrFBS)!8Be$smS2$R*y670i!#3|OYnnXP*fI9p9lo!lKj5+0fR~;)O Date: Mon, 7 Jul 2025 10:20:53 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/lib/hrmelog.jar | Bin 138117 -> 138098 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resource/WEB-INF/lib/hrmelog.jar b/resource/WEB-INF/lib/hrmelog.jar index 7589cfeae2af120009328d9fce0d18905612e06a..ba4091f61da05482aa31da16145b2ef8ce271720 100644 GIT binary patch delta 4520 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 SaE{!{|2E1K2q>Q=5dI69l4_m+ delta 4457 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 Date: Tue, 8 Jul 2025 18:28:00 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=94=B3=E6=8A=A5=E5=85=8D=E7=A8=8E?= =?UTF-8?q?=E6=94=B6=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxdeclaration/bo/TaxDeclarationRequest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java index 5bcad824f..284b5a010 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationRequest.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; import com.engine.salary.enums.datacollection.TaxFreeTypeEnum; import com.engine.salary.enums.employeedeclare.CardTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; @@ -43,6 +44,10 @@ public class TaxDeclarationRequest { Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory); Map employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId); Map> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId); + taxDeclarations = taxDeclarations.stream() + .filter(taxDeclaration -> IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()) != null + && IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType()== DeclareReportTypeEnum.COMPREHENSIVE_INCOME) + .collect(Collectors.toList()); for (TaxDeclarationPO taxDeclaration : taxDeclarations) { List values = taxDeclarationValueMap.get(taxDeclaration.getId()); for (TaxDeclarationValuePO taxDeclarationValue : values) { @@ -338,6 +343,10 @@ public class TaxDeclarationRequest { Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory); Map employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId); Map> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId); + taxDeclarations = taxDeclarations.stream() + .filter(taxDeclaration -> IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()) != null + && IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType()== DeclareReportTypeEnum.CLASSIFIED_INCOME) + .collect(Collectors.toList()); for (TaxDeclarationPO taxDeclaration : taxDeclarations) { List values = taxDeclarationValueMap.get(taxDeclaration.getId()); IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()); @@ -380,6 +389,10 @@ public class TaxDeclarationRequest { Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory); Map employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getEmployeeId); Map> taxDeclarationValueMap = SalaryEntityUtil.group2Map(taxDeclarationValues, TaxDeclarationValuePO::getTaxDeclarationId); + taxDeclarations = taxDeclarations.stream() + .filter(taxDeclaration -> IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()) != null + && IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType()== DeclareReportTypeEnum.NONRESIDENT_INCOME) + .collect(Collectors.toList()); for (TaxDeclarationPO taxDeclaration : taxDeclarations) { List values = taxDeclarationValueMap.get(taxDeclaration.getId()); for (TaxDeclarationValuePO taxDeclarationValue : values) {