From 4755d51d2db026f3a4af8551439bc060a19e3a0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 3 Jun 2025 14:30:46 +0800 Subject: [PATCH 01/84] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E5=8F=B0=E8=B4=A6?= =?UTF-8?q?=EF=BC=9A=201=E3=80=81=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E8=AE=B0=E5=BD=95=E5=B9=B6=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E3=80=82=202=E3=80=81=E6=89=B9=E9=87=8F=E5=BD=92=E6=A1=A3=203?= =?UTF-8?q?=E3=80=81=E6=89=B9=E9=87=8F=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=20=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=EF=BC=9A=201=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA=E6=A0=B8=E7=AE=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=B9=B6=E6=A0=B8=E7=AE=97=E3=80=82=202=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=BD=92=E6=A1=A3=203=E3=80=81=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97=20=E5=B7=A5?= =?UTF-8?q?=E8=B5=84=E5=8D=95=EF=BC=9A=201=E3=80=81=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=8F=91=E6=94=BE=202=E3=80=81=E6=89=B9=E9=87=8F=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=20=E7=94=B3=E6=8A=A5=E8=A1=A8=EF=BC=9A=201=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryBill/param/SalarySendBatParam.java | 27 ++++++++++ .../salaryacct/param/SalaryAcctBatParam.java | 34 ++++++++++++ .../siaccount/param/AccountBatParam.java | 40 ++++++++++++++ .../param/TaxDeclarationBatParam.java | 54 +++++++++++++++++++ .../salary/service/SIAccountService.java | 8 +++ .../service/SalaryAcctRecordService.java | 8 +++ .../service/impl/SIAccountServiceImpl.java | 46 ++++++++++++++++ .../impl/SalaryAcctRecordServiceImpl.java | 38 ++++++++++++- .../salary/web/SIAccountController.java | 32 +++++++++++ .../salary/web/SalaryAcctController.java | 37 +++++++++++++ .../salary/web/SalaryBillController.java | 23 ++++++++ .../salary/web/TaxDeclarationController.java | 10 ++++ .../wrapper/SalaryAcctRecordWrapper.java | 30 ++++++++++- .../salary/wrapper/SalarySendWrapper.java | 24 +++++++++ .../salary/wrapper/TaxDeclarationWrapper.java | 17 ++++++ 15 files changed, 426 insertions(+), 2 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java create mode 100644 src/com/engine/salary/entity/siaccount/param/AccountBatParam.java create mode 100644 src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java new file mode 100644 index 000000000..40f529cc5 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java @@ -0,0 +1,27 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 工资单批量操作参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalarySendBatParam { + +// 工资单发放Id + private List salarySendIds; + +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java new file mode 100644 index 000000000..63dc4310a --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java @@ -0,0 +1,34 @@ +package com.engine.salary.entity.salaryacct.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +/** + * 批量操作参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAcctBatParam { + + //薪资所属月 + private Date salaryMonth; + //薪资账套id + private List salarySobIds; + //备注 + private String description; + + + private List salaryAcctRecordIds; +} diff --git a/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java b/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java new file mode 100644 index 000000000..fa9de96fc --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java @@ -0,0 +1,40 @@ +package com.engine.salary.entity.siaccount.param; + + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AccountBatParam { + + //账单月份") + //@NotNull + @DataCheck(require = true,message = "账单月份不能为空") + private String billMonth; + + //备注") + //@Length(max = 60) + @DataCheck(max = 60,message = "备注长度不能超过60个字符") + private String remarks; + + + /** + * 个税扣缴义务人id + */ + @DataCheck(require = true,message = "个税扣缴义务人不能为空") + private List paymentOrganizations; + + + + private List ids; + +} diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java new file mode 100644 index 000000000..0168f9c89 --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java @@ -0,0 +1,54 @@ +package com.engine.salary.entity.taxdeclaration.param; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.YearMonth; +import java.util.Date; +import java.util.List; + +/** + * 生成个税申报表参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaxDeclarationBatParam { + + /** + * 个税申报id + */ + private Long taxDeclarationId; + + /** + * 薪资所属月 + */ + private YearMonth salaryMonth; + + /** + * 个税扣缴义务人 + */ + private List taxAgentIds; + + /** + * 备注 + */ + private String description; + + private String salaryMonthStr; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date taxCycle; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date salaryDate; +} diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index bd95388a2..f37924c1d 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -320,5 +320,13 @@ public interface SIAccountService { void cacheWelfareField(List welfareNames); void cacheBalanceWelfareField(List welfareNames); + + void batSave(AccountBatParam param); + + void batDelete(AccountBatParam param); + + void batFile(AccountBatParam param); + + void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam); } diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index fcf00580b..603e2a164 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; import com.engine.salary.common.LocalDateRange; +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.SalaryAcctRecordPO; @@ -210,4 +211,11 @@ public interface SalaryAcctRecordService { List listSome(SalaryAcctRecordPO po); void updateDate(Long id, Date updateTime); + + void batSave(SalaryAcctBatParam saveParam); + + void batFile(SalaryAcctBatParam param); + + void batReCalculate(SalaryAcctBatParam param); + } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 6c1a30028..a7039d1f5 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -6802,6 +6802,52 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(welfareNames)); } + @Override + public void batSave(AccountBatParam accountBatParam) { + List paymentOrganizations = accountBatParam.getPaymentOrganizations(); + for (Long paymentOrganization : paymentOrganizations) { + AccountParam param = AccountParam.builder() + .billMonth(accountBatParam.getBillMonth()) + .paymentOrganization(paymentOrganization) + .remarks(accountBatParam.getRemarks()) + .build(); + save(param); + } + } + + @Override + public void batDelete(AccountBatParam batParam) { + List paymentOrganizations = batParam.getPaymentOrganizations(); + for (Long paymentOrganization : paymentOrganizations) { + AccountParam param = AccountParam.builder() + .billMonth(batParam.getBillMonth()) + .paymentOrganization(paymentOrganization) + .build(); + delete(param); + } + } + + @Override + public void batFile(AccountBatParam batParam) { + List paymentOrganizations = batParam.getPaymentOrganizations(); + for (Long paymentOrganization : paymentOrganizations) { + AccountParam param = AccountParam.builder() + .billMonth(batParam.getBillMonth()) + .paymentOrganization(paymentOrganization) + .build(); + file(param); + } + } + + @Override + public void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO param = InsuranceAccountBatchPO.builder().id(id).build(); + socialSecurityBenefitsRecalculate(param); + } + } + public void accountOtherView(InsuranceAccountViewListDTO dto, List pos) { int otherNum = 0; BigDecimal otherPaySum = new BigDecimal("0"); diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 9958f8d27..2f79fd449 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -4,11 +4,12 @@ import cn.hutool.core.collection.CollUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.common.LocalDateRange; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; +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; @@ -40,6 +41,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; +import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; @@ -845,4 +847,38 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe public void updateDate(Long id, Date updateTime) { getSalaryAcctRecordMapper().updateDate(id, updateTime); } + + @Override + public void batSave(SalaryAcctBatParam saveParam) { + + List salarySobIds = saveParam.getSalarySobIds(); + YearMonth salaryMonth = SalaryDateUtil.localDate2YearMonth(saveParam.getSalaryMonth()); + for (int i = 0; i < salarySobIds.size(); i++) { + Long salarySobId = salarySobIds.get(i); + SalaryAcctRecordSaveParam param = SalaryAcctRecordSaveParam.builder() + .salarySobId(salarySobId) + .salaryMonth(salaryMonth) + .description(saveParam.getDescription()) + .build(); + save(param); + } + } + + @Override + public void batFile(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + file(recordId); + } + } + + @Override + public void batReCalculate(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + reCalculate(recordId); + } + } } diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index 80f37a159..e44f3ba20 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -217,6 +217,38 @@ public class SIAccountController { return new ResponseResult(user).run(getService(user)::save, param); } + @POST + @Path("/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batSave, param); + } + + @POST + @Path("/batDelete") + @Produces(MediaType.APPLICATION_JSON) + public String batDelete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batDelete, param); + } + + @POST + @Path("/batFile") + @Produces(MediaType.APPLICATION_JSON) + public String batFile(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batFile, param); + } + + @POST + @Path("/batSocialSecurityBenefitsRecalculate") + @Produces(MediaType.APPLICATION_JSON) + public String batSocialSecurityBenefitsRecalculate(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody AccountBatParam batParam ){ + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batSocialSecurityBenefitsRecalculate,batParam); + } + /** * 正常缴纳页核算 diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index a196d53ef..57483fd40 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -141,6 +141,43 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::reCalculate, param.getSalaryAcctRecordId()); } + //薪资核算 + @POST + @Path("/batAccounting") + @Produces(MediaType.APPLICATION_JSON) + public String batAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batCalculate, param); + } + + //保存薪资核算的基本信息 + @POST + @Path("/basic/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batSave, param); + } + + + //归档薪资核算记录 + @POST + @Path("/batFile") + @Produces(MediaType.APPLICATION_JSON) + public String batFile(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batFile, param); + } + + //重新核算 + @POST + @Path("/batReAccounting") + @Produces(MediaType.APPLICATION_JSON) + public String batReAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batReCalculate, param); + } + //判断是否存在合并计税 @GET @Path("/hasConsolidatedTax") diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 64437a579..ab505d1ce 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -480,6 +480,29 @@ public class SalaryBillController { return new ResponseResult>(user).run(getSalarySendWrapper(user)::withdraw, queryParam); } + @POST + @Path("/send/batGrant") + @Produces(MediaType.APPLICATION_JSON) + public String batGrant(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::batGrant, queryParam); + } + + /** + * 工资单撤回 + * + * @param queryParam + * @return + */ + @POST + @Path("/send/batWithdraw") + @Produces(MediaType.APPLICATION_JSON) + public String batWithdraw(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::batWithdraw, queryParam); + } + + /** * 工资单发放详情列表的高级搜索 * diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 1c65fd7a2..e6205eaaa 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO; +import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDetailListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; @@ -99,6 +100,15 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::save, param); } + @POST + @Path("/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationBatParam param) { + User user = HrmUserVarify.getUser(request, response); + param.setSalaryMonth(SalaryDateUtil.String2YearMonth(param.getSalaryMonthStr())); + return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::batSave, param); + } + //个税申报表详情列表 @POST @Path("/detail/list") diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 7e352ce91..481cf0e1f 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -10,12 +10,13 @@ import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordFormDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; +import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam; +import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; -import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; @@ -55,6 +56,9 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord private SalaryAcctRecordService getSalaryAcctRecordService(User user) { return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } + private SalaryAcctResultWrapper getSalaryAcctResultWrapper(User user) { + return ServiceUtil.getService(SalaryAcctResultWrapper.class, user); + } private SalarySobService getSalarySobService(User user) { return ServiceUtil.getService(SalarySobServiceImpl.class, user); @@ -396,4 +400,28 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord public void updateSobConfig(Long id) { getSalaryAcctSobConfigService(user).updateBySalaryAcctRecordId(id); } + + + public void batSave(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batSave(param); + } + + + public void batFile(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batFile(param); + } + + public void batReCalculate(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batReCalculate(param); + + } + + public void batCalculate(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + SalaryAcctCalculateParam calculateParam = SalaryAcctCalculateParam.builder().salaryAcctRecordId(recordId).build(); + getSalaryAcctResultWrapper(user).calculate(calculateParam); + } + } } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 8bbba561c..1772ba8b9 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -751,4 +751,28 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam) { return getSalaryBillService(user).genPdfBeforeExport(salaryExportPdfParam); } + + + public void batGrant(SalarySendBatParam param) { + List salarySendIds = param.getSalarySendIds(); + + for (int i = 0; i < salarySendIds.size(); i++) { + Long sendId = salarySendIds.get(i); + SalarySendGrantParam grantParam = SalarySendGrantParam.builder() + .salarySendId(sendId) + .build(); + grant(grantParam); + } + } + public void batWithdraw(SalarySendBatParam param) { + List salarySendIds = param.getSalarySendIds(); + + for (int i = 0; i < salarySendIds.size(); i++) { + Long sendId = salarySendIds.get(i); + SalarySendWithdrawParam grantParam = SalarySendWithdrawParam.builder() + .salarySendId(sendId) + .build(); + withdraw(grantParam); + } + } } diff --git a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java index 38670737a..0bfd23343 100644 --- a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationBO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO; +import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; @@ -158,4 +159,20 @@ public class TaxDeclarationWrapper extends Service { public void withDrawTaxDeclaration(Long taxDeclarationId) { getTaxDeclarationService(user).withDrawTaxDeclaration(taxDeclarationId); } + + public void batSave(TaxDeclarationBatParam param) { + List taxAgentIds = param.getTaxAgentIds(); + for (int i = 0; i < taxAgentIds.size(); i++) { + Long taxAgentId = taxAgentIds.get(i); + TaxDeclarationSaveParam saveParam = TaxDeclarationSaveParam.builder() + .salaryMonth(param.getSalaryMonth()) + .taxAgentId(taxAgentId) + .description(param.getDescription()) + .taxCycle(param.getTaxCycle()) + .salaryDate(param.getSalaryDate()) + .build(); + save(saveParam); + } + + } } From 9e6ab0c15546a192a5d5f2ae3925e63e28253d36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 4 Jun 2025 13:23:29 +0800 Subject: [PATCH 02/84] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E5=8F=B0=E8=B4=A6?= =?UTF-8?q?=EF=BC=9A=201=E3=80=81=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E8=AE=B0=E5=BD=95=E5=B9=B6=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E3=80=82=202=E3=80=81=E6=89=B9=E9=87=8F=E5=BD=92=E6=A1=A3=203?= =?UTF-8?q?=E3=80=81=E6=89=B9=E9=87=8F=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=20=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=EF=BC=9A=201=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA=E6=A0=B8=E7=AE=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=B9=B6=E6=A0=B8=E7=AE=97=E3=80=82=202=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=BD=92=E6=A1=A3=203=E3=80=81=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97=20=E5=B7=A5?= =?UTF-8?q?=E8=B5=84=E5=8D=95=EF=BC=9A=201=E3=80=81=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=8F=91=E6=94=BE=202=E3=80=81=E6=89=B9=E9=87=8F=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=20=E7=94=B3=E6=8A=A5=E8=A1=A8=EF=BC=9A=201=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SIAccountServiceImpl.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index a7039d1f5..5eb2e1989 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -6817,11 +6817,12 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { @Override public void batDelete(AccountBatParam batParam) { - List paymentOrganizations = batParam.getPaymentOrganizations(); - for (Long paymentOrganization : paymentOrganizations) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id); AccountParam param = AccountParam.builder() - .billMonth(batParam.getBillMonth()) - .paymentOrganization(paymentOrganization) + .billMonth(po.getBillMonth()) + .paymentOrganization(po.getPaymentOrganization()) .build(); delete(param); } @@ -6829,11 +6830,12 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { @Override public void batFile(AccountBatParam batParam) { - List paymentOrganizations = batParam.getPaymentOrganizations(); - for (Long paymentOrganization : paymentOrganizations) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id); AccountParam param = AccountParam.builder() - .billMonth(batParam.getBillMonth()) - .paymentOrganization(paymentOrganization) + .billMonth(po.getBillMonth()) + .paymentOrganization(po.getPaymentOrganization()) .build(); file(param); } From e9e3483c8b36d021b3daa8553bda605cd92c9378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 4 Jun 2025 15:05:44 +0800 Subject: [PATCH 03/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=A0=B8=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SIAccountServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 5eb2e1989..4725c5790 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -6809,6 +6809,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { AccountParam param = AccountParam.builder() .billMonth(accountBatParam.getBillMonth()) .paymentOrganization(paymentOrganization) + .flag(true) .remarks(accountBatParam.getRemarks()) .build(); save(param); From d8d46cd93207f435a9eecc08a4dab9b534e42b88 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 9 Jun 2025 10:42:23 +0800 Subject: [PATCH 04/84] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=20=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E5=B9=B6=E6=A0=B8=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctRecordBO.java | 4 +- .../dto/SalaryAcctRecordListDTO.java | 3 ++ .../param/SalaryAcctRecordBatchSaveParam.java | 37 +++++++++++++++++++ .../param/SalaryAcctRecordSaveParam.java | 2 + .../salaryacct/po/SalaryAcctRecordPO.java | 5 +++ .../salaryacct/SalaryAcctRecordMapper.java | 2 +- .../salaryacct/SalaryAcctRecordMapper.xml | 17 ++++++++- .../service/SalaryAcctRecordService.java | 2 +- .../impl/SalaryAcctRecordServiceImpl.java | 7 ++-- .../impl/SalaryAcctResultServiceImpl.java | 2 +- .../salary/web/SalaryAcctController.java | 10 +++++ .../wrapper/SalaryAcctRecordWrapper.java | 22 +++++++++-- 12 files changed, 101 insertions(+), 12 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java index ad98f4ad7..58888a156 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctRecordBO.java @@ -106,6 +106,7 @@ public class SalaryAcctRecordBO { .updateTime(SalaryDateUtil.getFormatLocalDateTime(salaryAcctRecordPO.getUpdateTime())) .description(salaryAcctRecordPO.getDescription()) .approvalStatus(salaryAcctRecordPO.getApprovalStatus()) + .runStatus(salaryAcctRecordPO.getRunStatus()) .operate(btnList) .build(); }).collect(Collectors.toList()); @@ -122,7 +123,7 @@ public class SalaryAcctRecordBO { */ public static SalaryAcctRecordPO convert2PO(SalaryAcctRecordSaveParam saveParam, SalarySobCycleDTO salarySobCycle, - int acctTimes, Long employeeId) { + int acctTimes, Long employeeId, String runStatus) { Date now = new Date(); return new SalaryAcctRecordPO() .setSalaryMonth(SalaryDateUtil.localDateToDate(saveParam.getSalaryMonth().atDay(1))) @@ -136,6 +137,7 @@ public class SalaryAcctRecordBO { .setCreator(employeeId) .setCreateTime(now) .setUpdateTime(now) + .setRunStatus(runStatus) .setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); } diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java index edc4d99dd..d60471eba 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java @@ -76,6 +76,9 @@ public class SalaryAcctRecordListDTO { @TableTitle(title = "审批状态", dataIndex = "approvalStatus", key = "approvalStatus") private String approvalStatus; + @TableTitle(title = "执行状态", dataIndex = "runStatus", key = "runStatus") + private String runStatus; + @TableTitle(title = "操作", dataIndex = "operate", key = "operate") private List operate; } diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java new file mode 100644 index 000000000..7f97ccd71 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java @@ -0,0 +1,37 @@ +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.Date; +import java.util.List; + +/** + * @author Harryxzy + * @ClassName SalaryAcctRecordBatchSaveParam + * @date 2025/06/09 9:45 + * @description 薪资核算基本信息保存参数 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//薪资核算基本信息保存参数 +public class SalaryAcctRecordBatchSaveParam { + + //薪资所属月 + @DataCheck(require = true, message = "薪资所属月格式错误") + private Date salaryMonth; + + private String salaryMonthStr; + + //薪资账套id + private List salarySobIds; + + //备注 + @DataCheck(max = 80, message = "备注不能超过80个字符") + private String description; +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordSaveParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordSaveParam.java index 62890c5da..de134d6af 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordSaveParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordSaveParam.java @@ -36,4 +36,6 @@ public class SalaryAcctRecordSaveParam { //备注 @DataCheck(max = 80, message = "备注不能超过80个字符") private String description; + + private String runStatus; } diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java index c2b8fd33c..cf816bf5d 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java @@ -137,6 +137,11 @@ public class SalaryAcctRecordPO { @Deprecated private List lockSalaryItemIds; + /** + * 执行状态 + */ + private String runStatus; + //查询条件------------------------------- Collection ids; diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java index 83110f1e6..cc59fd546 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java @@ -80,5 +80,5 @@ public interface SalaryAcctRecordMapper { List getBackCalcRecordByIds(@Param("collection") Set salaryAcctIds); - void updateDate(@Param("id")Long id, @Param("updateTime")Date updateTime); + void updateDate(@Param("id")Long id, @Param("updateTime")Date updateTime, @Param("runStatus")String runStatus); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml index 9da99248d..0147aa432 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml @@ -16,6 +16,7 @@ + @@ -38,6 +39,7 @@ , t.lock_salary_item_ids , t.approval_status , t.approval_id + , t.run_status @@ -203,6 +205,9 @@ tenant_key, + + run_status, + @@ -241,6 +246,9 @@ #{tenantKey}, + + #{runStatus}, + @@ -289,6 +297,9 @@ tenant_key, + + run_status, + @@ -327,6 +338,9 @@ #{tenantKey}, + + #{runStatus}, + @@ -432,7 +446,8 @@ UPDATE hrsa_salary_acct_record - SET update_time=#{updateTime} + SET update_time=#{updateTime}, + run_status=#{runStatus} WHERE delete_type = 0 AND id = #{id} diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index 603e2a164..342b5a842 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -210,7 +210,7 @@ public interface SalaryAcctRecordService { List listSome(SalaryAcctRecordPO po); - void updateDate(Long id, Date updateTime); + void updateDate(Long id, Date updateTime, String runStatus); void batSave(SalaryAcctBatParam saveParam); diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 2f79fd449..66bb678c5 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -40,6 +40,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; +import weaver.wechat.util.Utils; import java.time.YearMonth; import java.util.*; @@ -310,7 +311,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe .count(); // 转换成po - SalaryAcctRecordPO salaryAcctRecordPO = SalaryAcctRecordBO.convert2PO(saveParam, salarySobCycleDTO, (int) acctTimes, (long) user.getUID()); + SalaryAcctRecordPO salaryAcctRecordPO = SalaryAcctRecordBO.convert2PO(saveParam, salarySobCycleDTO, (int) acctTimes, (long) user.getUID(), Utils.null2String(saveParam.getRunStatus())); // 保存薪资核算记录 getSalaryAcctRecordMapper().insertIgnoreNull(salaryAcctRecordPO); // 初始化薪资核算人员 @@ -844,8 +845,8 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe } @Override - public void updateDate(Long id, Date updateTime) { - getSalaryAcctRecordMapper().updateDate(id, updateTime); + public void updateDate(Long id, Date updateTime, String runStatus) { + getSalaryAcctRecordMapper().updateDate(id, updateTime, runStatus); } @Override diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 77a091911..6e3a358c3 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -927,7 +927,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(), "核算完成"); stopWatch.stop(); log.info(stopWatch.prettyPrint()); diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 57483fd40..d173d1a0a 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -141,6 +141,16 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::reCalculate, param.getSalaryAcctRecordId()); } + //批量保存并核算 + @POST + @Path("/batSaveAndAcct") + @Produces(MediaType.APPLICATION_JSON) + public String batSaveAndAcct(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctRecordBatchSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryAcctRecordWrapper(user)::batSaveAndAcct, param); + } + + //薪资核算 @POST @Path("/batAccounting") diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 481cf0e1f..ce5bd7f9f 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -10,10 +10,7 @@ import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordFormDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; -import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; -import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; +import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; @@ -424,4 +421,21 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord getSalaryAcctResultWrapper(user).calculate(calculateParam); } } + + public List batSaveAndAcct(SalaryAcctRecordBatchSaveParam saveParam) { + List ids = saveParam.getSalarySobIds().stream().map(salarySobId -> { + SalaryAcctRecordSaveParam build = SalaryAcctRecordSaveParam.builder() + .salarySobId(salarySobId) + .salaryMonth(SalaryDateUtil.localDate2YearMonth(saveParam.getSalaryMonth())) + .description(saveParam.getDescription()) + .runStatus("核算中") + .build(); + return save(build); + }).collect(Collectors.toList()); + + ids.forEach(salaryAcctRecordId -> { + getSalaryAcctResultWrapper(user).calculate(SalaryAcctCalculateParam.builder().salaryAcctRecordId(salaryAcctRecordId).build()); + }); + return ids; + } } From 5c2ede973628c438ce208935f19f15499596328b Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 10 Jun 2025 10:52:24 +0800 Subject: [PATCH 05/84] sql --- resource/sqlupgrade/DM/sql2025010801039TEST.sql | 5 +++++ resource/sqlupgrade/GS/sql2025010801039TEST.sql | 5 +++++ resource/sqlupgrade/JC/sql2025010801039TEST.sql | 5 +++++ resource/sqlupgrade/Mysql/sql2025010801039TEST.sql | 1 + resource/sqlupgrade/Oracle/sql2025010801039TEST.sql | 4 ++++ resource/sqlupgrade/PG/sql2025010801039TEST.sql | 1 + resource/sqlupgrade/SQLServer/sql2025010801039TEST.sql | 2 ++ resource/sqlupgrade/ST/sql2025010801039TEST.sql | 5 +++++ 8 files changed, 28 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql2025010801039TEST.sql create mode 100644 resource/sqlupgrade/GS/sql2025010801039TEST.sql create mode 100644 resource/sqlupgrade/JC/sql2025010801039TEST.sql create mode 100644 resource/sqlupgrade/Mysql/sql2025010801039TEST.sql create mode 100644 resource/sqlupgrade/Oracle/sql2025010801039TEST.sql create mode 100644 resource/sqlupgrade/PG/sql2025010801039TEST.sql create mode 100644 resource/sqlupgrade/SQLServer/sql2025010801039TEST.sql create mode 100644 resource/sqlupgrade/ST/sql2025010801039TEST.sql diff --git a/resource/sqlupgrade/DM/sql2025010801039TEST.sql b/resource/sqlupgrade/DM/sql2025010801039TEST.sql new file mode 100644 index 000000000..0ff8ef894 --- /dev/null +++ b/resource/sqlupgrade/DM/sql2025010801039TEST.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +); +/ + diff --git a/resource/sqlupgrade/GS/sql2025010801039TEST.sql b/resource/sqlupgrade/GS/sql2025010801039TEST.sql new file mode 100644 index 000000000..0ff8ef894 --- /dev/null +++ b/resource/sqlupgrade/GS/sql2025010801039TEST.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +); +/ + diff --git a/resource/sqlupgrade/JC/sql2025010801039TEST.sql b/resource/sqlupgrade/JC/sql2025010801039TEST.sql new file mode 100644 index 000000000..0ff8ef894 --- /dev/null +++ b/resource/sqlupgrade/JC/sql2025010801039TEST.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql2025010801039TEST.sql b/resource/sqlupgrade/Mysql/sql2025010801039TEST.sql new file mode 100644 index 000000000..655a1452b --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql2025010801039TEST.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_acct_record ADD COLUMN run_status varchar(200) ; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql2025010801039TEST.sql b/resource/sqlupgrade/Oracle/sql2025010801039TEST.sql new file mode 100644 index 000000000..b5f15e56e --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql2025010801039TEST.sql @@ -0,0 +1,4 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql2025010801039TEST.sql b/resource/sqlupgrade/PG/sql2025010801039TEST.sql new file mode 100644 index 000000000..7870635b2 --- /dev/null +++ b/resource/sqlupgrade/PG/sql2025010801039TEST.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_acct_record ADD COLUMN run_status varchar(200) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql2025010801039TEST.sql b/resource/sqlupgrade/SQLServer/sql2025010801039TEST.sql new file mode 100644 index 000000000..4651f7cd3 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql2025010801039TEST.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_acct_record ADD run_status varchar(200) NULL +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql2025010801039TEST.sql b/resource/sqlupgrade/ST/sql2025010801039TEST.sql new file mode 100644 index 000000000..0ff8ef894 --- /dev/null +++ b/resource/sqlupgrade/ST/sql2025010801039TEST.sql @@ -0,0 +1,5 @@ +ALTER TABLE hrsa_salary_acct_record ADD ( + run_status varchar2(200) NULL +); +/ + From 0bd518f6e7a54853449027b629e3cef430ed2aa6 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 10 Jun 2025 10:59:25 +0800 Subject: [PATCH 06/84] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=A0=B8=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/param/SalaryAcctRecordBatchSaveParam.java | 2 +- src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java index 7f97ccd71..aad8d394b 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordBatchSaveParam.java @@ -29,7 +29,7 @@ public class SalaryAcctRecordBatchSaveParam { private String salaryMonthStr; //薪资账套id - private List salarySobIds; + private List salarySobIds; //备注 @DataCheck(max = 80, message = "备注不能超过80个字符") diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index ce5bd7f9f..876bf0317 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -423,7 +423,8 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord } public List batSaveAndAcct(SalaryAcctRecordBatchSaveParam saveParam) { - List ids = saveParam.getSalarySobIds().stream().map(salarySobId -> { + List ids = saveParam.getSalarySobIds().stream().filter(NumberUtils::isCreatable) + .map(Long::valueOf).map(salarySobId -> { SalaryAcctRecordSaveParam build = SalaryAcctRecordSaveParam.builder() .salarySobId(salarySobId) .salaryMonth(SalaryDateUtil.localDate2YearMonth(saveParam.getSalaryMonth())) From be3b4fc7e141bca05beff2164510c59f894fc4b5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 4 Jul 2025 15:13:28 +0800 Subject: [PATCH 07/84] =?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 08/84] =?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 zcmZ`-c{r47AD;IyW5#GOW-QsWCWq`>M5{`&r0h%9QyNi}?K2&9lt>A^+9b+WgelXB zI0z|WREn}zT2Uz};TxX!?K{i$&HOR<`@8So`aI8dJ@5R^rF^QSh&b2^5UB(Lg+R!3 zc;%iZqD-9sHN<}1m&`wxAKr<~gY-#64T42L8-gSimCP_8oW37W=M9`xFpi0%rB&09 zi&D|rS%ku=BKAWwCtL6~Cg^6(`HFI~DEWW4pvDNGrx%GX;G|J)F}DF>MF3NdOKNcnF=t4BpHZsIy83^q20U?vxkv^G$%!;0!x}L2<@CO zy&hOSo+CZfNf6bg02=3*L5aeA6pppi6Sz|8{5ir(Mk#>F@%CDZRg&ft1Q8ZSfn(t( zh}G83GDO9w{54Aobi+Ed&QU>qsX&>d6;g~v=w>|?gf-uYFo$U;BE+x|b9(*&$mvRv z5}fr>k6{>&YWxi5t^V6NEOc|C0rZ|pBttSi%|{KjrU4>HKdG8TpWCg3zkD>(k+X8B zl?Z=sn#Ypj=@=1Y<1_BQ7n%%>R8_-!zX09#%)L&Tn3cVftWyvwG&p7ZU;i*hIJqu zEGYjl!@lPTlurn9-5(%9*iQV}$vi8&5QuS+ZX{daU(2I~@}3|{+>U36h|vEbQ9eoJ zGKLWe3asgG!MSduNF26%el{8}1DL492SkkBlu9F3NegB87BXxXg_mvj6E34S+4kfg zkiI>@>*P`1tFq(@LOSz3ZsxOYjwPQv+jApyiv0P|jKuwxH&(m{W0pq~5y8xiJy|b% zr$(o1#(MYlzgC?6cCQ~+}+wWbaNoGw+xEekr#; ziJjAvsP;?p*LOp^^Jq&48Y$l5HRrc}JhgbQ{|ZmFeo_WrW^!v-ez!w%Wy$?Zjx zaatk+!j5rtpCbd;7kf9ODw7+CyH@iAJsMr|CS__$hh(WMw`yKhI;q+HEuitVqWi|6 z4d1G_6)@jlk*+NAFi7;$vu#Xn&)%AIc1s!S8r%7bX$^ResNnM|p^-7iArj!}*NU!8YhNC9qVqNT`-C4E&VP(m_j48CKlvc5{ zJa?L%z2T_t);pz=5-Afwl3&zr4KMT29+umYA-6}-$tdrV)Obrv_ZpQ~7gN6_R;02d z$5Sqe)vq|et=K)HH6eUBrfu;(Q|iR`)|v1?@48hqy^dx&HFSUOz`DGo_|mu+M}p-o z_pv;e+VWhhuQ-uP+zfmko-4K!d6T#!3W*lYSj2YS=otJ6Xaywu2^J5M96NgN=;%_L zj+q>E8t+MI%KL2(=h5zN{WTYMExcwD$mocS?eWS#X1LLFoZ4EWy~{LM>yjVKx{lYU zy+fXNZ}{x!>t~7Dq+6bnvb8>=m!fYCNl$!9$n*^0>F#x!ynnjU%w*t3L~u%>OWV%a ze&-HDcC?-0;XmV+#Ss_oS7`{b>68s-T~xm2w9~O`b6n5kdmg@(!v>XJ6^~m6-32rX zNqJ7Z@ur@U;ZvKDaKMc$>w0tcWo5g=)z>HAeE!^W^hG{sTAN_ZHuNa&G4pR_(!##> zEH_d5VWg^8a6wUEN#DZ{+HoEYYMu@q<kq^<(KbSBrC^_3>f+h=%HT}niq8cV)R3%*72hUt+rt-`lQg}B{NFi zr!4#q-_>%yA$5kvrEvGIESk(qv>G&SANdke>Z|LT=-Fa?!f*CG*Vb&S?z{V3K$f`{ zQJ)vob#%5@zq;b-A2SU9>)pnE*O8BZ2<7hddj7>ricP%U$N3{BX4CN@H<^Qx>QOPb zVs}5#d+@#KMfuy1joV`CbhMKFFXiZqa<%M;`yj^MAN^o?5JOxDa*9taBA@K zuyTX<3%q*xkY(sso&+*!z1| z#$9->XR&El+Do4lx@4{W_o1XIiqW7#Jy)Y|h3!VW&;2&4DKk~SdaZ~U@!iN+rSC7B zXL2uAYPLbVe^Fs|)Asegvf=MFPU!4@r(T5&Tk5dsMh_~<8fnUBLW{%1x3`4cd9Hg< zLsz+6ba1^zV_bq=0sB>C{kZwdXiK}RjxCj%c|)JC9Wjtj-@ta(XEz1T>_WelDbw0fh)I`%;Y`_2jGoAcC*wNLY`-t!cPp9QOx57Is# zvix5E?#ip{X4894#5Y}mQ7n~aUTE02$-Ey77qq%bBV&Xc{>{-{1wo%U-MehVf zTUCd4w|}%;HTwL?At85-q)Ch9!GssRHa>P0c6yr%s@^LP=w$K3MDB)o44KT) zih4b9vt-I5k1Za1Vd~SwjUOte>xeF0AI8GJJ>KcEov}_w_oVfw{Hl|Ys?UY2PON_K z@a#YCb%R?}_1tFE{dL4!j7l@qcn{xRZuU5;U}0m)6h&*PvDJ}uZ$9Ufj;3OgfZvg!3BX`*(;)q?fj!z@%^8|Wx8o#=I z_=(hK5O}FZ17?sdP$}14y36VI!Z7cvhpsf`ESBMr10C$KI1%MkwG#bB#X#oH)d*~7(fSJ)0 zB3KP24~bwiL|P;~0H2jX^GE=`f1>?mLxWGg5?I}*Yx-6e$U+Jx{KETsY;=y8II+s3J21GKFW274i@62^533qS(2U0eVH zA>z*fyQVwS@K!I=@Vpce;0SeIBDih7{f8oW`#=X~_7AMiv4W+T2^>&vS`7$^bj1f4(?M{q=Mb>c66O3?QMqFVJtPgDnD>g#W!H zvXZylmL?GhuA&5j{@=X5LNAnmkQLFA8DzoAe`ewT)$*6mu4#l292gq7ds{?c06z~& 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 09/84] =?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 zcmZ`-c{r47AD;IyW5#GOW-QsWCWq`>M5{`&r0h%9QyNi}?K2&9lt>A^+9b+WgelXB zI0z|WREn}zT2Uz};TxX!?K{i$&HOR<`@8So`aI8dJ@5R^rF^QSh&b2^5UB(Lg+R!3 zc;%iZqD-9sHN<}1m&`wxAKr<~gY-#64T42L8-gSimCP_8oW37W=M9`xFpi0%rB&09 zi&D|rS%ku=BKAWwCtL6~Cg^6(`HFI~DEWW4pvDNGrx%GX;G|J)F}DF>MF3NdOKNcnF=t4BpHZsIy83^q20U?vxkv^G$%!;0!x}L2<@CO zy&hOSo+CZfNf6bg02=3*L5aeA6pppi6Sz|8{5ir(Mk#>F@%CDZRg&ft1Q8ZSfn(t( zh}G83GDO9w{54Aobi+Ed&QU>qsX&>d6;g~v=w>|?gf-uYFo$U;BE+x|b9(*&$mvRv z5}fr>k6{>&YWxi5t^V6NEOc|C0rZ|pBttSi%|{KjrU4>HKdG8TpWCg3zkD>(k+X8B zl?Z=sn#Ypj=@=1Y<1_BQ7n%%>R8_-!zX09#%)L&Tn3cVftWyvwG&p7ZU;i*hIJqu zEGYjl!@lPTlurn9-5(%9*iQV}$vi8&5QuS+ZX{daU(2I~@}3|{+>U36h|vEbQ9eoJ zGKLWe3asgG!MSduNF26%el{8}1DL492SkkBlu9F3NegB87BXxXg_mvj6E34S+4kfg zkiI>@>*P`1tFq(@LOSz3ZsxOYjwPQv+jApyiv0P|jKuwxH&(m{W0pq~5y8xiJy|b% zr$(o1#(MYlzgC?6cCQ~+}+wWbaNoGw+xEekr#; ziJjAvsP;?p*LOp^^Jq&48Y$l5HRrc}JhgbQ{|ZmFeo_WrW^!v-ez!w%Wy$?Zjx zaatk+!j5rtpCbd;7kf9ODw7+CyH@iAJsMr|CS__$hh(WMw`yKhI;q+HEuitVqWi|6 z4d1G_6)@jlk*+NAFi7;$vu#Xn&)%AIc1s!S8r%7bX$^ResNnM|p^-7iArj!}*NU!8YhNC9qVqNT`-C4E&VP(m_j48CKlvc5{ zJa?L%z2T_t);pz=5-Afwl3&zr4KMT29+umYA-6}-$tdrV)Obrv_ZpQ~7gN6_R;02d z$5Sqe)vq|et=K)HH6eUBrfu;(Q|iR`)|v1?@48hqy^dx&HFSUOz`DGo_|mu+M}p-o z_pv;e+VWhhuQ-uP+zfmko-4K!d6T#!3W*lYSj2YS=otJ6Xaywu2^J5M96NgN=;%_L zj+q>E8t+MI%KL2(=h5zN{WTYMExcwD$mocS?eWS#X1LLFoZ4EWy~{LM>yjVKx{lYU zy+fXNZ}{x!>t~7Dq+6bnvb8>=m!fYCNl$!9$n*^0>F#x!ynnjU%w*t3L~u%>OWV%a ze&-HDcC?-0;XmV+#Ss_oS7`{b>68s-T~xm2w9~O`b6n5kdmg@(!v>XJ6^~m6-32rX zNqJ7Z@ur@U;ZvKDaKMc$>w0tcWo5g=)z>HAeE!^W^hG{sTAN_ZHuNa&G4pR_(!##> zEH_d5VWg^8a6wUEN#DZ{+HoEYYMu@q<kq^<(KbSBrC^_3>f+h=%HT}niq8cV)R3%*72hUt+rt-`lQg}B{NFi zr!4#q-_>%yA$5kvrEvGIESk(qv>G&SANdke>Z|LT=-Fa?!f*CG*Vb&S?z{V3K$f`{ zQJ)vob#%5@zq;b-A2SU9>)pnE*O8BZ2<7hddj7>ricP%U$N3{BX4CN@H<^Qx>QOPb zVs}5#d+@#KMfuy1joV`CbhMKFFXiZqa<%M;`yj^MAN^o?5JOxDa*9taBA@K zuyTX<3%q*xkY(sso&+*!z1| z#$9->XR&El+Do4lx@4{W_o1XIiqW7#Jy)Y|h3!VW&;2&4DKk~SdaZ~U@!iN+rSC7B zXL2uAYPLbVe^Fs|)Asegvf=MFPU!4@r(T5&Tk5dsMh_~<8fnUBLW{%1x3`4cd9Hg< zLsz+6ba1^zV_bq=0sB>C{kZwdXiK}RjxCj%c|)JC9Wjtj-@ta(XEz1T>_WelDbw0fh)I`%;Y`_2jGoAcC*wNLY`-t!cPp9QOx57Is# zvix5E?#ip{X4894#5Y}mQ7n~aUTE02$-Ey77qq%bBV&Xc{>{-{1wo%U-MehVf zTUCd4w|}%;HTwL?At85-q)Ch9!GssRHa>P0c6yr%s@^LP=w$K3MDB)o44KT) zih4b9vt-I5k1Za1Vd~SwjUOte>xeF0AI8GJJ>KcEov}_w_oVfw{Hl|Ys?UY2PON_K z@a#YCb%R?}_1tFE{dL4!j7l@qcn{xRZuU5;U}0m)6h&*PvDJ}uZ$9Ufj;3OgfZvg!3BX`*(;)q?fj!z@%^8|Wx8o#=I z_=(hK5O}FZ17?sdP$}14y36VI!Z7cvhpsf`ESBMr10C$KI1%MkwG#bB#X#oH)d*~7(fSJ)0 zB3KP24~bwiL|P;~0H2jX^GE=`f1>?mLxWGg5?I}*Yx-6e$U+Jx{KETsY;=y8II+s3J21GKFW274i@62^533qS(2U0eVH zA>z*fyQVwS@K!I=@Vpce;0SeIBDih7{f8oW`#=X~_7AMiv4W+T2^>&vS`7$^bj1f4(?M{q=Mb>c66O3?QMqFVJtPgDnD>g#W!H zvXZylmL?GhuA&5j{@=X5LNAnmkQLFA8DzoAe`ewT)$*6mu4#l292gq7ds{?c06z~& 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 14:01:05 +0800 Subject: [PATCH 10/84] =?UTF-8?q?=E8=96=AA=E9=85=AC=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E6=B5=8F=E8=A7=88=E6=A1=86=E6=A0=B9=E6=8D=AE=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E7=BA=BF=E5=88=86=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/TaxAgentServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index bea5d61a6..3fe52c61b 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -586,7 +586,7 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { public List> selectList(boolean needAuth) { List taxAgents = getTaxAgentMapper().listAll(); if (needAuth) { - taxAgents = handleForDevolution(taxAgents, (long) user.getUID(), true); + taxAgents = getAuthService(user).auth(taxAgents, AuthFilterTypeEnum.QUERY_DATA, TaxAgentPO.class); } return taxAgents.stream().map(m -> { Map map = new HashMap<>(2); From b82538fea9e36ec28119fc1ce657b71462f1970e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 8 Jul 2025 18:28:00 +0800 Subject: [PATCH 11/84] =?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) { From fb239f34edb4aac4a5e9f33ca9bf668604901cb5 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 9 Jul 2025 10:08:27 +0800 Subject: [PATCH 12/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=96=AA=E8=B5=84?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E7=AD=9B=E9=80=89=E4=B8=BA=E7=A9=BA=E6=97=B6?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctExcelServiceImpl.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 67aff3ecd..f869556b8 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -405,11 +405,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc if (openSum != null && StringUtils.isNotBlank(openSum.getConfValue()) && OpenEnum.parseByValue(openSum.getConfValue()) == OpenEnum.OPEN) { total = true; Map sumRow = getSalaryAcctResultService(user).sumRow(queryParam); - sumRow.forEach((k, v) -> { - if (NumberUtils.isCreatable(v.toString())) { - sumRow.put(k, new BigDecimal(v.toString())); - } - }); + if (sumRow != null) { + sumRow.forEach((k, v) -> { + if (NumberUtils.isCreatable(v.toString())) { + sumRow.put(k, new BigDecimal(v.toString())); + } + }); + } if (sumRow != null) { sumRow.put("taxAgentName", "总计"); resultMapList.add(sumRow); From ed5f6da8a6205a5550e4a4ea6b84446c3799381a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 11 Jul 2025 17:18:15 +0800 Subject: [PATCH 13/84] =?UTF-8?q?=E7=BC=B4=E6=AC=BE=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=8C=89=E7=85=A7=E5=88=86=E7=B1=BB=E5=88=86=E5=88=AB=E7=BC=B4?= =?UTF-8?q?=E7=BA=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202507110103.sql | 3 + resource/sqlupgrade/GS/sql202507110103.sql | 3 + resource/sqlupgrade/JC/sql202507110103.sql | 3 + resource/sqlupgrade/Mysql/sql202507110103.sql | 1 + .../sqlupgrade/Oracle/sql202507110103.sql | 2 + resource/sqlupgrade/PG/sql202507110103.sql | 1 + .../sqlupgrade/SQLServer/sql202507110103.sql | 2 + resource/sqlupgrade/ST/sql202507110103.sql | 3 + .../taxpayment/po/TaxPaymentRequestPO.java | 2 + .../taxpayment/TaxPaymentRequestMapper.java | 2 - .../taxpayment/TaxPaymentRequestMapper.xml | 48 +++++---- .../impl/AbstractTaxPaymentService.java | 37 +++---- .../TaxPaymentWithholdingServiceImpl.java | 98 ++++++++++--------- ...xPaymentWithholdingVoucherServiceImpl.java | 10 +- 14 files changed, 113 insertions(+), 102 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202507110103.sql create mode 100644 resource/sqlupgrade/GS/sql202507110103.sql create mode 100644 resource/sqlupgrade/JC/sql202507110103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202507110103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202507110103.sql create mode 100644 resource/sqlupgrade/PG/sql202507110103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202507110103.sql create mode 100644 resource/sqlupgrade/ST/sql202507110103.sql diff --git a/resource/sqlupgrade/DM/sql202507110103.sql b/resource/sqlupgrade/DM/sql202507110103.sql new file mode 100644 index 000000000..a942c94e6 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202507110103.sql @@ -0,0 +1,3 @@ +alter table hrsa_tax_payment_request add report_type number(11) null; +/ + diff --git a/resource/sqlupgrade/GS/sql202507110103.sql b/resource/sqlupgrade/GS/sql202507110103.sql new file mode 100644 index 000000000..a942c94e6 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202507110103.sql @@ -0,0 +1,3 @@ +alter table hrsa_tax_payment_request add report_type number(11) null; +/ + diff --git a/resource/sqlupgrade/JC/sql202507110103.sql b/resource/sqlupgrade/JC/sql202507110103.sql new file mode 100644 index 000000000..a942c94e6 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202507110103.sql @@ -0,0 +1,3 @@ +alter table hrsa_tax_payment_request add report_type number(11) null; +/ + diff --git a/resource/sqlupgrade/Mysql/sql202507110103.sql b/resource/sqlupgrade/Mysql/sql202507110103.sql new file mode 100644 index 000000000..ab9b6cb2e --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202507110103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_tax_payment_request ADD COLUMN report_type int NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202507110103.sql b/resource/sqlupgrade/Oracle/sql202507110103.sql new file mode 100644 index 000000000..40452d2a6 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202507110103.sql @@ -0,0 +1,2 @@ +alter table hrsa_tax_payment_request add report_type number(11) null +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202507110103.sql b/resource/sqlupgrade/PG/sql202507110103.sql new file mode 100644 index 000000000..b59e15941 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202507110103.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_tax_payment_request ADD COLUMN report_type int ; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202507110103.sql b/resource/sqlupgrade/SQLServer/sql202507110103.sql new file mode 100644 index 000000000..19d102aa7 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202507110103.sql @@ -0,0 +1,2 @@ +alter table hrsa_tax_payment_request add report_type int null +go \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202507110103.sql b/resource/sqlupgrade/ST/sql202507110103.sql new file mode 100644 index 000000000..a942c94e6 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202507110103.sql @@ -0,0 +1,3 @@ +alter table hrsa_tax_payment_request add report_type number(11) null; +/ + diff --git a/src/com/engine/salary/entity/taxpayment/po/TaxPaymentRequestPO.java b/src/com/engine/salary/entity/taxpayment/po/TaxPaymentRequestPO.java index 34141f5a2..55e0c69c5 100644 --- a/src/com/engine/salary/entity/taxpayment/po/TaxPaymentRequestPO.java +++ b/src/com/engine/salary/entity/taxpayment/po/TaxPaymentRequestPO.java @@ -73,6 +73,8 @@ public class TaxPaymentRequestPO implements Serializable { //是否已获取反馈") private Integer feedback; + private Integer reportType; + /** * 租户key */ diff --git a/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.java b/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.java index 6ec65e30f..d33063ed7 100644 --- a/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.java +++ b/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.java @@ -79,8 +79,6 @@ public interface TaxPaymentRequestMapper { void updateFeedbackByRequestTypeTaxAgentIdTaxYearMonth(TaxPaymentRequestPO build); - void updateFeedbackByTaxDeclareRecordId(TaxPaymentRequestPO build); - TaxPaymentRequestPO getOne(TaxPaymentRequestPO build); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.xml b/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.xml index d1ca5dee2..6d84c59b8 100644 --- a/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.xml +++ b/src/com/engine/salary/mapper/taxpayment/TaxPaymentRequestMapper.xml @@ -14,6 +14,7 @@ + @@ -32,6 +33,7 @@ , t.tax_year_month , t.tenant_key , t.update_time + , t.report_type @@ -93,6 +95,9 @@ AND update_time = #{updateTime} + + AND report_type = #{reportType} + AND id IN @@ -142,7 +147,10 @@ tenant_key, - update_time + update_time, + + + report_type @@ -180,7 +188,10 @@ #{tenantKey}, - #{updateTime} + #{updateTime}, + + + #{reportType} @@ -201,7 +212,8 @@ tax_declare_record_id, tax_year_month, tenant_key, - update_time + update_time, + report_type ) VALUES ( @@ -217,7 +229,8 @@ #{item.taxDeclareRecordId}, #{item.taxYearMonth}, #{item.tenantKey}, - #{item.updateTime} + #{item.updateTime}, + #{item.reportType} ) @@ -236,7 +249,8 @@ tax_declare_record_id, tax_year_month, tenant_key, - update_time + update_time, + report_type ) @@ -252,7 +266,8 @@ #{item.taxDeclareRecordId,jdbcType=DOUBLE}, #{item.taxYearMonth,jdbcType=DATE}, #{item.tenantKey,jdbcType=VARCHAR}, - #{item.updateTime,jdbcType=DATE} + #{item.updateTime,jdbcType=DATE}, + #{item.reportType,jdbcType=INTEGER} from dual @@ -272,7 +287,8 @@ tax_declare_record_id, tax_year_month, tenant_key, - update_time + update_time, + report_type ) VALUES ( @@ -287,7 +303,8 @@ #{item.taxDeclareRecordId}, #{item.taxYearMonth}, #{item.tenantKey}, - #{item.updateTime} + #{item.updateTime}, + #{item.reportType} ) @@ -307,6 +324,7 @@ tax_year_month=#{taxYearMonth}, tenant_key=#{tenantKey}, update_time=#{updateTime}, + report_type=#{reportType}, WHERE id = #{id} AND delete_type = 0 @@ -349,6 +367,9 @@ update_time=#{updateTime}, + + report_type=#{reportType}, + WHERE id = #{id} AND delete_type = 0 @@ -385,17 +406,9 @@ AND request_type=#{requestType} AND tax_agent_id=#{taxAgentId} AND tax_year_month=#{taxYearMonth} + AND report_type=#{reportType} - - UPDATE hrsa_tax_payment_request - - feedback=#{feedback} - - WHERE delete_type = 0 - AND tax_declare_record_id=#{taxDeclareRecordId} - @@ -407,6 +420,7 @@ AND request_type = #{requestType} AND tax_agent_id = #{taxAgentId} AND tax_year_month = #{taxYearMonth} + AND report_type = #{reportType} \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java b/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java index 25078bcf0..0881fd6cf 100644 --- a/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java +++ b/src/com/engine/salary/service/impl/AbstractTaxPaymentService.java @@ -11,6 +11,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxagent.response.SzyhResponseHead; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.entity.taxpayment.dto.TaxAmountFormDTO; import com.engine.salary.entity.taxpayment.dto.TaxFeedbackResultDTO; import com.engine.salary.entity.taxpayment.dto.TaxWithheldVoucherResultDTO; @@ -34,7 +35,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; -import java.math.BigDecimal; import java.util.*; /** @@ -54,6 +54,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa protected TaxDeclareStatusService getTaxDeclareStatusService(User user) { return ServiceUtil.getService(TaxDeclareStatusServiceImpl.class, user); } + protected TaxAgentService getTaxAgentService(User user) { return ServiceUtil.getService(TaxAgentServiceImpl.class, user); } @@ -172,6 +173,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa .requestType(param.getType()) .taxAgentId(param.getTaxAgentId()) .taxYearMonth(param.getTaxYearMonth()) + .reportType(param.getReportType()) .build()); } } else { @@ -189,6 +191,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa .requestId(requestId) .requestType(param.getType()) .feedback(SalaryOnOffEnum.OFF.getValue()) + .reportType(param.getReportType()) .build(); getTaxPaymentRequestMapper().insertIgnoreNull(paymentRequestPO); } @@ -200,6 +203,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa .builder() .taxAgentId(param.getTaxAgentId()) .taxYearMonth(param.getTaxYearMonth()) + .reportType(param.getReportType()) .build()); if (Objects.isNull(param.getCheckFeedback()) || SalaryOnOffEnum.ON.getValue().equals(param.getCheckFeedback())) { TaxPaymentRequestPO notFeedback = paymentRequests.stream() @@ -226,6 +230,7 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa .requestType(getServiceType()) .taxAgentId(param.getTaxAgentId()) .taxYearMonth(param.getTaxYearMonth()) + .reportType(param.getReportType()) .build()); SalaryAssert.notNull(paymentRequest, "请先点击[三方缴款]或[银行端凭证缴款]按钮发起缴款请求后,再点击[缴款反馈]按钮"); paymentRequest.setFeedback(SalaryOnOffEnum.ON.getValue()); @@ -256,10 +261,11 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa public TaxAmountFormDTO queryTaxAmount(TaxPaymentQueryParam param) { TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(param.getTaxDeclareRecordId()); SalaryAssert.notNull(taxDeclareRecord, "个税申报记录不存在"); - if (!TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue().equals(taxDeclareRecord.getTaxDeclareStatus())) { + TaxDeclareStatusPO taxDeclareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(param.getTaxDeclareRecordId(), param.getReportType()); + if (!TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue().equals(taxDeclareStatus.getTaxDeclareStatus())) { throw new SalaryRunTimeException("当前申报状态不是[申报成功,未缴费],暂时无法获取"); } - if (taxDeclareRecord.getTaxPayAmount() == null || taxDeclareRecord.getPersonNum() == null) { + if (taxDeclareStatus.getTaxPayAmount() == null || taxDeclareStatus.getPersonNum() == null) { throw new SalaryRunTimeException("未获取到应缴信息,请先进行个税在线申报"); } TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxDeclareRecord.getTaxAgentId()); @@ -267,32 +273,11 @@ public abstract class AbstractTaxPaymentService extends Service implements TaxPa return TaxAmountFormDTO.builder() .taxAgent(taxAgentPO.getName()) - .amount(SalaryEntityUtil.thousandthConvert(taxDeclareRecord.getTaxPayAmount())) - .personNum(taxDeclareRecord.getPersonNum().toString()) + .amount(SalaryEntityUtil.thousandthConvert(taxDeclareStatus.getTaxPayAmount())) + .personNum(taxDeclareStatus.getPersonNum().toString()) .build(); } - protected TaxDeclareRecordPO updateTaxDeclareRecord(TaxPaymentQueryParam param, BigDecimal totalPaid) { - TaxDeclareRecordPO taxDeclareRecord = getTaxDeclareRecordService(user).getById(param.getTaxDeclareRecordId()); - if (TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue().equals(taxDeclareRecord.getTaxDeclareStatus())) { - throw new SalaryRunTimeException("当前申报表状态为已缴款,无法更新状态"); - } - BigDecimal taxPayAmount = SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPayAmount()); - BigDecimal taxPurePaidAmount = SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPurePaidAmount()); - if (SalaryEntityUtil.empty2Zero(taxDeclareRecord.getTaxPaidAmount()).equals(totalPaid) - && taxPayAmount.compareTo(BigDecimal.ZERO) > 0) { - throw new SalaryRunTimeException("请进行缴款后再刷新缴款状态"); - } - taxDeclareRecord.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue()); - taxDeclareRecord.setTaxPaidAmount(totalPaid.toString()); - taxDeclareRecord.setTaxPurePaidAmount(taxPurePaidAmount.add(taxPayAmount).toString()); - taxDeclareRecord.setTaxPayAmount(BigDecimal.ZERO.toString()); - taxDeclareRecord.setUpdateTime(new Date()); - getTaxDeclareRecordService(user).updateById(taxDeclareRecord); - // 填充回去后续返回数据用 - taxDeclareRecord.setTaxPayAmount(taxPayAmount.toString()); - return taxDeclareRecord; - } @Override public void cancelWithholdingVoucher(TaxDeclarationApiConfigPO apiConfig, TaxDeclareRecordPO taxDeclareRecord, Map requestParam) { diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 2d85f020c..019701a54 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -9,7 +9,6 @@ import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.entity.taxpayment.dto.TaxAgreementFeedbackResultDTO; -import com.engine.salary.entity.taxpayment.dto.TaxAmountFormDTO; import com.engine.salary.entity.taxpayment.dto.TaxFeedbackResultDTO; import com.engine.salary.entity.taxpayment.param.TaxPaymentQueryParam; import com.engine.salary.entity.taxpayment.response.BaseResponse; @@ -23,7 +22,6 @@ import com.engine.salary.util.*; import lombok.extern.slf4j.Slf4j; import java.math.BigDecimal; -import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -55,53 +53,57 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService throw new SalaryRunTimeException(msg); } - List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(param.getTaxDeclareRecordId()); - for (TaxDeclareStatusPO status : statuses) { - WithholdingFeedbackResponse.Feedback feedback = Optional.of(feedbackResponse) - .map(WithholdingFeedbackResponse::getBody) - .map(body -> { - if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.COMPREHENSIVE_INCOME.getValue())) { - return body.getZhsdjk(); - } else if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.CLASSIFIED_INCOME.getValue())) { - return body.getFlsdjk(); - } else if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.NONRESIDENT_INCOME.getValue())) { - return body.getFjmsdjk(); - } else { - return body.getXsgsdjk(); - } + TaxDeclareStatusPO status = getTaxDeclareStatusService(user).getTaxDeclareStatus(param.getTaxDeclareRecordId(),param.getReportType()); + WithholdingFeedbackResponse.Feedback feedback = Optional.of(feedbackResponse) + .map(WithholdingFeedbackResponse::getBody) + .map(body -> { + if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.COMPREHENSIVE_INCOME.getValue())) { + return body.getZhsdjk(); + } else if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.CLASSIFIED_INCOME.getValue())) { + return body.getFlsdjk(); + } else if (Objects.equals(status.getReportType(), DeclareReportTypeEnum.NONRESIDENT_INCOME.getValue())) { + return body.getFjmsdjk(); + } else { + return body.getXsgsdjk(); + } - }) - .orElse(null); - if (feedback == null) { - log.info("getAgreementQueryFeedbackResponse empty data error: {}", JSON.toJSONString(feedbackResponse)); - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(175338, "税局接口错误,未返回有效数据")); - } - // 判断缴款状态是否成功 - Integer paymentStatus = SalaryEntityUtil.getIntValue(feedback.getJkzt(), -1); - TaxPaymentStatusEnum paymentStatusEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, TaxPaymentStatusEnum.class); - if (paymentStatusEnum != TaxPaymentStatusEnum.SUCCESS) { - throw new SalaryRunTimeException(String.format("缴款失败,失败原因:%s,申报状态:%s", feedback.getJksbyy(), feedback.getSbzt())); - } - // 累计实缴金额 - BigDecimal totalPaid = feedback.getKkfhlb().stream().map(e -> new BigDecimal(e.getSjse())).reduce(BigDecimal.ZERO, BigDecimal::add); - - if (TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue().equals(status.getTaxDeclareStatus())) { - throw new SalaryRunTimeException("当前申报表状态为已缴款,无法更新状态"); - } - BigDecimal taxPayAmount = SalaryEntityUtil.empty2Zero(status.getTaxPayAmount()); - BigDecimal taxPurePaidAmount = SalaryEntityUtil.empty2Zero(status.getTaxPurePaidAmount()); - if (SalaryEntityUtil.empty2Zero(status.getTaxPaidAmount()).equals(totalPaid) - && taxPayAmount.compareTo(BigDecimal.ZERO) > 0) { - throw new SalaryRunTimeException("请进行缴款后再刷新缴款状态"); - } - status.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue()); - status.setTaxPaidAmount(totalPaid.toString()); - status.setTaxPurePaidAmount(taxPurePaidAmount.add(taxPayAmount).toString()); - status.setTaxPayAmount(BigDecimal.ZERO.toString()); - getTaxDeclareStatusService(user).updateTaxDeclareStatus(status, false); + }) + .orElse(null); + if (feedback == null) { + // 更新缴款请求为已反馈 + updateTaxPaymentRequest(param); + log.info("getAgreementQueryFeedbackResponse empty data error: {}", JSON.toJSONString(feedbackResponse)); + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(175338, "税局接口错误,未返回有效数据")); } + // 判断缴款状态是否成功 + Integer paymentStatus = SalaryEntityUtil.getIntValue(feedback.getJkzt(), -1); + TaxPaymentStatusEnum paymentStatusEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, TaxPaymentStatusEnum.class); + if (paymentStatusEnum != TaxPaymentStatusEnum.SUCCESS) { + // 更新缴款请求为已反馈 + updateTaxPaymentRequest(param); + throw new SalaryRunTimeException(String.format("缴款失败,失败原因:%s,申报状态:%s", feedback.getJksbyy(), feedback.getSbzt())); + } + // 累计实缴金额 + BigDecimal totalPaid = feedback.getKkfhlb().stream().map(e -> new BigDecimal(e.getSjse())).reduce(BigDecimal.ZERO, BigDecimal::add); + + if (TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue().equals(status.getTaxDeclareStatus())) { + // 更新缴款请求为已反馈 + updateTaxPaymentRequest(param); + throw new SalaryRunTimeException("当前申报表状态为已缴款,无法更新状态"); + } + BigDecimal taxPayAmount = SalaryEntityUtil.empty2Zero(status.getTaxPayAmount()); + BigDecimal taxPurePaidAmount = SalaryEntityUtil.empty2Zero(status.getTaxPurePaidAmount()); + if (SalaryEntityUtil.empty2Zero(status.getTaxPaidAmount()).equals(totalPaid) && taxPayAmount.compareTo(BigDecimal.ZERO) > 0) { + // 更新缴款请求为已反馈 + updateTaxPaymentRequest(param); + throw new SalaryRunTimeException("请进行缴款后再刷新缴款状态"); + } + status.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_SUCCESS_PAID.getValue()); + status.setTaxPaidAmount(totalPaid.toString()); + status.setTaxPurePaidAmount(taxPurePaidAmount.add(taxPayAmount).toString()); + status.setTaxPayAmount(BigDecimal.ZERO.toString()); + getTaxDeclareStatusService(user).updateTaxDeclareStatus(status, false); - TaxAmountFormDTO taxAmountFormDTO = queryTaxAmount(param); //更新主记录 getTaxDeclareStatusService(user).updateRecord(param.getTaxDeclareRecordId()); @@ -112,9 +114,9 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService BigDecimal otherAmount = SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPaidAmount()).subtract(SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPurePaidAmount())); return new TaxAgreementFeedbackResultDTO() - .setPayAmount(SalaryEntityUtil.thousandthConvert(SalaryEntityUtil.empty2Zero(declareRecordPO.getTaxPaidAmount()).toString())) + .setPayAmount(SalaryEntityUtil.thousandthConvert(SalaryEntityUtil.empty2Zero(status.getTaxPaidAmount()).toString())) .setOtherAmount(SalaryEntityUtil.thousandthConvert(otherAmount.toString())) - .setPersonNum(taxAmountFormDTO.getPersonNum()); + .setPersonNum(status.getPersonNum().toString()); } @Override diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java index dda4b4f06..5acb92777 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java @@ -106,14 +106,6 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS @Override public void cancelWithholdingVoucher(TaxDeclarationApiConfigPO apiConfig, TaxDeclareRecordPO taxDeclareRecord, Map requestParam) { - TaxPaymentRequestPO paymentRequestPO = getTaxPaymentRequestMapper().getOne(TaxPaymentRequestPO - .builder() - .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) - .taxAgentId(taxDeclareRecord.getTaxAgentId()) - .taxYearMonth(taxDeclareRecord.getTaxCycle()) - .build()); -// if (paymentRequestPO != null) { - List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(taxDeclareRecord.getId()); TaxPaymentClient taxPaymentClient = new TaxPaymentClient(taxDeclareRecord.getTaxAgentId()); statuses.forEach(status -> { @@ -128,9 +120,9 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) .taxAgentId(taxDeclareRecord.getTaxAgentId()) .taxYearMonth(taxDeclareRecord.getTaxCycle()) + .reportType(status.getReportType()) .build()); }); -// } } // @Override From 6e56660e1a33f196aac503f1eb9bc288985aa131 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 18 Aug 2025 17:24:44 +0800 Subject: [PATCH 14/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E8=80=83=E5=8B=A4?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E9=80=BB=E8=BE=91=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AttendQuoteDataServiceImpl.java | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index ee21da0bf..5b173edba 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -464,7 +464,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa employeeIds = employeeIds.stream().filter(empId -> !specialAttendEmpIds.contains(empId)).collect(Collectors.toList()); } // 4.获取考勤模块数据 - List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields, specialAttendRangeMap); + List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields, specialAttendRangeMap, specialAttendEmpIds); List pos = new ArrayList<>(); List values = new ArrayList<>(); // 5.考勤引用数据处理 @@ -627,8 +627,18 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa * @param attendQuoteFields * @return */ - private List> getAttendQuoteDataFromRemoteAttend(LocalDateRange attendCycleRange, List employeeIds, List attendQuoteFields, Map specialAttendRangeMap) { + private List> getAttendQuoteDataFromRemoteAttend(LocalDateRange attendCycleRange, List employeeIds, List attendQuoteFields, Map specialAttendRangeMap, Set specialAttendEmpIds) { List> attendQuoteSyncData = new ArrayList<>(); + // 获取哪些字段需要获取整月的值 + BaseBean baseBean = new BaseBean(); + List fullMonthAttendFields = Arrays.stream(baseBean.getPropValue("qzSalaryAttend", "full_month_attend_fields").split(",")).collect(Collectors.toList()); + List fullMonthAttendFieldList = new ArrayList<>(); + List specialAttednFieldList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(attendQuoteFields)) { + fullMonthAttendFieldList = attendQuoteFields.stream().filter(f -> fullMonthAttendFields.contains(f.getCode())).collect(Collectors.toList()); + specialAttednFieldList = attendQuoteFields.stream().filter(f -> !fullMonthAttendFields.contains(f.getCode())).collect(Collectors.toList()); + } + Attend4Salary attend4Salary = new Attend4Salary(); try { int partSize = 500; @@ -650,11 +660,35 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa } + + if (CollectionUtils.isNotEmpty(specialAttendEmpIds)) { + //班次信息 + String attendanceSerial = fullMonthAttendFieldList.stream() + .filter(f -> f.getCode() != null && f.getCode().startsWith("attendanceSerial_")) + .map(f -> f.getCode().replace("attendanceSerial_", "")) + .collect(Collectors.joining(",")); + attend4Salary = new Attend4Salary(); + for (Map.Entry entry : specialAttendRangeMap.entrySet()) { + String[] split = entry.getKey().split("_split"); + Long taxAgentId = split.length > 0 && NumberUtils.isCreatable(split[0]) ? Long.valueOf(split[0]) : 0L; + Long employeeId = split.length > 1 && NumberUtils.isCreatable(split[1]) ? Long.valueOf(split[1]) : 0L; + attend4Salary.setBeginDate(attendCycleRange.getFromDate()); + attend4Salary.setEndDate(attendCycleRange.getEndDate()); + attend4Salary.setOnlyEmpIds(Collections.singletonList(employeeId)); + attend4Salary.setAttendanceSerial(attendanceSerial); + + List> attendResult = getRemoteAttend4SalaryService(user).getDatas(attend4Salary); + + AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, fullMonthAttendFieldList, attendQuoteSyncData, taxAgentId); + } + } + //班次信息 - String attendanceSerial = attendQuoteFields.stream() + String attendanceSerial = specialAttednFieldList.stream() .filter(f -> f.getCode() != null && f.getCode().startsWith("attendanceSerial_")) .map(f -> f.getCode().replace("attendanceSerial_", "")) .collect(Collectors.joining(",")); + attend4Salary = new Attend4Salary(); for (Map.Entry entry : specialAttendRangeMap.entrySet()) { String[] split = entry.getKey().split("_split"); Long taxAgentId = split.length > 0 && NumberUtils.isCreatable(split[0]) ? Long.valueOf(split[0]) : 0L; @@ -666,7 +700,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa List> attendResult = getRemoteAttend4SalaryService(user).getDatas(attend4Salary); - AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, attendQuoteFields, attendQuoteSyncData, taxAgentId); + AttendQuoteDataBO.buildAttendDataFromRemote(attendResult, specialAttednFieldList, attendQuoteSyncData, taxAgentId); } } catch (Exception e) { log.error("salaryAttend获取考勤数据错误失败:{}", String.format("参数:%s,错误信息:%s", JSONObject.toJSONString(attend4Salary), e.getMessage()), e); From d88f48216a99ebe1501d7776687485e1626555a6 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 22 Aug 2025 11:44:01 +0800 Subject: [PATCH 15/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=20=E4=B9=89=E5=8A=A1?= =?UTF-8?q?=E4=BA=BA=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 6 +++++- .../salary/entity/salaryarchive/bo/SalaryArchiveBO.java | 2 +- .../engine/salary/service/impl/SIArchivesServiceImpl.java | 3 +-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index b906a6a37..3b248a95c 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -176,7 +176,11 @@ public class SalaryAcctResultBO { List columns = Lists.newArrayList(); // 员工信息字段 for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) { - columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobEmpFieldDTO.getFieldName(), 0), salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); + if (salarySobEmpFieldDTO.getFieldId().equals("taxAgentName")) { + columns.add(new WeaTableColumnGroup("300", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); + } else { + columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobEmpFieldDTO.getFieldName(), 0), salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); + } } // 薪资项目分组下的薪资项目 for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) { diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java index 75b26f972..f65e60038 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java @@ -75,7 +75,7 @@ public class SalaryArchiveBO { if (openSecondaryAccount) { columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(85429, "账号类型"), "accountType")); } - columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "taxAgentName")); + columns.add(new WeaTableColumn("300px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "taxAgentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "分部"), "subcompanyName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "部门"), "departmentName")); columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(86185, "工号"), "workcode")); diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index 8ba4d97ff..2a99fe6ad 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -74,7 +74,6 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.ibatis.session.SqlSession; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; -import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StopWatch; import weaver.conn.mybatis.MyBatisFactory; import weaver.general.BaseBean; @@ -1826,7 +1825,7 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService WeaTableColumn nameColumn = new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "姓名"), "employeeName"); nameColumn.setFixed("left"); list.add(nameColumn); - list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人"), "paymentOrganizationName")); + list.add(new WeaTableColumn("300px", SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人"), "paymentOrganizationName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "分部"), "subcompanyName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "部门"), "departmentName")); list.add(new WeaTableColumn("150px", SalaryI18nUtil.getI18nLabel(0, "手机号"), "mobile")); From d1d2130a521959528169cf5e86d3882e36dfc684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 25 Aug 2025 16:40:47 +0800 Subject: [PATCH 16/84] =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/util/ResponseResult.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/com/engine/salary/util/ResponseResult.java b/src/com/engine/salary/util/ResponseResult.java index 2036fd1a2..4fef6c0a1 100644 --- a/src/com/engine/salary/util/ResponseResult.java +++ b/src/com/engine/salary/util/ResponseResult.java @@ -8,6 +8,7 @@ import com.engine.salary.common.SalaryContext; import com.engine.salary.exception.ExceptionUtil; import com.engine.salary.exception.SalaryRunTimeException; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import lombok.extern.slf4j.Slf4j; import weaver.general.BaseBean; @@ -15,6 +16,7 @@ import weaver.hrm.User; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; @@ -52,6 +54,17 @@ public class ResponseResult { SalaryContext.get().setValue("response", response); } + public T parseParams(HttpServletRequest request, Class clazz) { + T t = null; + try { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + t = mapper.readValue(request.getInputStream(), clazz); + } catch (IOException e) { + log.error("salary api parseParams fail , param {}", t, e); + } + return t; + } /** * 统一返回方法 From 3775dbe68695779aedcba12db41cee47f9cd6a14 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 26 Aug 2025 16:04:27 +0800 Subject: [PATCH 17/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E7=BA=BF=E7=89=88=E6=9C=AC=20=E6=8A=A5=E8=A1=A8=E5=88=86?= =?UTF-8?q?=E4=BA=AB=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salarysob/param/SalarySobQueryParam.java | 2 ++ .../salary/entity/taxagent/param/TaxAgentQueryParam.java | 2 ++ .../salary/report/wrapper/SalaryStatisticsReportWrapper.java | 1 + src/com/engine/salary/service/impl/SalarySobServiceImpl.java | 3 +++ src/com/engine/salary/service/impl/TaxAgentServiceImpl.java | 3 +++ 5 files changed, 11 insertions(+) diff --git a/src/com/engine/salary/entity/salarysob/param/SalarySobQueryParam.java b/src/com/engine/salary/entity/salarysob/param/SalarySobQueryParam.java index d0555321d..fc0094ba5 100644 --- a/src/com/engine/salary/entity/salarysob/param/SalarySobQueryParam.java +++ b/src/com/engine/salary/entity/salarysob/param/SalarySobQueryParam.java @@ -28,4 +28,6 @@ public class SalarySobQueryParam extends BaseQueryParam { * 数据过滤级别 */ private AuthFilterTypeEnum filterType; + + private boolean isShare; } diff --git a/src/com/engine/salary/entity/taxagent/param/TaxAgentQueryParam.java b/src/com/engine/salary/entity/taxagent/param/TaxAgentQueryParam.java index 410b0b2b4..1ac46a384 100644 --- a/src/com/engine/salary/entity/taxagent/param/TaxAgentQueryParam.java +++ b/src/com/engine/salary/entity/taxagent/param/TaxAgentQueryParam.java @@ -26,4 +26,6 @@ public class TaxAgentQueryParam extends BaseQueryParam { //个税扣缴义务人名称 private String name; + + private boolean isShare; } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 7d0d48d53..d92d62957 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -303,6 +303,7 @@ public class SalaryStatisticsReportWrapper extends Service { // 如果是被分享的报表,校验分享权限,通过后将user赋值为报表创建人 User creator = new User(); creator.setUid(po.getCreator().intValue()); + creator.setLogintype("1"); user = creator; } else { // 判断报表是否是登陆人创建的,或薪酬总管理员 diff --git a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java index e25f15343..1273809a6 100644 --- a/src/com/engine/salary/service/impl/SalarySobServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobServiceImpl.java @@ -238,6 +238,9 @@ public class SalarySobServiceImpl extends Service implements SalarySobService { } List list = getSalarySobMapper().listSome(build); + if (param.isShare() == true) { + return list; + } return getAuthService(user).auth(list, param.getFilterType(), SalarySobPO.class); } diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index 3fe52c61b..e4982baa8 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -291,6 +291,9 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { public List listAuth(TaxAgentQueryParam queryParam) { List taxAgents = getTaxAgentMapper().listBySome(queryParam); AuthFilterTypeEnum filterType = queryParam.getFilterType(); + if (queryParam.isShare()) { + return taxAgents; + } return getAuthService(user).auth(taxAgents, filterType, TaxAgentPO.class); } From 70732f38a997091bce265dd63a01700573cfbeb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 2 Sep 2025 15:17:39 +0800 Subject: [PATCH 18/84] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SalarySendServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 21884ad0f..3eb92dcae 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1782,6 +1782,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService //取出验证码 String cacheValue = getSalaryCacheService(user).get(SALARY_CACHE_SMS_CODE + "_" + id); + if (cacheValue == null) { + throw new SalaryRunTimeException("未获取到验证码,请重新发送"); + } String[] cache = cacheValue.split("_"); String code = cache[0]; //失效时间 From e6038836356a5ec04772042dd33f3b03e4cd6681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 3 Sep 2025 14:21:35 +0800 Subject: [PATCH 19/84] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SalarySendServiceImpl.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 3eb92dcae..c4aa6554f 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1,7 +1,6 @@ package com.engine.salary.service.impl; import cn.hutool.core.collection.CollUtil; -import cn.hutool.core.lang.Validator; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.api.formmode.mybatis.util.SqlProxyHandle; @@ -1752,9 +1751,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } String mobile = employee.getMobile(); - if (Validator.isMobile(mobile)) { - throw new SalaryRunTimeException("手机号信息有误"); - } boolean checkSendSMS = MessageUtil.checkSendSMS(); if (!checkSendSMS) { From 3274043397821fa15f46ac27cdf1116df5d89346 Mon Sep 17 00:00:00 2001 From: Harryxzy <822365880@qq.com> Date: Tue, 9 Sep 2025 18:46:25 +0800 Subject: [PATCH 20/84] =?UTF-8?q?=E4=B8=93=E9=A1=B9=E9=99=84=E5=8A=A0?= =?UTF-8?q?=E6=89=A3=E9=99=A4=E4=B8=9A=E5=8A=A1=E7=BA=BFbug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SpecialAddDeductionServiceImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java index ed7102c46..85a3b8207 100644 --- a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java @@ -471,15 +471,20 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd SpecialAddDeductionBiz SpecialAddDeductionBiz = new SpecialAddDeductionBiz(); Long currentEmployeeId = (long) user.getUID(); // 获取所有个税扣缴义务人 - Collection taxAgentList = - getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); + // Collection taxAgentList = + // getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); + + TaxAgentQueryParam param = TaxAgentQueryParam.builder().build(); + param.setFilterType(AuthFilterTypeEnum.ADMIN_DATA); + Collection taxAgentList = getTaxAgentService(user).listAuth(param); + SpecialAddDeductionPO byId = SpecialAddDeductionBiz.getById(specialAddDeductionParam.getId()); if (byId == null) { throw new SalaryRunTimeException("该数据不存在!"); } //管理员可以编辑该扣缴义务人数据,其他人可以编辑本人数据 boolean canEdit = byId.getEmployeeId().equals((long) user.getUID()) - || taxAgentList.stream().anyMatch(t -> Objects.equals(t.getTaxAgentId(), byId.getTaxAgentId())); + || taxAgentList.stream().anyMatch(t -> Objects.equals(t.getId(), byId.getTaxAgentId())); if (!canEdit) { //没有编辑权限 throw new SalaryRunTimeException("该个税扣缴义务人无权限编辑此数据!"); From 24676fe027604485f1b6c4cbcdce06bd60414cbf Mon Sep 17 00:00:00 2001 From: Harryxzy <822365880@qq.com> Date: Wed, 10 Sep 2025 11:45:43 +0800 Subject: [PATCH 21/84] =?UTF-8?q?=E8=80=83=E5=8B=A4=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/AttendQuoteDataServiceImpl.java | 4 ++-- .../salary/service/impl/AttendQuoteFieldServiceImpl.java | 5 +++-- .../engine/salary/service/impl/RemoteExcelServiceImpl.java | 3 ++- src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index ee7e00713..d07ebc7aa 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -275,7 +275,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa .collect(Collectors.toList()); effectiveFields.forEach(attendQuoteField -> { - header.add(attendQuoteField.getFieldName()); + header.add(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage()))); } ); } @@ -606,7 +606,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa header.add(SalaryI18nUtil.getI18nLabel(86317, "证件号码")); // 动态列 for (AttendQuoteFieldPO attendQuoteField : attendQuoteFields) { - header.add(attendQuoteField.getFieldName()); + header.add(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage()))); } List> rows = new ArrayList<>(); rows.add(header); diff --git a/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java index 2448254f9..9ddab6625 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteFieldServiceImpl.java @@ -27,6 +27,7 @@ import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; +import weaver.general.Util; import weaver.hrm.User; import java.util.*; @@ -292,7 +293,7 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF Map column = columnsOptional.get(); updates.add(AttendQuoteFieldPO.builder() .code(column.get("code")) - .fieldName(column.get("name")) + .fieldName(Util.formatMultiLang(column.get("name"), String.valueOf(user.getLanguage()))) .updateTime(now) .build()); } @@ -312,7 +313,7 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF Optional> columnsOptional = columns.stream().filter(column -> code.equals(column.get("code"))).findFirst(); if (columnsOptional.isPresent()) { Map column = columnsOptional.get(); - saves.add(buildAttendQuoteField(column.get("code"), column.get("name"))); + saves.add(buildAttendQuoteField(column.get("code"), Util.formatMultiLang(column.get("name"), String.valueOf(user.getLanguage())))); } } if (CollectionUtils.isNotEmpty(saves)) { diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index b0424ad47..1825792ed 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -34,6 +34,7 @@ import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import weaver.general.Util; import weaver.hrm.User; import java.lang.reflect.Field; @@ -476,7 +477,7 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic List formulaVars = fields.stream().map(e -> { FormulaVar formulaVar = new FormulaVar(); formulaVar.setFieldId(referenceEnum.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + e.getId()); - formulaVar.setName(e.getFieldName()); + formulaVar.setName(Util.formatMultiLang(e.getFieldName(), String.valueOf(user.getLanguage()))); formulaVar.setSource("" + referenceEnum.getValue()); formulaVar.setFieldType(DataType.NUMBER); return formulaVar; diff --git a/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java b/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java index 2e5d4e579..523ec3c58 100644 --- a/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java +++ b/src/com/engine/salary/wrapper/AttendQuoteDataWrapper.java @@ -92,7 +92,7 @@ public class AttendQuoteDataWrapper extends Service { attendQuoteFields.stream() .filter(attendQuoteField->effectiveColumns.contains(Util.null2String(attendQuoteField.getId()))) .forEach(attendQuoteField -> { - columns.add(Column.builder().title(attendQuoteField.getFieldName()) + columns.add(Column.builder().title(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage()))) .dataIndex(attendQuoteField.getId() + "_attendQuoteData") .key(attendQuoteField.getId() + "_attendQuoteData").display(Boolean.TRUE).build()); } From 28ec56e4ccb066145b58a08f596ac87ebf1590ff Mon Sep 17 00:00:00 2001 From: Harryxzy <822365880@qq.com> Date: Thu, 11 Sep 2025 09:36:13 +0800 Subject: [PATCH 22/84] =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E7=BA=BF=E6=9D=83?= =?UTF-8?q?=E9=99=90bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AddUpDeductionServiceImpl.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index 2f79bb800..eb0bd4f65 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -193,7 +193,11 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction String imageId = Util.null2String(importParam.getImageId()); Validate.notBlank(imageId, "imageId为空"); // 获取所有个税扣缴义务人 - Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); + // 获取所有个税扣缴义务人 + TaxAgentQueryParam param = TaxAgentQueryParam.builder().build(); + param.setFilterType(AuthFilterTypeEnum.ADMIN_DATA); + Collection taxAgentList = getTaxAgentService(user).listAuth(param); + // Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); //个税扣缴义务人 String taxAgentId = Util.null2String(importParam.getTaxAgentId()); // 获取租户下所有的人员 @@ -295,17 +299,17 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction errorData.add(errorMessageMap); errorSum += 1; } else { - Optional optionalTemp = taxAgentList.stream().filter(m -> m.getTaxAgentName().equals(taxAgentName)).findFirst(); + Optional optionalTemp = taxAgentList.stream().filter(m -> m.getName().equals(taxAgentName)).findFirst(); if (optionalTemp.isPresent()) { - if (StringUtils.isNotEmpty(taxAgentId) && !optionalTemp.get().getTaxAgentId().equals(Long.valueOf(taxAgentId))) { + if (StringUtils.isNotEmpty(taxAgentId) && !optionalTemp.get().getId().equals(Long.valueOf(taxAgentId))) { //个税扣缴义务人与导入时选择的不一致 Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + "个税扣缴义务人与导入时选择的不一致"); errorData.add(errorMessageMap); errorSum += 1; } else { - addUpDeduction.setTaxAgentId(optionalTemp.get().getTaxAgentId()); - taxAgentEmployees = optionalTemp.get().getEmployeeList(); + addUpDeduction.setTaxAgentId(optionalTemp.get().getId()); + // taxAgentEmployees = optionalTemp.get().getEmployeeList(); } } else { //个税扣缴义务人不存在 From 0762fbee4d3b0cada29a76159b86675935b1657a Mon Sep 17 00:00:00 2001 From: Harryxzy <822365880@qq.com> Date: Fri, 12 Sep 2025 15:59:40 +0800 Subject: [PATCH 23/84] =?UTF-8?q?=E7=A4=BE=E4=BF=9DStringUtils=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=B8=BAlang3=E5=8C=85=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SICompensationServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java index a6c4cb5d8..276a39af7 100644 --- a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java @@ -1,7 +1,6 @@ package com.engine.salary.service.impl; import com.alibaba.fastjson.JSON; -import com.alipay.oceanbase.jdbc.StringUtils; import com.cloudstore.eccom.pc.table.WeaTable; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; @@ -41,6 +40,7 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.Column; import com.google.common.collect.Lists; import com.engine.salary.util.db.IdGenerator; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; From be4998b62d2b5d5c9cc4b9758f7d20d0cf71ffcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 15 Sep 2025 11:33:51 +0800 Subject: [PATCH 24/84] =?UTF-8?q?1=E3=80=81=E4=BA=BA=E5=91=98=E6=8A=A5?= =?UTF-8?q?=E9=80=81=E5=8A=9F=E8=83=BD=E5=A4=84=E5=8E=9F=E6=9C=89=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=98=AF=E6=A0=B9=E6=8D=AE=E5=91=98=E5=B7=A5=E8=96=AA?= =?UTF-8?q?=E8=B5=84=E6=A1=A3=E6=A1=88=E6=97=B6=E9=97=B4=E4=BD=9C=E4=B8=BA?= =?UTF-8?q?=E5=8F=97=E9=9B=87=E4=BB=8E=E4=B8=9A=E6=97=A5=E6=9C=9F=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E7=BB=93=E6=9D=9F=E6=97=A5=E6=9C=9F=EF=BC=8C=E7=8E=B0?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BA=E4=BB=A5=E8=96=AA=E8=B5=84=E6=A1=A3?= =?UTF-8?q?=E6=A1=88=E6=97=B6=E9=97=B4=E5=BE=80=E5=90=8E=E5=BB=B6=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=9C=88=E4=BD=9C=E4=B8=BA=E9=9B=87=E4=BB=8E=E4=B8=9A?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E4=BB=A5=E3=80=81=E7=BB=93=E6=9D=9F=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bo/EmployeeDeclareRefresh.java | 47 ++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java index 72191b404..4d7529208 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.employeedeclare.bo; +import cn.hutool.core.date.DateUtil; import com.api.formmode.page.util.Util; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -27,6 +28,7 @@ import java.util.*; public class EmployeeDeclareRefresh { public static Result refresh(EmployeeDeclareRefreshDTO dto, Long employeeId) { + Date taxCycle = dto.getTaxCycle(); Result result = new Result(); // 本月已有的需要报送的人员 Set employeeIds = SalaryEntityUtil.properties(dto.getEmployeeDeclares(), EmployeeDeclarePO::getEmployeeId); @@ -43,10 +45,16 @@ public class EmployeeDeclareRefresh { || Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()))) { if (Objects.equals(employeeDeclare.getEmploymentStatus(), EmploymentStatusEnum.ABNORMAL.getValue()) || Objects.equals(Util.null2String(employeeDeclare.getDismissDate()), Util.null2String(salaryArchive.getPayEndDate()))) { - employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); - employeeDeclare.setDismissDate(salaryArchive.getPayEndDate()); - employeeDeclare.setNewEmployeeInfo(1); - employeeDeclare.setUpdateTime(now); + Date payEndDate = salaryArchive.getPayEndDate(); + payEndDate = SalaryDateUtil.plusMonths(payEndDate, 1); + //过滤不在一个月且发薪日期在之后月份的 + if ((!DateUtil.isIn(payEndDate, taxCycle, DateUtil.endOfMonth(taxCycle))) && payEndDate.before(taxCycle)) { + employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); + employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); + employeeDeclare.setDismissDate(payEndDate); + employeeDeclare.setNewEmployeeInfo(1); + employeeDeclare.setUpdateTime(now); + } result.getEmployeeDeclares().add(employeeDeclare); } } @@ -76,10 +84,15 @@ public class EmployeeDeclareRefresh { SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId()); if (salaryArchive != null && (Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()) || Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()))) { - employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); - employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); - employeeDeclare.setDismissDate(salaryArchive.getPayEndDate()); - employeeDeclare.setNewEmployeeInfo(1); + Date payEndDate = salaryArchive.getPayEndDate(); + payEndDate = SalaryDateUtil.plusMonths(payEndDate, 1); + //过滤不在一个月且发薪日期在之后月份的 + if ((!DateUtil.isIn(payEndDate, taxCycle, DateUtil.endOfMonth(taxCycle))) && payEndDate.before(taxCycle)) { + employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); + employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); + employeeDeclare.setDismissDate(payEndDate); + employeeDeclare.setNewEmployeeInfo(1); + } } // if (salaryArchive != null && !Objects.equals(Util.null2String(employeeDeclare.getEmploymentType()), salaryArchive.getEmploymentType())) { // employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue()); @@ -141,11 +154,23 @@ public class EmployeeDeclareRefresh { SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId()); if (salaryArchive != null) { // employeeDeclare.setEmploymentType(Util.getIntValue(salaryArchive.getEmploymentType())); - employeeDeclare.setEmploymentDate(salaryArchive.getPayStartDate()); + //钱智二开,薪资档案时间作为受雇从业日期以及结束日期,调整为以薪资档案时间往后延一个月作为雇从业日期以、结束日期。 + Date payStartDate = salaryArchive.getPayStartDate(); + payStartDate = SalaryDateUtil.plusMonths(payStartDate, 1); + //过滤不在一个月且发薪日期在之后月份的 + if ((!DateUtil.isIn(payStartDate, taxCycle, DateUtil.endOfMonth(taxCycle))) && payStartDate.after(taxCycle)) { + continue; + } + if (Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()) || Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { - employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); - employeeDeclare.setDismissDate(salaryArchive.getPayEndDate()); + Date payEndDate = salaryArchive.getPayEndDate(); + payEndDate = SalaryDateUtil.plusMonths(payEndDate, 1); + //过滤不在一个月且发薪日期在之后月份的 + if ((!DateUtil.isIn(payEndDate, taxCycle, DateUtil.endOfMonth(taxCycle))) && payEndDate.before(taxCycle)) { + employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue()); + employeeDeclare.setDismissDate(payEndDate); + } } } employeeIds.add(employeeDeclare.getEmployeeId()); From d04896b0c5ddd76536475369c99649974f8d7c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 15 Sep 2025 16:51:20 +0800 Subject: [PATCH 25/84] =?UTF-8?q?1=E3=80=81=E4=BA=BA=E5=91=98=E6=8A=A5?= =?UTF-8?q?=E9=80=81=E5=8A=9F=E8=83=BD=E5=A4=84=E5=8E=9F=E6=9C=89=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E6=98=AF=E6=A0=B9=E6=8D=AE=E5=91=98=E5=B7=A5=E8=96=AA?= =?UTF-8?q?=E8=B5=84=E6=A1=A3=E6=A1=88=E6=97=B6=E9=97=B4=E4=BD=9C=E4=B8=BA?= =?UTF-8?q?=E5=8F=97=E9=9B=87=E4=BB=8E=E4=B8=9A=E6=97=A5=E6=9C=9F=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E7=BB=93=E6=9D=9F=E6=97=A5=E6=9C=9F=EF=BC=8C=E7=8E=B0?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=B8=BA=E4=BB=A5=E8=96=AA=E8=B5=84=E6=A1=A3?= =?UTF-8?q?=E6=A1=88=E6=97=B6=E9=97=B4=E5=BE=80=E5=90=8E=E5=BB=B6=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E6=9C=88=E4=BD=9C=E4=B8=BA=E9=9B=87=E4=BB=8E=E4=B8=9A?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E4=BB=A5=E3=80=81=E7=BB=93=E6=9D=9F=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/employeedeclare/bo/EmployeeDeclareRefresh.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java index 4d7529208..e9749c515 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java @@ -162,6 +162,8 @@ public class EmployeeDeclareRefresh { continue; } + employeeDeclare.setEmploymentDate(payStartDate); + if (Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue()) || Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { Date payEndDate = salaryArchive.getPayEndDate(); From 2767114bfb69d9305e63bf5d78e2e2c87adbad5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 3 Jun 2025 14:30:46 +0800 Subject: [PATCH 26/84] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E5=8F=B0=E8=B4=A6?= =?UTF-8?q?=EF=BC=9A=201=E3=80=81=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E8=AE=B0=E5=BD=95=E5=B9=B6=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E3=80=82=202=E3=80=81=E6=89=B9=E9=87=8F=E5=BD=92=E6=A1=A3=203?= =?UTF-8?q?=E3=80=81=E6=89=B9=E9=87=8F=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=20=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=EF=BC=9A=201=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA=E6=A0=B8=E7=AE=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=B9=B6=E6=A0=B8=E7=AE=97=E3=80=82=202=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=BD=92=E6=A1=A3=203=E3=80=81=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97=20=E5=B7=A5?= =?UTF-8?q?=E8=B5=84=E5=8D=95=EF=BC=9A=201=E3=80=81=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=8F=91=E6=94=BE=202=E3=80=81=E6=89=B9=E9=87=8F=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=20=E7=94=B3=E6=8A=A5=E8=A1=A8=EF=BC=9A=201=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryBill/param/SalarySendBatParam.java | 27 ++++++++++ .../salaryacct/param/SalaryAcctBatParam.java | 34 ++++++++++++ .../siaccount/param/AccountBatParam.java | 40 ++++++++++++++ .../param/TaxDeclarationBatParam.java | 54 +++++++++++++++++++ .../salary/service/SIAccountService.java | 8 +++ .../service/SalaryAcctRecordService.java | 8 +++ .../service/impl/SIAccountServiceImpl.java | 46 ++++++++++++++++ .../impl/SalaryAcctRecordServiceImpl.java | 38 ++++++++++++- .../salary/web/SIAccountController.java | 32 +++++++++++ .../salary/web/SalaryAcctController.java | 37 +++++++++++++ .../salary/web/SalaryBillController.java | 23 ++++++++ .../salary/web/TaxDeclarationController.java | 10 ++++ .../wrapper/SalaryAcctRecordWrapper.java | 30 ++++++++++- .../salary/wrapper/SalarySendWrapper.java | 24 +++++++++ .../salary/wrapper/TaxDeclarationWrapper.java | 17 ++++++ 15 files changed, 426 insertions(+), 2 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java create mode 100644 src/com/engine/salary/entity/siaccount/param/AccountBatParam.java create mode 100644 src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java new file mode 100644 index 000000000..40f529cc5 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendBatParam.java @@ -0,0 +1,27 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 工资单批量操作参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalarySendBatParam { + +// 工资单发放Id + private List salarySendIds; + +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java new file mode 100644 index 000000000..63dc4310a --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctBatParam.java @@ -0,0 +1,34 @@ +package com.engine.salary.entity.salaryacct.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.List; + +/** + * 批量操作参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAcctBatParam { + + //薪资所属月 + private Date salaryMonth; + //薪资账套id + private List salarySobIds; + //备注 + private String description; + + + private List salaryAcctRecordIds; +} diff --git a/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java b/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java new file mode 100644 index 000000000..fa9de96fc --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java @@ -0,0 +1,40 @@ +package com.engine.salary.entity.siaccount.param; + + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AccountBatParam { + + //账单月份") + //@NotNull + @DataCheck(require = true,message = "账单月份不能为空") + private String billMonth; + + //备注") + //@Length(max = 60) + @DataCheck(max = 60,message = "备注长度不能超过60个字符") + private String remarks; + + + /** + * 个税扣缴义务人id + */ + @DataCheck(require = true,message = "个税扣缴义务人不能为空") + private List paymentOrganizations; + + + + private List ids; + +} diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java new file mode 100644 index 000000000..0168f9c89 --- /dev/null +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java @@ -0,0 +1,54 @@ +package com.engine.salary.entity.taxdeclaration.param; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.YearMonth; +import java.util.Date; +import java.util.List; + +/** + * 生成个税申报表参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaxDeclarationBatParam { + + /** + * 个税申报id + */ + private Long taxDeclarationId; + + /** + * 薪资所属月 + */ + private YearMonth salaryMonth; + + /** + * 个税扣缴义务人 + */ + private List taxAgentIds; + + /** + * 备注 + */ + private String description; + + private String salaryMonthStr; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date taxCycle; + + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date salaryDate; +} diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index bd95388a2..f37924c1d 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -320,5 +320,13 @@ public interface SIAccountService { void cacheWelfareField(List welfareNames); void cacheBalanceWelfareField(List welfareNames); + + void batSave(AccountBatParam param); + + void batDelete(AccountBatParam param); + + void batFile(AccountBatParam param); + + void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam); } diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index fcf00580b..603e2a164 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; import com.engine.salary.common.LocalDateRange; +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.SalaryAcctRecordPO; @@ -210,4 +211,11 @@ public interface SalaryAcctRecordService { List listSome(SalaryAcctRecordPO po); void updateDate(Long id, Date updateTime); + + void batSave(SalaryAcctBatParam saveParam); + + void batFile(SalaryAcctBatParam param); + + void batReCalculate(SalaryAcctBatParam param); + } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 6c1a30028..a7039d1f5 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -6802,6 +6802,52 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(welfareNames)); } + @Override + public void batSave(AccountBatParam accountBatParam) { + List paymentOrganizations = accountBatParam.getPaymentOrganizations(); + for (Long paymentOrganization : paymentOrganizations) { + AccountParam param = AccountParam.builder() + .billMonth(accountBatParam.getBillMonth()) + .paymentOrganization(paymentOrganization) + .remarks(accountBatParam.getRemarks()) + .build(); + save(param); + } + } + + @Override + public void batDelete(AccountBatParam batParam) { + List paymentOrganizations = batParam.getPaymentOrganizations(); + for (Long paymentOrganization : paymentOrganizations) { + AccountParam param = AccountParam.builder() + .billMonth(batParam.getBillMonth()) + .paymentOrganization(paymentOrganization) + .build(); + delete(param); + } + } + + @Override + public void batFile(AccountBatParam batParam) { + List paymentOrganizations = batParam.getPaymentOrganizations(); + for (Long paymentOrganization : paymentOrganizations) { + AccountParam param = AccountParam.builder() + .billMonth(batParam.getBillMonth()) + .paymentOrganization(paymentOrganization) + .build(); + file(param); + } + } + + @Override + public void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO param = InsuranceAccountBatchPO.builder().id(id).build(); + socialSecurityBenefitsRecalculate(param); + } + } + public void accountOtherView(InsuranceAccountViewListDTO dto, List pos) { int otherNum = 0; BigDecimal otherPaySum = new BigDecimal("0"); diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 9958f8d27..2f79fd449 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -4,11 +4,12 @@ import cn.hutool.core.collection.CollUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.common.LocalDateRange; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; +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; @@ -40,6 +41,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.hrm.User; +import java.time.YearMonth; import java.util.*; import java.util.stream.Collectors; @@ -845,4 +847,38 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe public void updateDate(Long id, Date updateTime) { getSalaryAcctRecordMapper().updateDate(id, updateTime); } + + @Override + public void batSave(SalaryAcctBatParam saveParam) { + + List salarySobIds = saveParam.getSalarySobIds(); + YearMonth salaryMonth = SalaryDateUtil.localDate2YearMonth(saveParam.getSalaryMonth()); + for (int i = 0; i < salarySobIds.size(); i++) { + Long salarySobId = salarySobIds.get(i); + SalaryAcctRecordSaveParam param = SalaryAcctRecordSaveParam.builder() + .salarySobId(salarySobId) + .salaryMonth(salaryMonth) + .description(saveParam.getDescription()) + .build(); + save(param); + } + } + + @Override + public void batFile(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + file(recordId); + } + } + + @Override + public void batReCalculate(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + reCalculate(recordId); + } + } } diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index 80f37a159..e44f3ba20 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -217,6 +217,38 @@ public class SIAccountController { return new ResponseResult(user).run(getService(user)::save, param); } + @POST + @Path("/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batSave, param); + } + + @POST + @Path("/batDelete") + @Produces(MediaType.APPLICATION_JSON) + public String batDelete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batDelete, param); + } + + @POST + @Path("/batFile") + @Produces(MediaType.APPLICATION_JSON) + public String batFile(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batFile, param); + } + + @POST + @Path("/batSocialSecurityBenefitsRecalculate") + @Produces(MediaType.APPLICATION_JSON) + public String batSocialSecurityBenefitsRecalculate(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody AccountBatParam batParam ){ + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batSocialSecurityBenefitsRecalculate,batParam); + } + /** * 正常缴纳页核算 diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index a196d53ef..57483fd40 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -141,6 +141,43 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::reCalculate, param.getSalaryAcctRecordId()); } + //薪资核算 + @POST + @Path("/batAccounting") + @Produces(MediaType.APPLICATION_JSON) + public String batAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batCalculate, param); + } + + //保存薪资核算的基本信息 + @POST + @Path("/basic/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batSave, param); + } + + + //归档薪资核算记录 + @POST + @Path("/batFile") + @Produces(MediaType.APPLICATION_JSON) + public String batFile(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batFile, param); + } + + //重新核算 + @POST + @Path("/batReAccounting") + @Produces(MediaType.APPLICATION_JSON) + public String batReAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctRecordWrapper(user)::batReCalculate, param); + } + //判断是否存在合并计税 @GET @Path("/hasConsolidatedTax") diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 64437a579..ab505d1ce 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -480,6 +480,29 @@ public class SalaryBillController { return new ResponseResult>(user).run(getSalarySendWrapper(user)::withdraw, queryParam); } + @POST + @Path("/send/batGrant") + @Produces(MediaType.APPLICATION_JSON) + public String batGrant(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::batGrant, queryParam); + } + + /** + * 工资单撤回 + * + * @param queryParam + * @return + */ + @POST + @Path("/send/batWithdraw") + @Produces(MediaType.APPLICATION_JSON) + public String batWithdraw(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::batWithdraw, queryParam); + } + + /** * 工资单发放详情列表的高级搜索 * diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 1c65fd7a2..e6205eaaa 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO; +import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDetailListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; @@ -99,6 +100,15 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::save, param); } + @POST + @Path("/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationBatParam param) { + User user = HrmUserVarify.getUser(request, response); + param.setSalaryMonth(SalaryDateUtil.String2YearMonth(param.getSalaryMonthStr())); + return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::batSave, param); + } + //个税申报表详情列表 @POST @Path("/detail/list") diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 7e352ce91..481cf0e1f 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -10,12 +10,13 @@ import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordFormDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO; +import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam; +import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; -import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; @@ -55,6 +56,9 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord private SalaryAcctRecordService getSalaryAcctRecordService(User user) { return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); } + private SalaryAcctResultWrapper getSalaryAcctResultWrapper(User user) { + return ServiceUtil.getService(SalaryAcctResultWrapper.class, user); + } private SalarySobService getSalarySobService(User user) { return ServiceUtil.getService(SalarySobServiceImpl.class, user); @@ -396,4 +400,28 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord public void updateSobConfig(Long id) { getSalaryAcctSobConfigService(user).updateBySalaryAcctRecordId(id); } + + + public void batSave(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batSave(param); + } + + + public void batFile(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batFile(param); + } + + public void batReCalculate(SalaryAcctBatParam param) { + getSalaryAcctRecordService(user).batReCalculate(param); + + } + + public void batCalculate(SalaryAcctBatParam param) { + List salaryAcctRecordIds = param.getSalaryAcctRecordIds(); + for (int i = 0; i < salaryAcctRecordIds.size(); i++) { + Long recordId = salaryAcctRecordIds.get(i); + SalaryAcctCalculateParam calculateParam = SalaryAcctCalculateParam.builder().salaryAcctRecordId(recordId).build(); + getSalaryAcctResultWrapper(user).calculate(calculateParam); + } + } } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 8bbba561c..1772ba8b9 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -751,4 +751,28 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam) { return getSalaryBillService(user).genPdfBeforeExport(salaryExportPdfParam); } + + + public void batGrant(SalarySendBatParam param) { + List salarySendIds = param.getSalarySendIds(); + + for (int i = 0; i < salarySendIds.size(); i++) { + Long sendId = salarySendIds.get(i); + SalarySendGrantParam grantParam = SalarySendGrantParam.builder() + .salarySendId(sendId) + .build(); + grant(grantParam); + } + } + public void batWithdraw(SalarySendBatParam param) { + List salarySendIds = param.getSalarySendIds(); + + for (int i = 0; i < salarySendIds.size(); i++) { + Long sendId = salarySendIds.get(i); + SalarySendWithdrawParam grantParam = SalarySendWithdrawParam.builder() + .salarySendId(sendId) + .build(); + withdraw(grantParam); + } + } } diff --git a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java index 38670737a..0bfd23343 100644 --- a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationBO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO; +import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; @@ -158,4 +159,20 @@ public class TaxDeclarationWrapper extends Service { public void withDrawTaxDeclaration(Long taxDeclarationId) { getTaxDeclarationService(user).withDrawTaxDeclaration(taxDeclarationId); } + + public void batSave(TaxDeclarationBatParam param) { + List taxAgentIds = param.getTaxAgentIds(); + for (int i = 0; i < taxAgentIds.size(); i++) { + Long taxAgentId = taxAgentIds.get(i); + TaxDeclarationSaveParam saveParam = TaxDeclarationSaveParam.builder() + .salaryMonth(param.getSalaryMonth()) + .taxAgentId(taxAgentId) + .description(param.getDescription()) + .taxCycle(param.getTaxCycle()) + .salaryDate(param.getSalaryDate()) + .build(); + save(saveParam); + } + + } } From f224916aac7cbeb2a63dfc6fe3b48162dcd4bcfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 4 Jun 2025 13:23:29 +0800 Subject: [PATCH 27/84] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E5=8F=B0=E8=B4=A6?= =?UTF-8?q?=EF=BC=9A=201=E3=80=81=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E6=A0=B8=E7=AE=97=E8=AE=B0=E5=BD=95=E5=B9=B6=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E3=80=82=202=E3=80=81=E6=89=B9=E9=87=8F=E5=BD=92=E6=A1=A3=203?= =?UTF-8?q?=E3=80=81=E6=89=B9=E9=87=8F=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=20=E8=96=AA=E8=B5=84=E6=A0=B8=E7=AE=97=EF=BC=9A=201=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=96=B0=E5=BB=BA=E6=A0=B8=E7=AE=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=B9=B6=E6=A0=B8=E7=AE=97=E3=80=82=202=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=BD=92=E6=A1=A3=203=E3=80=81=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E9=87=8D=E6=96=B0=E6=A0=B8=E7=AE=97=20=E5=B7=A5?= =?UTF-8?q?=E8=B5=84=E5=8D=95=EF=BC=9A=201=E3=80=81=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=8F=91=E6=94=BE=202=E3=80=81=E6=89=B9=E9=87=8F=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=20=E7=94=B3=E6=8A=A5=E8=A1=A8=EF=BC=9A=201=E3=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SIAccountServiceImpl.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index a7039d1f5..5eb2e1989 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -6817,11 +6817,12 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { @Override public void batDelete(AccountBatParam batParam) { - List paymentOrganizations = batParam.getPaymentOrganizations(); - for (Long paymentOrganization : paymentOrganizations) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id); AccountParam param = AccountParam.builder() - .billMonth(batParam.getBillMonth()) - .paymentOrganization(paymentOrganization) + .billMonth(po.getBillMonth()) + .paymentOrganization(po.getPaymentOrganization()) .build(); delete(param); } @@ -6829,11 +6830,12 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { @Override public void batFile(AccountBatParam batParam) { - List paymentOrganizations = batParam.getPaymentOrganizations(); - for (Long paymentOrganization : paymentOrganizations) { + List ids = batParam.getIds(); + for (Long id : ids) { + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id); AccountParam param = AccountParam.builder() - .billMonth(batParam.getBillMonth()) - .paymentOrganization(paymentOrganization) + .billMonth(po.getBillMonth()) + .paymentOrganization(po.getPaymentOrganization()) .build(); file(param); } From 1ae436e91a17561a74066ad34d28a0153373d855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 4 Jun 2025 15:05:44 +0800 Subject: [PATCH 28/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=A0=B8=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SIAccountServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 5eb2e1989..4725c5790 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -6809,6 +6809,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { AccountParam param = AccountParam.builder() .billMonth(accountBatParam.getBillMonth()) .paymentOrganization(paymentOrganization) + .flag(true) .remarks(accountBatParam.getRemarks()) .build(); save(param); From 4c61714069d1d8b2cb13a2f7f258aaca96d21f73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Sep 2025 11:12:34 +0800 Subject: [PATCH 29/84] =?UTF-8?q?1=E3=80=81=E6=89=B9=E9=87=8F=E7=94=B3?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../taxdeclaration/param/TaxDeclarationBatParam.java | 3 +-- src/com/engine/salary/web/TaxDeclarationController.java | 9 +-------- src/com/engine/salary/wrapper/TaxDeclarationWrapper.java | 2 +- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java index 0168f9c89..0b309e9c4 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/TaxDeclarationBatParam.java @@ -6,7 +6,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.YearMonth; import java.util.Date; import java.util.List; @@ -32,7 +31,7 @@ public class TaxDeclarationBatParam { /** * 薪资所属月 */ - private YearMonth salaryMonth; + private Date salaryMonth; /** * 个税扣缴义务人 diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 88e686346..1baca155b 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -5,13 +5,6 @@ import com.engine.salary.entity.taxdeclaration.dto.*; import com.engine.salary.entity.taxdeclaration.param.*; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDetailListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.service.TaxDeclarationExcelService; import com.engine.salary.service.TaxDeclarationService; import com.engine.salary.service.impl.TaxDeclarationExcelServiceImpl; @@ -487,7 +480,7 @@ public class TaxDeclarationController { @Produces(MediaType.APPLICATION_JSON) public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationBatParam param) { User user = HrmUserVarify.getUser(request, response); - param.setSalaryMonth(SalaryDateUtil.String2YearMonth(param.getSalaryMonthStr())); + param.setSalaryMonth(SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryMonthStr())); return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::batSave, param); } diff --git a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java index 9ae14cf75..c01b1ba04 100644 --- a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java @@ -139,7 +139,7 @@ public class TaxDeclarationWrapper extends Service { String transformDate = simpleDateFormat.format(taxDeclaration.getSalaryMonth()); // 查询个税扣缴义务人 TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxDeclaration.getTaxAgentId()); - return TaxDeclarationInfoDTO.builder().salaryMonth(SalaryDateUtil.String2YearMonth(transformDate)).taxAgentId(taxDeclaration.getTaxAgentId()).taxAgentName(Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse("")).build(); + return TaxDeclarationInfoDTO.builder().salaryMonth(SalaryDateUtil.stringToDate(transformDate+"-01")).taxAgentId(taxDeclaration.getTaxAgentId()).taxAgentName(Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse("")).build(); } /** From 07cdf2063a97651132d04561fc30b1149e07d536 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Sep 2025 11:41:33 +0800 Subject: [PATCH 30/84] =?UTF-8?q?1=E3=80=81=E6=89=B9=E9=87=8F=E7=94=B3?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/web/TaxDeclarationController.java | 30 +++++++++---------- .../wrapper/TaxDeclareRecordWrapper.java | 23 ++++++++++++++ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 45d5f0a8d..53fb8d0ec 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -5,13 +5,6 @@ import com.engine.salary.entity.taxdeclaration.dto.*; import com.engine.salary.entity.taxdeclaration.param.*; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDetailListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.service.TaxDeclarationExcelService; import com.engine.salary.service.TaxDeclarationService; import com.engine.salary.service.impl.TaxDeclarationExcelServiceImpl; @@ -140,6 +133,20 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::save, saveParam); } + /** + * 个税申报表批量生成 + * + * @param param 批量保存参数 + * @return + */ + @POST + @Path("/batSave") + @Produces(MediaType.APPLICATION_JSON) + public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::batSave, param); + } + /** * 刷新个税申报表的待刷新标识 @@ -482,14 +489,7 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::add, param); } - @POST - @Path("/batSave") - @Produces(MediaType.APPLICATION_JSON) - public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationBatParam param) { - User user = HrmUserVarify.getUser(request, response); - param.setSalaryMonth(SalaryDateUtil.String2YearMonth(param.getSalaryMonthStr())); - return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::batSave, param); - } + /** diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 8b127dddd..f175ece2c 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -416,6 +416,29 @@ public class TaxDeclareRecordWrapper extends Service { return taxDeclarationRate.getIndex(); } + public String batSave(TaxDeclarationSaveParam param) { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + try { + param.setTaxAgentId(taxAgentId); + getTaxDeclareRecordService(user).save(param); + success++; + } catch (SalaryRunTimeException e) { + msg.append(e.getMessage()).append(";"); + fail++; + } catch (Exception e) { + log.error("个税申报表生成报错:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + } + return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + } + /** * 更新个税申报表的待刷新数据的标识 * From c4f860f742a7ecc17deac46468cc245a5a785104 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Sep 2025 11:42:20 +0800 Subject: [PATCH 31/84] =?UTF-8?q?1=E3=80=81=E6=89=B9=E9=87=8F=E7=94=B3?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/wrapper/TaxDeclarationWrapper.java | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java index 74419ecee..d98b8a419 100644 --- a/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclarationWrapper.java @@ -2,19 +2,6 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.component.WeaFormOption; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.taxagent.po.TaxAgentPO; -import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationBO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; -import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; -import com.engine.salary.exception.SalaryRunTimeException; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.TaxDeclarationService; @@ -23,8 +10,6 @@ import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.service.impl.TaxDeclarationServiceImpl; import weaver.hrm.User; -import java.util.List; - /** * 个税申报表 *

Copyright: Copyright (c) 2022

@@ -46,19 +31,5 @@ public class TaxDeclarationWrapper extends Service { private SalaryEmployeeService getSalaryEmployeeService(User user) { return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } - public void batSave(TaxDeclarationBatParam param) { - List taxAgentIds = param.getTaxAgentIds(); - for (int i = 0; i < taxAgentIds.size(); i++) { - Long taxAgentId = taxAgentIds.get(i); - TaxDeclarationSaveParam saveParam = TaxDeclarationSaveParam.builder() - .salaryMonth(param.getSalaryMonth()) - .taxAgentId(taxAgentId) - .description(param.getDescription()) - .taxCycle(param.getTaxCycle()) - .salaryDate(param.getSalaryDate()) - .build(); - save(saveParam); - } - } } From b7ecb9a2397da23384fa3316459bd7dc2badab07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Sep 2025 11:51:08 +0800 Subject: [PATCH 32/84] =?UTF-8?q?1=E3=80=81=E6=89=B9=E9=87=8F=E7=94=B3?= =?UTF-8?q?=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/web/TaxDeclarationController.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index b6bb6d93c..8a953dc92 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -489,18 +489,6 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::add, param); } - @POST - @Path("/batSave") - @Produces(MediaType.APPLICATION_JSON) - public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationBatParam param) { - User user = HrmUserVarify.getUser(request, response); - param.setSalaryMonth(SalaryDateUtil.dateStrToLocalYearMonth(param.getSalaryMonthStr())); - return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::batSave, param); - } - - - - /** * 编辑 From 17247f111f2b58bf475fa8c39968afb4def13b79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Sep 2025 16:23:44 +0800 Subject: [PATCH 33/84] =?UTF-8?q?=E6=89=B9=E9=87=8F=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E6=8A=A5=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/EmployeeDeclareParam.java | 7 ++ .../param/EmployeeDeclareRefreshParam.java | 11 +++- .../salary/web/EmployeeDeclareController.java | 23 +++++++ .../wrapper/EmployeeDeclareWrapper.java | 65 +++++++++++++++++++ 4 files changed, 104 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareParam.java b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareParam.java index 8af42f76a..036a3ad7a 100644 --- a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareParam.java +++ b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareParam.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; +import java.util.List; /** * 人员报送 @@ -34,4 +35,10 @@ public class EmployeeDeclareParam extends BaseQueryParam { */ @DataCheck(require = true,message = "参数错误,税款所属期参数格式错误") private Date taxCycle; + + /** + * 批量报送,个税扣缴义务人id集合 + */ + private List taxAgentIds; + } diff --git a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareRefreshParam.java b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareRefreshParam.java index b70cba7b5..073dd793a 100644 --- a/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareRefreshParam.java +++ b/src/com/engine/salary/entity/employeedeclare/param/EmployeeDeclareRefreshParam.java @@ -7,6 +7,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; +import java.util.List; /** * 刷新报送人员 @@ -25,12 +26,18 @@ public class EmployeeDeclareRefreshParam { /** * 个税扣缴义务人id */ - @DataCheck(require = true,message = "参数错误,个税扣缴义务人id不能为空") + @DataCheck(require = true, message = "参数错误,个税扣缴义务人id不能为空") private Long taxAgentId; /** * 税款所属期 */ - @DataCheck(require = true,message = "参数错误,税款所属期参数格式错误") + @DataCheck(require = true, message = "参数错误,税款所属期参数格式错误") private Date taxCycle; + + + /** + * 批量操作,个税扣缴义务人id集合 + */ + private List taxAgentIds; } diff --git a/src/com/engine/salary/web/EmployeeDeclareController.java b/src/com/engine/salary/web/EmployeeDeclareController.java index af3295194..356801c50 100644 --- a/src/com/engine/salary/web/EmployeeDeclareController.java +++ b/src/com/engine/salary/web/EmployeeDeclareController.java @@ -200,6 +200,14 @@ public class EmployeeDeclareController { return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::refresh, refreshParam); } + @POST + @Path("/batRefresh") + @Produces(MediaType.APPLICATION_JSON) + public String batRefresh(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeDeclareRefreshParam refreshParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::batRefresh, refreshParam); + } + /** * 人员报送-获取整体的报送情况 * @@ -228,6 +236,14 @@ public class EmployeeDeclareController { return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::declare, employeeDeclareParam); } + @POST + @Path("/batDeclare") + @Produces(MediaType.APPLICATION_JSON) + public String batDeclare(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeDeclareParam employeeDeclareParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::batDeclare, employeeDeclareParam); + } + /** * 人员报送-获取报送结果反馈 * @@ -242,6 +258,13 @@ public class EmployeeDeclareController { return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::getDeclareFeedback, employeeDeclareParam); } + @POST + @Path("/batGetDeclareFeedback") + @Produces(MediaType.APPLICATION_JSON) + public String batGetDeclareFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeDeclareParam employeeDeclareParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getEmployeeDeclareWrapper(user)::batGetDeclareFeedback, employeeDeclareParam); + } /** * 人员报送-后端业务逻辑是否已经完成 diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index fca9ed934..6c1e31ee8 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -460,6 +460,26 @@ public class EmployeeDeclareWrapper extends Service { return employeeDeclareRate.getIndex(); } + public String batRefresh(EmployeeDeclareRefreshParam param) { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + param.setTaxAgentId(taxAgentId); + try { + getEmployeeDeclareService(user).refresh(param, Long.valueOf(user.getUID())); + success++; + } catch (Exception e) { + log.error("刷新数据失败:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + } + return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + } + /** * 人员报送-获取人员报送的整体情况 * @@ -505,6 +525,26 @@ public class EmployeeDeclareWrapper extends Service { return employeeDeclareRate.getIndex(); } + public String batDeclare(EmployeeDeclareParam param) { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + param.setTaxAgentId(taxAgentId); + try { + getEmployeeDeclareService(user).declare(param); + success++; + } catch (Exception e) { + log.error("全部报送失败:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + } + return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + } + /** * 人员报送-获取报送结果反馈 * @@ -540,6 +580,31 @@ public class EmployeeDeclareWrapper extends Service { return employeeDeclareRate.getIndex(); } + public String batGetDeclareFeedback(EmployeeDeclareParam param) { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + param.setTaxAgentId(taxAgentId); + try { + EmployeeDeclareRateDTO employeeDeclareRate = new EmployeeDeclareRateDTO() + .setIndex(UUID.randomUUID().toString()) + .setStatus(true) + .setFinish(false) + .setMsg(""); + getEmployeeDeclareService(user).getDeclareFeedback(param,employeeDeclareRate); + success++; + } catch (Exception e) { + log.error("获取报送结果反馈失败:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + } + return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + } + /** * 获取人员报送相关后端接口是否已经完成 From 6ed1d5033fbca795bb801447688a5eeb8ee53473 Mon Sep 17 00:00:00 2001 From: Harryxzy <822365880@qq.com> Date: Thu, 18 Sep 2025 14:15:02 +0800 Subject: [PATCH 34/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E7=BA=BF=E6=95=B0=E6=8D=AE=E6=98=8E=E7=BB=86=E6=90=9C=E7=B4=A2?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/auth/AuthDataServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/auth/AuthDataServiceImpl.java b/src/com/engine/salary/service/auth/AuthDataServiceImpl.java index 582887859..2f9259b60 100644 --- a/src/com/engine/salary/service/auth/AuthDataServiceImpl.java +++ b/src/com/engine/salary/service/auth/AuthDataServiceImpl.java @@ -21,6 +21,7 @@ import com.engine.salary.mapper.auth.AuthRoleMapper; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; import java.util.Date; import java.util.HashSet; @@ -156,7 +157,7 @@ public class AuthDataServiceImpl extends Service implements AuthDataService { public List listRoleData( AuthDataQueryParam param) { List authRoleDataDTOS = getAuthRoleDataMapper().listRoleData(param.getRoleId()); if (StrUtil.isNotEmpty(param.getUsername())){ - authRoleDataDTOS = authRoleDataDTOS.stream().filter(authRoleDataDTO -> authRoleDataDTO.getUsername().contains(param.getUsername())).collect(Collectors.toList()); + authRoleDataDTOS = authRoleDataDTOS.stream().filter(authRoleDataDTO -> StringUtils.isNotBlank(authRoleDataDTO.getUsername()) && authRoleDataDTO.getUsername().contains(param.getUsername())).collect(Collectors.toList()); } return authRoleDataDTOS; } From f57582da529c252c452a7a52c23ffd80583e5e4a Mon Sep 17 00:00:00 2001 From: Harryxzy <822365880@qq.com> Date: Thu, 18 Sep 2025 15:38:13 +0800 Subject: [PATCH 35/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E7=BA=BF=E6=90=9C=E7=B4=A2bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/auth/AuthMemberServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java b/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java index b3a5232b6..2ae8de5a4 100644 --- a/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java +++ b/src/com/engine/salary/service/auth/AuthMemberServiceImpl.java @@ -24,6 +24,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; +import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.stream.Collectors; @@ -196,7 +197,7 @@ public class AuthMemberServiceImpl extends Service implements AuthMemberService public List listRoleEmp(AuthMemberQueryParam param) { List empDTOS = getAuthRoleEmpMapper().getByRoleId(param.getRoleId()); if(StrUtil.isNotEmpty(param.getUsername())){ - empDTOS = empDTOS.stream().filter(item -> item.getUsername().contains(param.getUsername())).collect(Collectors.toList()); + empDTOS = empDTOS.stream().filter(item -> StringUtils.isNotBlank(item.getUsername()) && item.getUsername().contains(param.getUsername())).collect(Collectors.toList()); } return empDTOS; From fbce286c17c8bb1950a8b9be2fb1ccac18ee15d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 18 Sep 2025 16:31:58 +0800 Subject: [PATCH 36/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=88=86=E6=9D=83=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryArchiveItemServiceImpl.java | 2 -- .../engine/salary/service/impl/SalaryArchiveServiceImpl.java | 2 +- src/com/engine/salary/wrapper/SalaryArchiveWrapper.java | 3 --- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java index 9e353083e..ea78bfd74 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveItemServiceImpl.java @@ -656,8 +656,6 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi public XSSFWorkbook exportAdjustRecordList(SalaryItemAdjustRecordQueryParam queryParam) { // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资项目调整记录"); - // 获取所有可被引用的薪资项目 - List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); String[] header = { SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(86187, "员工状态"), diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index ceab506eb..3e04c95da 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -543,7 +543,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资档案"); // 获取所有可被引用的薪资项目 - List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); + List salaryItems = getSalaryArchiveItemService(user).getCanAdjustSalaryItems(); Object[] header = { new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(85429, "姓名"), "", "", 0), new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "", "", 0), diff --git a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java index 85977afe1..38de24e1a 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveWrapper.java @@ -541,9 +541,6 @@ public class SalaryArchiveWrapper extends Service { return map; } - public Map selectSalaryArchiveColumns(String importType) { - return getSalaryArchiveService(user).selectSalaryArchiveColumns(SalaryArchiveImportTypeEnum.parseByValue(importType)); - } public Map checkSalaryArchiveInit(SalaryArchiveImportActionParam importData) { From 613478b19c95d25ba8b41dc4df2c6c04b735ceb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 23 Sep 2025 14:20:52 +0800 Subject: [PATCH 37/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mysql/sql202509180103SHQZJRXXFW.sql | 15 + .../dto/TaxAgentDeclareListDTO.java | 24 ++ .../param/TaxAgentDeclareListQueryParam.java | 11 + .../po/EmployeeDeclareOptPO.java | 101 +++++++ .../enums/employeedeclare/DeclareOptEnum.java | 56 ++++ .../EmployeeDeclareOptMapper.java | 73 +++++ .../EmployeeDeclareOptMapper.xml | 278 ++++++++++++++++++ .../service/EmployeeDeclareOptService.java | 28 ++ .../impl/EmployeeDeclareOptServiceImpl.java | 63 ++++ .../wrapper/EmployeeDeclareWrapper.java | 67 ++++- 10 files changed, 715 insertions(+), 1 deletion(-) create mode 100644 resource/sqlupgrade/Mysql/sql202509180103SHQZJRXXFW.sql create mode 100644 src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclareOptPO.java create mode 100644 src/com/engine/salary/enums/employeedeclare/DeclareOptEnum.java create mode 100644 src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.java create mode 100644 src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml create mode 100644 src/com/engine/salary/service/EmployeeDeclareOptService.java create mode 100644 src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java diff --git a/resource/sqlupgrade/Mysql/sql202509180103SHQZJRXXFW.sql b/resource/sqlupgrade/Mysql/sql202509180103SHQZJRXXFW.sql new file mode 100644 index 000000000..6d4a29add --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202509180103SHQZJRXXFW.sql @@ -0,0 +1,15 @@ +CREATE TABLE hrsa_employee_declare_opt +( + id bigint(0) NOT NULL, + create_time datetime(0), + update_time datetime(0), + creator bigint(0), + delete_type int(0), + tenant_key varchar(10), + tax_agent_id bigint(0), + status varchar(255), + last_operate_time datetime(0), + last_operate varchar(255), + tax_cycle datetime(0), + PRIMARY KEY (id) USING BTREE +); \ No newline at end of file diff --git a/src/com/engine/salary/entity/employeedeclare/dto/TaxAgentDeclareListDTO.java b/src/com/engine/salary/entity/employeedeclare/dto/TaxAgentDeclareListDTO.java index a241b008e..56e12666e 100644 --- a/src/com/engine/salary/entity/employeedeclare/dto/TaxAgentDeclareListDTO.java +++ b/src/com/engine/salary/entity/employeedeclare/dto/TaxAgentDeclareListDTO.java @@ -1,11 +1,14 @@ package com.engine.salary.entity.employeedeclare.dto; +import com.engine.salary.annotation.TableTitle; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; +import java.util.Date; import java.util.Set; /** @@ -27,7 +30,28 @@ public class TaxAgentDeclareListDTO { private Long id; // 个税扣缴义务人 + @TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgentName", key = "taxAgentName") private String taxAgentName; + /** + * 最后操作功能 + */ + @TableTitle(title = "最后操作功能", dataIndex = "lastOperate", key = "lastOperate") + private String lastOperate; + + /** + * 最后操作时间 + */ + @TableTitle(title = "最后操作时间", dataIndex = "lastOperateTime", key = "lastOperateTime") + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + private Date lastOperateTime; + + /** + * 报送状态 + */ + @TableTitle(title = "报送状态", dataIndex = "status", key = "status") + public String status; + + Set opts; } diff --git a/src/com/engine/salary/entity/employeedeclare/param/TaxAgentDeclareListQueryParam.java b/src/com/engine/salary/entity/employeedeclare/param/TaxAgentDeclareListQueryParam.java index 6daffceb3..e05cbf7f8 100644 --- a/src/com/engine/salary/entity/employeedeclare/param/TaxAgentDeclareListQueryParam.java +++ b/src/com/engine/salary/entity/employeedeclare/param/TaxAgentDeclareListQueryParam.java @@ -6,6 +6,8 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + /** * 人员报送(个税扣缴义务人)查询条件 *

Copyright: Copyright (c) 2023

@@ -22,4 +24,13 @@ public class TaxAgentDeclareListQueryParam extends BaseQueryParam { // "个税扣缴义务人名称" private String taxAgentName; + + + // 最后操作 + private List lastOperates; + + /** + * 操作状态 + */ + private List statuses; } diff --git a/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclareOptPO.java b/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclareOptPO.java new file mode 100644 index 000000000..9f833b95a --- /dev/null +++ b/src/com/engine/salary/entity/employeedeclare/po/EmployeeDeclareOptPO.java @@ -0,0 +1,101 @@ +package com.engine.salary.entity.employeedeclare.po; + +import com.engine.hrmelog.annotation.ElogTransform; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +/** + * 人员报送 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +//hrsa_employee_declare_opt +public class EmployeeDeclareOptPO { + /** + * ID + */ + @ElogTransform(name = "ID") + private Long id; + + /** + * 个税扣缴义务人 + */ + @ElogTransform(name = "个税扣缴义务人") + private Long taxAgentId; + + /** + * 税款所属期 + */ + @ElogTransform(name = "税款所属期") + private Date taxCycle; + + /** + * 报送状态 + */ + @ElogTransform(name = "操作状态") + private String status; + + /** + * 最后操作 + */ + @ElogTransform(name = "最后操作") + private String lastOperate; + + /** + * 最后操作时间 + */ + @ElogTransform(name = "最后操作时间") + private Date lastOperateTime; + + + /** + * 创建时间 + */ + @ElogTransform(name = "创建时间") + private Date createTime; + + + /** + * 修改时间 + */ + @ElogTransform(name = "修改时间") + private Date updateTime; + + /** + * 创建人id + */ + @ElogTransform(name = "创建人id") + private Long creator; + + /** + * 是否删除 + */ + @ElogTransform(name = "是否删除") + private Integer deleteType; + + + /** + * 租户KEY + */ + @ElogTransform(name = "租户KEY") + private String tenantKey; + + + //主键id集合 + private Collection ids; + + private Collection taxAgentIds; + + private Collection lastOperates; + + private Collection statuses; + + +} \ No newline at end of file diff --git a/src/com/engine/salary/enums/employeedeclare/DeclareOptEnum.java b/src/com/engine/salary/enums/employeedeclare/DeclareOptEnum.java new file mode 100644 index 000000000..596b5b2a8 --- /dev/null +++ b/src/com/engine/salary/enums/employeedeclare/DeclareOptEnum.java @@ -0,0 +1,56 @@ +package com.engine.salary.enums.employeedeclare; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 操作枚举 + *

Copyright: Copyright (c) 2025

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum DeclareOptEnum implements BaseEnum { + + BAT_REFRESH("1", "批量刷新", 158772), + BAT_DECLARE("2", "批量报送", 158770), + BAT_DECLARE_FEEDBACK("3", "批量获取反馈", 158774); + + DeclareOptEnum(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 DeclareOptEnum getByValue(String value) { + for (DeclareOptEnum e : DeclareOptEnum.values()) { + if (Objects.equals(e.getValue(), value)) { + return e; + } + } + return BAT_REFRESH; + } +} diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.java b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.java new file mode 100644 index 000000000..9a4f255ba --- /dev/null +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.java @@ -0,0 +1,73 @@ +package com.engine.salary.mapper.employeedeclare; + +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareOptPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface EmployeeDeclareOptMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(EmployeeDeclareOptPO employeeDeclareOpt); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + EmployeeDeclareOptPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param employeeDeclareOpt 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(EmployeeDeclareOptPO employeeDeclareOpt); + + /** + * 修改,修改所有字段 + * + * @param employeeDeclareOpt 修改的记录 + * @return 返回影响行数 + */ + int update(EmployeeDeclareOptPO employeeDeclareOpt); + + /** + * 修改,忽略null字段 + * + * @param employeeDeclareOpt 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(EmployeeDeclareOptPO employeeDeclareOpt); + + /** + * 删除记录 + * + * @param employeeDeclareOpt 待删除的记录 + * @return 返回影响行数 + */ + int delete(EmployeeDeclareOptPO employeeDeclareOpt); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + + EmployeeDeclareOptPO getByTaxAgentId(Long taxAgentId); +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml new file mode 100644 index 000000000..78049ea4a --- /dev/null +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + t + . + create_time + , t.creator + , t.delete_type + , t.id + , t.last_operate + , t.last_operate_time + , t.status + , t.tax_agent_id + , t.tenant_key + , t.update_time + , t.tax_cycle + + + + + + + + + + + + + + + INSERT INTO hrsa_employee_declare_opt + + + + create_time, + + + creator, + + + delete_type, + + + id, + + + last_operate, + + + last_operate_time, + + + status, + + + tax_agent_id, + + + tenant_key, + + + update_time, + + + tax_cycle, + + + + + #{createTime}, + + + #{creator}, + + + #{deleteType}, + + + #{id}, + + + #{lastOperate}, + + + #{lastOperateTime}, + + + #{status}, + + + #{taxAgentId}, + + + #{tenantKey}, + + + #{updateTime}, + + + #{taxCycle}, + + + + + + + UPDATE hrsa_employee_declare_opt + + create_time=#{createTime}, + creator=#{creator}, + delete_type=#{deleteType}, + last_operate=#{lastOperate}, + last_operate_time=#{lastOperateTime}, + status=#{status}, + tax_agent_id=#{taxAgentId}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + tax_cycle=#{taxCycle}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_employee_declare_opt + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + last_operate=#{lastOperate}, + + + last_operate_time=#{lastOperateTime}, + + + status=#{status}, + + + tax_agent_id=#{taxAgentId}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + tax_cycle=#{taxCycle}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_employee_declare_opt + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_employee_declare_opt + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/EmployeeDeclareOptService.java b/src/com/engine/salary/service/EmployeeDeclareOptService.java new file mode 100644 index 000000000..497122b42 --- /dev/null +++ b/src/com/engine/salary/service/EmployeeDeclareOptService.java @@ -0,0 +1,28 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareOptPO; + +import java.util.List; + +/** + * 人员报送(人员) + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface EmployeeDeclareOptService { + /** + * 查询操作记录 + * @param po + * @return + */ + List listSome(EmployeeDeclareOptPO po); + + /** + * 记录操作 + * @param po + */ + void record(EmployeeDeclareOptPO po); +} diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java new file mode 100644 index 000000000..1f45587f5 --- /dev/null +++ b/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java @@ -0,0 +1,63 @@ +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareOptPO; +import com.engine.salary.mapper.employeedeclare.EmployeeDeclareOptMapper; +import com.engine.salary.service.EmployeeDeclareOptService; +import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; + +import java.util.Date; +import java.util.List; + +import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY; + +/** + * 员工报送记录 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class EmployeeDeclareOptServiceImpl extends Service implements EmployeeDeclareOptService { + + private EmployeeDeclareOptMapper getEmployeeDeclareOptMapper() { + return MapperProxyFactory.getProxy(EmployeeDeclareOptMapper.class); + } + + + @Override + public List listSome(EmployeeDeclareOptPO po) { + return getEmployeeDeclareOptMapper().listSome(po); + } + + @Override + public void record(EmployeeDeclareOptPO po) { + Date now = new Date(); + Long taxAgentId = po.getTaxAgentId(); + EmployeeDeclareOptPO optPO = getEmployeeDeclareOptMapper().getByTaxAgentId(taxAgentId); + + if (optPO == null) { + po = EmployeeDeclareOptPO.builder() + .id(IdGenerator.generate()) + .taxAgentId(taxAgentId) + .status(po.getStatus()) + .lastOperate(po.getLastOperate()) + .lastOperateTime(now) + .creator((long)user.getUID()) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(DEFAULT_TENANT_KEY) + .build(); + getEmployeeDeclareOptMapper().insertIgnoreNull(po); + }else { + optPO.setStatus(po.getStatus()); + optPO.setLastOperate(po.getLastOperate()); + optPO.setLastOperateTime(now); + getEmployeeDeclareOptMapper().updateIgnoreNull(optPO); + } + + } +} diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index 23fad260f..9782a0c00 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -1,5 +1,6 @@ package com.engine.salary.wrapper; +import cn.hutool.core.collection.CollUtil; import com.cloudstore.dev.api.util.Util_DataCache; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; @@ -10,6 +11,7 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.employeedeclare.bo.EmployeeDeclareList; import com.engine.salary.entity.employeedeclare.dto.*; import com.engine.salary.entity.employeedeclare.param.*; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareOptPO; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -79,6 +81,11 @@ public class EmployeeDeclareWrapper extends Service { return ServiceUtil.getService(EmployeeDeclareExcelServiceImpl.class, user); } + private EmployeeDeclareOptService getEmployeeDeclareOptService(User user) { + return ServiceUtil.getService(EmployeeDeclareOptServiceImpl.class, user); + } + + /** * 人员报送的个税扣缴义务人列表 * @@ -93,14 +100,53 @@ public class EmployeeDeclareWrapper extends Service { if (StringUtils.isNotEmpty(queryParam.getTaxAgentName())) { taxAgents = taxAgents.stream().filter(e -> StringUtils.contains(e.getName(), queryParam.getTaxAgentName())).collect(Collectors.toList()); } + + //查询操作状态 + List lastOperates = queryParam.getLastOperates(); + List statuses = queryParam.getStatuses(); + EmployeeDeclareOptPO declareOptPO = EmployeeDeclareOptPO.builder() + .taxAgentIds(SalaryEntityUtil.properties(taxAgents, TaxAgentPO::getId)) + .lastOperates(lastOperates) + .statuses(statuses) + .build(); + List employeeDeclareOptPOS = getEmployeeDeclareOptService(user).listSome(declareOptPO); + Map longEmployeeDeclareOptPOMap = SalaryEntityUtil.convert2Map(employeeDeclareOptPOS, EmployeeDeclareOptPO::getTaxAgentId); + + // 分页 List dtoList = Lists.newArrayList(); for (TaxAgentPO taxAgent : taxAgents) { + EmployeeDeclareOptPO optPO = longEmployeeDeclareOptPOMap.get(taxAgent.getId()); + + optPO = optPO == null ? new EmployeeDeclareOptPO() : optPO; + Date taxCycle = optPO.getTaxCycle(); + EmployeeDeclareInfoDTO declareInfo = getDeclareInfo(EmployeeDeclareParam.builder().taxAgentId(taxAgent.getId()).taxCycle(taxCycle).build()); + String status; + if (declareInfo.getNotDeclareSize() > 0) { + status = DeclareStatusEnum.NOT_DECLARE.getDefaultLabel(); + } else if (declareInfo.getDeclareFailSize() > 0) { + status = DeclareStatusEnum.DECLARE_FAIL.getDefaultLabel(); + } else { + status = DeclareStatusEnum.DECLARE_SUCCESS.getDefaultLabel(); + } + TaxAgentDeclareListDTO dto = TaxAgentDeclareListDTO.builder() .id(taxAgent.getId()) .taxAgentName(taxAgent.getName()) + .status(status) + .lastOperate(DeclareOptEnum.getByValue(optPO.getLastOperate()).getDefaultLabel()) + .lastOperateTime(optPO.getLastOperateTime()) .opts(Sets.newHashSet("admin")) .build(); + + //如果根据报送状态和最后操作功能筛选,则过滤掉没有查询到操作记录的数据 + if (CollUtil.isNotEmpty(lastOperates) && !lastOperates.contains(optPO.getLastOperate())) { + continue; + } + if (CollUtil.isNotEmpty(statuses) && !statuses.contains(status)) { + continue; + } + dtoList.add(dto); } return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), dtoList, TaxAgentDeclareListDTO.class); @@ -468,6 +514,12 @@ public class EmployeeDeclareWrapper extends Service { fail++; } finally { } + EmployeeDeclareOptPO po = EmployeeDeclareOptPO.builder() + .taxAgentId(taxAgentId) + .taxCycle(param.getTaxCycle()) + .lastOperate(DeclareOptEnum.BAT_REFRESH.getValue()) + .build(); + getEmployeeDeclareOptService(user).record(po); } return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; } @@ -533,6 +585,12 @@ public class EmployeeDeclareWrapper extends Service { fail++; } finally { } + EmployeeDeclareOptPO po = EmployeeDeclareOptPO.builder() + .taxAgentId(taxAgentId) + .taxCycle(param.getTaxCycle()) + .lastOperate(DeclareOptEnum.BAT_DECLARE.getValue()) + .build(); + getEmployeeDeclareOptService(user).record(po); } return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; } @@ -585,7 +643,7 @@ public class EmployeeDeclareWrapper extends Service { .setStatus(true) .setFinish(false) .setMsg(""); - getEmployeeDeclareService(user).getDeclareFeedback(param,employeeDeclareRate); + getEmployeeDeclareService(user).getDeclareFeedback(param, employeeDeclareRate); success++; } catch (Exception e) { log.error("获取报送结果反馈失败:{}", e.getMessage(), e); @@ -593,6 +651,13 @@ public class EmployeeDeclareWrapper extends Service { fail++; } finally { } + + EmployeeDeclareOptPO po = EmployeeDeclareOptPO.builder() + .taxAgentId(taxAgentId) + .taxCycle(param.getTaxCycle()) + .lastOperate(DeclareOptEnum.BAT_DECLARE_FEEDBACK.getValue()) + .build(); + getEmployeeDeclareOptService(user).record(po); } return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; } From 41fc2d5c13080a6f7ebd6bb47e193c9d30134593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 24 Sep 2025 16:14:06 +0800 Subject: [PATCH 38/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/EmployeeDeclareOptServiceImpl.java | 2 ++ .../salary/wrapper/EmployeeDeclareWrapper.java | 15 +++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java index 1f45587f5..15ac91be2 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java @@ -42,6 +42,7 @@ public class EmployeeDeclareOptServiceImpl extends Service implements EmployeeDe po = EmployeeDeclareOptPO.builder() .id(IdGenerator.generate()) .taxAgentId(taxAgentId) + .taxCycle(po.getTaxCycle()) .status(po.getStatus()) .lastOperate(po.getLastOperate()) .lastOperateTime(now) @@ -53,6 +54,7 @@ public class EmployeeDeclareOptServiceImpl extends Service implements EmployeeDe .build(); getEmployeeDeclareOptMapper().insertIgnoreNull(po); }else { + po.setTaxCycle(po.getTaxCycle()); optPO.setStatus(po.getStatus()); optPO.setLastOperate(po.getLastOperate()); optPO.setLastOperateTime(now); diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index 9782a0c00..3774e431d 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -39,6 +39,7 @@ import com.weaver.util.threadPool.entity.LocalRunnable; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import weaver.general.Util; import weaver.hrm.User; import java.util.*; @@ -106,8 +107,6 @@ public class EmployeeDeclareWrapper extends Service { List statuses = queryParam.getStatuses(); EmployeeDeclareOptPO declareOptPO = EmployeeDeclareOptPO.builder() .taxAgentIds(SalaryEntityUtil.properties(taxAgents, TaxAgentPO::getId)) - .lastOperates(lastOperates) - .statuses(statuses) .build(); List employeeDeclareOptPOS = getEmployeeDeclareOptService(user).listSome(declareOptPO); Map longEmployeeDeclareOptPOMap = SalaryEntityUtil.convert2Map(employeeDeclareOptPOS, EmployeeDeclareOptPO::getTaxAgentId); @@ -121,19 +120,19 @@ public class EmployeeDeclareWrapper extends Service { optPO = optPO == null ? new EmployeeDeclareOptPO() : optPO; Date taxCycle = optPO.getTaxCycle(); EmployeeDeclareInfoDTO declareInfo = getDeclareInfo(EmployeeDeclareParam.builder().taxAgentId(taxAgent.getId()).taxCycle(taxCycle).build()); - String status; + DeclareStatusEnum status; if (declareInfo.getNotDeclareSize() > 0) { - status = DeclareStatusEnum.NOT_DECLARE.getDefaultLabel(); + status = DeclareStatusEnum.NOT_DECLARE; } else if (declareInfo.getDeclareFailSize() > 0) { - status = DeclareStatusEnum.DECLARE_FAIL.getDefaultLabel(); + status = DeclareStatusEnum.DECLARE_FAIL; } else { - status = DeclareStatusEnum.DECLARE_SUCCESS.getDefaultLabel(); + status = DeclareStatusEnum.DECLARE_SUCCESS; } TaxAgentDeclareListDTO dto = TaxAgentDeclareListDTO.builder() .id(taxAgent.getId()) .taxAgentName(taxAgent.getName()) - .status(status) + .status(status.getDefaultLabel()) .lastOperate(DeclareOptEnum.getByValue(optPO.getLastOperate()).getDefaultLabel()) .lastOperateTime(optPO.getLastOperateTime()) .opts(Sets.newHashSet("admin")) @@ -143,7 +142,7 @@ public class EmployeeDeclareWrapper extends Service { if (CollUtil.isNotEmpty(lastOperates) && !lastOperates.contains(optPO.getLastOperate())) { continue; } - if (CollUtil.isNotEmpty(statuses) && !statuses.contains(status)) { + if (CollUtil.isNotEmpty(statuses) && !statuses.contains(Util.null2String(status.getValue()))) { continue; } From f3f2eca6091e0da1bc55c44fa74d1747edcb3022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 24 Sep 2025 16:53:56 +0800 Subject: [PATCH 39/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E9=9C=80=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EmployeeDeclareOptMapper.xml | 2 +- .../impl/EmployeeDeclareOptServiceImpl.java | 1 + .../wrapper/TaxDeclareRecordWrapper.java | 62 +++++++++++++------ 3 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml index 78049ea4a..d138a97d7 100644 --- a/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml +++ b/src/com/engine/salary/mapper/employeedeclare/EmployeeDeclareOptMapper.xml @@ -272,7 +272,7 @@ SELECT FROM hrsa_employee_declare_opt t - WHERE id = #{taxAgentId} AND delete_type = 0 + WHERE tax_agent_id = #{taxAgentId} AND delete_type = 0 \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java index 15ac91be2..f82182e85 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareOptServiceImpl.java @@ -58,6 +58,7 @@ public class EmployeeDeclareOptServiceImpl extends Service implements EmployeeDe optPO.setStatus(po.getStatus()); optPO.setLastOperate(po.getLastOperate()); optPO.setLastOperateTime(now); + optPO.setUpdateTime(now); getEmployeeDeclareOptMapper().updateIgnoreNull(optPO); } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index f175ece2c..a1fa051e4 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -417,26 +417,50 @@ public class TaxDeclareRecordWrapper extends Service { } public String batSave(TaxDeclarationSaveParam param) { - List taxAgentIds = param.getTaxAgentIds(); - int success = 0; - int fail = 0; - StringBuilder msg = new StringBuilder(); - for (Long taxAgentId : taxAgentIds) { - try { - param.setTaxAgentId(taxAgentId); - getTaxDeclareRecordService(user).save(param); - success++; - } catch (SalaryRunTimeException e) { - msg.append(e.getMessage()).append(";"); - fail++; - } catch (Exception e) { - log.error("个税申报表生成报错:{}", e.getMessage(), e); - msg.append(e.getMessage()).append(";"); - fail++; - } finally { + +// return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + + + TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true) + .setIndex(Util.null2String(IdGenerator.generate())) + .setMsg(SalaryI18nUtil.getI18nLabel(95836, "生成申报表")); + getSalaryCacheService(user).set(SalaryCacheKey.TAX_DECLARATION + taxDeclarationRate.getIndex(), taxDeclarationRate); + LocalRunnable localRunnable = new LocalRunnable() { + @Override + public void execute() { + try { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + try { + param.setTaxAgentId(taxAgentId); + getTaxDeclareRecordService(user).save(param); + success++; + } catch (SalaryRunTimeException e) { + msg.append(e.getMessage()).append(";"); + fail++; + } catch (Exception e) { + log.error("个税申报表生成报错:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + } + taxDeclarationRate.setStatus(fail==0).setFinish(true).setMsg(msg.toString()); + } catch (SalaryRunTimeException e) { + taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); + } catch (Exception e) { + log.error("个税申报表生成报错:{}", e.getMessage(), e); + taxDeclarationRate.setStatus(false).setFinish(true).setMsg(SalaryI18nUtil.getI18nLabel(187276, "个税申报表生成报错:") + e.getMessage()); + } finally { + getSalaryCacheService(user).set(SalaryCacheKey.TAX_DECLARATION + taxDeclarationRate.getIndex(), taxDeclarationRate); + } } - } - return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + }; + ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "saveTaxDeclaration", localRunnable); + return taxDeclarationRate.getIndex(); } /** From d0e7f7ed8c7b121ca78da82ad953b6f958ea9e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 24 Sep 2025 16:59:50 +0800 Subject: [PATCH 40/84] =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=8A=A5=E9=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wrapper/EmployeeDeclareWrapper.java | 8 +-- .../wrapper/TaxDeclareRecordWrapper.java | 58 +++++++++++++------ 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index 6c1e31ee8..b7956987e 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -477,7 +477,7 @@ public class EmployeeDeclareWrapper extends Service { } finally { } } - return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + return String.format("成功:" + success + "个,失败:" + fail + "个%", fail == 0 ? "" : ",失败原因:" + msg); } /** @@ -542,7 +542,7 @@ public class EmployeeDeclareWrapper extends Service { } finally { } } - return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + return String.format("成功:" + success + "个,失败:" + fail + "个%", fail == 0 ? "" : ",失败原因:" + msg); } /** @@ -593,7 +593,7 @@ public class EmployeeDeclareWrapper extends Service { .setStatus(true) .setFinish(false) .setMsg(""); - getEmployeeDeclareService(user).getDeclareFeedback(param,employeeDeclareRate); + getEmployeeDeclareService(user).getDeclareFeedback(param, employeeDeclareRate); success++; } catch (Exception e) { log.error("获取报送结果反馈失败:{}", e.getMessage(), e); @@ -602,7 +602,7 @@ public class EmployeeDeclareWrapper extends Service { } finally { } } - return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + return String.format("成功:" + success + "个,失败:" + fail + "个%", fail == 0 ? "" : ",失败原因:" + msg); } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index f175ece2c..1662cab30 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -417,26 +417,46 @@ public class TaxDeclareRecordWrapper extends Service { } public String batSave(TaxDeclarationSaveParam param) { - List taxAgentIds = param.getTaxAgentIds(); - int success = 0; - int fail = 0; - StringBuilder msg = new StringBuilder(); - for (Long taxAgentId : taxAgentIds) { - try { - param.setTaxAgentId(taxAgentId); - getTaxDeclareRecordService(user).save(param); - success++; - } catch (SalaryRunTimeException e) { - msg.append(e.getMessage()).append(";"); - fail++; - } catch (Exception e) { - log.error("个税申报表生成报错:{}", e.getMessage(), e); - msg.append(e.getMessage()).append(";"); - fail++; - } finally { + TaxDeclarationRateDTO taxDeclarationRate = new TaxDeclarationRateDTO().setStatus(true) + .setIndex(Util.null2String(IdGenerator.generate())) + .setMsg(SalaryI18nUtil.getI18nLabel(95836, "生成申报表")); + getSalaryCacheService(user).set(SalaryCacheKey.TAX_DECLARATION + taxDeclarationRate.getIndex(), taxDeclarationRate); + LocalRunnable localRunnable = new LocalRunnable() { + @Override + public void execute() { + try { + List taxAgentIds = param.getTaxAgentIds(); + int success = 0; + int fail = 0; + StringBuilder msg = new StringBuilder(); + for (Long taxAgentId : taxAgentIds) { + try { + param.setTaxAgentId(taxAgentId); + getTaxDeclareRecordService(user).save(param); + success++; + } catch (SalaryRunTimeException e) { + msg.append(e.getMessage()).append(";"); + fail++; + } catch (Exception e) { + log.error("个税申报表生成报错:{}", e.getMessage(), e); + msg.append(e.getMessage()).append(";"); + fail++; + } finally { + } + } + taxDeclarationRate.setStatus(fail==0).setFinish(true).setMsg(msg.toString()); + } catch (SalaryRunTimeException e) { + taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); + } catch (Exception e) { + log.error("个税申报表生成报错:{}", e.getMessage(), e); + taxDeclarationRate.setStatus(false).setFinish(true).setMsg(SalaryI18nUtil.getI18nLabel(187276, "个税申报表生成报错:") + e.getMessage()); + } finally { + getSalaryCacheService(user).set(SalaryCacheKey.TAX_DECLARATION + taxDeclarationRate.getIndex(), taxDeclarationRate); + } } - } - return "成功:" + success + "个,失败:" + fail + "个,失败原因:" + msg; + }; + ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "saveTaxDeclaration", localRunnable); + return taxDeclarationRate.getIndex(); } /** From ae43dbbe0414d0827c7d05eed827ea57f383c3b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 25 Sep 2025 11:02:46 +0800 Subject: [PATCH 41/84] =?UTF-8?q?=E4=BA=BA=E5=91=98=E6=8A=A5=E9=80=81?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java index b7956987e..d251f51dc 100644 --- a/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java +++ b/src/com/engine/salary/wrapper/EmployeeDeclareWrapper.java @@ -477,7 +477,7 @@ public class EmployeeDeclareWrapper extends Service { } finally { } } - return String.format("成功:" + success + "个,失败:" + fail + "个%", fail == 0 ? "" : ",失败原因:" + msg); + return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); } /** @@ -542,7 +542,7 @@ public class EmployeeDeclareWrapper extends Service { } finally { } } - return String.format("成功:" + success + "个,失败:" + fail + "个%", fail == 0 ? "" : ",失败原因:" + msg); + return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); } /** @@ -602,7 +602,7 @@ public class EmployeeDeclareWrapper extends Service { } finally { } } - return String.format("成功:" + success + "个,失败:" + fail + "个%", fail == 0 ? "" : ",失败原因:" + msg); + return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); } From 0964dcd9ca44771b0d4e3888a79fc243c8a5bfa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 25 Sep 2025 11:15:35 +0800 Subject: [PATCH 42/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E6=9C=AA=E6=8A=A5?= =?UTF-8?q?=E9=80=81=E4=BA=BA=E5=91=98log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctEmployeeServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index fec3890f1..8ea487cc1 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -17,8 +17,8 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; -import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.param.SalarySobQueryParam; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -32,7 +32,6 @@ import com.engine.salary.mapper.salarysob.SobTaxLinkMapper; import com.engine.salary.mapper.sys.SalarySysConfMapper; import com.engine.salary.report.entity.param.SalaryStatisticsReportDataQueryParam; import com.engine.salary.service.*; -import com.engine.salary.sys.constant.SalarySysConstant; import com.engine.salary.service.auth.AuthService; import com.engine.salary.service.auth.AuthServiceImpl; import com.engine.salary.sys.constant.SalarySysConstant; @@ -877,7 +876,9 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct queryParam.setTaxCycle(recordPO.getTaxCycle()); queryParam.setTaxAgentId(sobPO.getTaxAgentId()); + log.info("查询参数:{}", queryParam); List list = getSalaryAcctEmployeeMapper().listPage4NotDeclareByParam(queryParam); + log.info("查询结果:{}", list); return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, AbnormalEmployeeListDTO.class); } From e3d6cbe5a15c9c1d70ecfb94a5925234fc14c8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 30 Sep 2025 16:40:20 +0800 Subject: [PATCH 43/84] =?UTF-8?q?=E6=89=B9=E9=87=8F=E9=94=81=E5=AE=9A?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctResultServiceImpl.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 77a091911..26433f489 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.collection.CollUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; @@ -1052,7 +1053,14 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe @Override public void updateLockStatusByParam(SalaryAcctResultUpdateLockStatusParam updateParam) { - List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(updateParam.getSalaryAcctRecordId()); + Set acctEmpIds = updateParam.getAcctEmpIds(); + List salaryAcctEmployees; + if (CollUtil.isNotEmpty(acctEmpIds)) { + salaryAcctEmployees = getSalaryAcctEmployeeService(user).listByIds(acctEmpIds); + } else { + salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(updateParam.getSalaryAcctRecordId()); + } + if (CollectionUtils.isEmpty(salaryAcctEmployees)) { return; } From 0adfa422a4c7fd917901eb1d2898a1e73fcc176f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 13 Oct 2025 13:47:55 +0800 Subject: [PATCH 44/84] =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/prop/hrmSalary.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index c558fd72d..f3380b545 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=3.0.2.2504.04 +version=3.0.2.2510.01 openFormulaForcedEditing=false \ No newline at end of file From 014cdd761830558589aa26d69d221970c6aaea18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 17 Oct 2025 17:29:31 +0800 Subject: [PATCH 45/84] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9C=89=E5=BA=8Fmap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/util/SalaryEntityUtil.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/engine/salary/util/SalaryEntityUtil.java b/src/com/engine/salary/util/SalaryEntityUtil.java index 0b2a6d474..03cc7c8df 100644 --- a/src/com/engine/salary/util/SalaryEntityUtil.java +++ b/src/com/engine/salary/util/SalaryEntityUtil.java @@ -135,6 +135,15 @@ public class SalaryEntityUtil { .collect(Collectors.toMap(keyMapper, valueMapper, (a, b) -> a)); } + public static Map convert2LinkedMap(Collection objs, Function keyMapper, Function valueMapper) { + if (CollectionUtils.isEmpty(objs)) { + return Maps.newHashMap(); + } + return objs.stream() + .filter(e -> valueMapper.apply(e) != null && keyMapper.apply(e) != null) + .collect(Collectors.toMap(keyMapper, valueMapper, (a, b) -> a, LinkedHashMap::new)); + } + public static Map> group2Map(Collection objs, Function function) { if (CollectionUtils.isEmpty(objs)) { return Maps.newHashMap(); From 953a590cca2ed0cb16303e8152881e44f216f4d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 21 Oct 2025 16:55:42 +0800 Subject: [PATCH 46/84] =?UTF-8?q?=E5=B8=B8=E7=94=A8sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/人员生成不了档案.sql | 2 +- resource/wiki/删除档案.txt | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/resource/wiki/人员生成不了档案.sql b/resource/wiki/人员生成不了档案.sql index 7060a660e..1ddc0e7e4 100644 --- a/resource/wiki/人员生成不了档案.sql +++ b/resource/wiki/人员生成不了档案.sql @@ -6,5 +6,5 @@ and employee_id not in where tax_agent_id =扣缴义务人id and delete_type = 0) -update hrsa_tax_agent_emp set delete_type = 3 +update hrsa_tax_agent_emp set delete_type = 3 where delete_type = 0 where tax_agent_id=扣缴义务人id and delete_type = 0 and employee_id not in (select employee_id from hrsa_salary_archive where tax_agent_id =扣缴义务人id and delete_type = 0) \ No newline at end of file diff --git a/resource/wiki/删除档案.txt b/resource/wiki/删除档案.txt index a3a0c6dbd..22d1976b0 100644 --- a/resource/wiki/删除档案.txt +++ b/resource/wiki/删除档案.txt @@ -18,7 +18,8 @@ update hrsa_salary_archive set delete_type=3 where tax_agent_id=扣缴义务人 二、删除停薪员工档案 -update hrsa_salary_archive set delete_type=3 where run_status in ('STOP_FROM_PENDING','STOP_FROM_SUSPEND') +update hrsa_salary_archive set delete_type=3 where delete_type=0 and run_status in ('STOP_FROM_PENDING','STOP_FROM_SUSPEND') +update hrsa_salary_archive_item set delete_type=3 where delete_type=0 二、删除停薪员工社保档案 update hrsa_insurance_base_info set delete_type=3 where run_status in ('4','5') @@ -28,10 +29,10 @@ update hrsa_insurance_base_info set delete_type=3 where run_status in ('4','5') --删除社保福利档案 -update hrsa_insurance_base_info set delete_type=3 WHERE employee_id = ? and payment_organization =? -update hrsa_social_archives set delete_type=3 WHERE employee_id = ? and payment_organization =? -update hrsa_fund_archives set delete_type=3 WHERE employee_id = ? and payment_organization =? -update hrsa_other_archives set delete_type=3 WHERE employee_id = ? and payment_organization =? +update hrsa_insurance_base_info set delete_type=3 WHERE delete_type=0 and employee_id = ? and payment_organization =? +update hrsa_social_archives set delete_type=3 WHERE delete_type=0 and employee_id = ? and payment_organization =? +update hrsa_fund_archives set delete_type=3 WHERE delete_type=0 and employee_id = ? and payment_organization =? +update hrsa_other_archives set delete_type=3 WHERE delete_type=0 and employee_id = ? and payment_organization =? -- 删除薪资档案 update hrsa_salary_archive set delete_type=3 where employee_id = ? and tax_agent_id=? @@ -45,4 +46,11 @@ update hrsa_other_archives set delete_type=3; update hrsa_tax_agent_emp set delete_type=3; +-- 删除核算记录和工资单信息 +update hrsa_salary_acct_record set delete_type=3 where delete_type=0; +update hrsa_salary_acct_emp set delete_type=3 where delete_type=0; +update hrsa_salary_acct_result set delete_type=3 where delete_type=0; +update hrsa_salary_send set delete_type=3 where delete_type=0; +update hrsa_salary_send_info set delete_type=3 where delete_type=0; + From a74227f12afd74273ef9e488bd67476ecb6b2138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 23 Oct 2025 10:44:50 +0800 Subject: [PATCH 47/84] =?UTF-8?q?action=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/action/CheckEditSIArchiveAction.java | 2 ++ src/com/engine/salary/action/CheckEditSalaryAction.java | 1 + src/com/engine/salary/action/CheckInitSalaryAction.java | 2 +- .../engine/salary/action/CheckStayAddToPaySIArchiveAction.java | 1 + .../engine/salary/action/CheckStayDelToStopSIArchiveAction.java | 1 + src/com/engine/salary/action/CheckStopSalaryAction.java | 1 + src/com/engine/salary/action/CopyToPaySIArchiveAction.java | 1 + src/com/engine/salary/action/EditSIArchiveAction.java | 1 + src/com/engine/salary/action/EditSalaryAction.java | 2 +- src/com/engine/salary/action/EditToPaySIArchiveAction.java | 1 + src/com/engine/salary/action/EditToStopSIArchiveAction.java | 1 + src/com/engine/salary/action/InitSalaryAction.java | 2 +- src/com/engine/salary/action/RehireAction.java | 1 + src/com/engine/salary/action/StayAddToPaySIArchiveAction.java | 1 + src/com/engine/salary/action/StayDelToStopSIArchiveAction.java | 1 + src/com/engine/salary/action/StopSalaryAction.java | 1 + src/com/engine/salary/action/UpdateSISchemeDetailAction.java | 1 + 17 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/action/CheckEditSIArchiveAction.java b/src/com/engine/salary/action/CheckEditSIArchiveAction.java index 2a0bbccb7..ed494aebe 100644 --- a/src/com/engine/salary/action/CheckEditSIArchiveAction.java +++ b/src/com/engine/salary/action/CheckEditSIArchiveAction.java @@ -80,6 +80,8 @@ public class CheckEditSIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, CheckEditSIArchiveAction.SalaryField::getSalaryName, CheckEditSIArchiveAction.SalaryField::getValue)); + log.info("CheckEditSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); + //福利执行状态 String runStatus = list.stream().filter(f -> f.salaryName.equals("档案状态")).findFirst().map(CheckEditSIArchiveAction.SalaryField::getValue).orElse("1"); diff --git a/src/com/engine/salary/action/CheckEditSalaryAction.java b/src/com/engine/salary/action/CheckEditSalaryAction.java index f8c2dcb75..8534d665a 100644 --- a/src/com/engine/salary/action/CheckEditSalaryAction.java +++ b/src/com/engine/salary/action/CheckEditSalaryAction.java @@ -78,6 +78,7 @@ public class CheckEditSalaryAction implements Action { List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue)); + log.info("CheckEditSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() .importDatas(importData) .build(); diff --git a/src/com/engine/salary/action/CheckInitSalaryAction.java b/src/com/engine/salary/action/CheckInitSalaryAction.java index 157ecab8a..b744167dc 100644 --- a/src/com/engine/salary/action/CheckInitSalaryAction.java +++ b/src/com/engine/salary/action/CheckInitSalaryAction.java @@ -98,7 +98,7 @@ public class CheckInitSalaryAction implements Action { list.add(new SalaryField(processField, salaryName, value)); } Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - + log.info("CheckInitSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); return doSalaryArchiveInit(requestInfo, importDataMap); } catch (Exception e) { log.error("定薪检查异常", e); diff --git a/src/com/engine/salary/action/CheckStayAddToPaySIArchiveAction.java b/src/com/engine/salary/action/CheckStayAddToPaySIArchiveAction.java index 6adfa8299..37ba3b7a0 100644 --- a/src/com/engine/salary/action/CheckStayAddToPaySIArchiveAction.java +++ b/src/com/engine/salary/action/CheckStayAddToPaySIArchiveAction.java @@ -89,6 +89,7 @@ public class CheckStayAddToPaySIArchiveAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, CheckStayAddToPaySIArchiveAction.SalaryField::getSalaryName, CheckStayAddToPaySIArchiveAction.SalaryField::getValue); + log.info("CheckStayAddToPaySIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/CheckStayDelToStopSIArchiveAction.java b/src/com/engine/salary/action/CheckStayDelToStopSIArchiveAction.java index ef816fbd8..f467c0bbe 100644 --- a/src/com/engine/salary/action/CheckStayDelToStopSIArchiveAction.java +++ b/src/com/engine/salary/action/CheckStayDelToStopSIArchiveAction.java @@ -88,6 +88,7 @@ public class CheckStayDelToStopSIArchiveAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, CheckStayDelToStopSIArchiveAction.SalaryField::getSalaryName, CheckStayDelToStopSIArchiveAction.SalaryField::getValue); + log.info("CheckStayDelToStopSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/CheckStopSalaryAction.java b/src/com/engine/salary/action/CheckStopSalaryAction.java index 6243e6ed5..da42be210 100644 --- a/src/com/engine/salary/action/CheckStopSalaryAction.java +++ b/src/com/engine/salary/action/CheckStopSalaryAction.java @@ -92,6 +92,7 @@ public class CheckStopSalaryAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, CheckStopSalaryAction.SalaryField::getSalaryName, CheckStopSalaryAction.SalaryField::getValue); + log.info("CheckStopSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/CopyToPaySIArchiveAction.java b/src/com/engine/salary/action/CopyToPaySIArchiveAction.java index 8f0421c71..3de1dd620 100644 --- a/src/com/engine/salary/action/CopyToPaySIArchiveAction.java +++ b/src/com/engine/salary/action/CopyToPaySIArchiveAction.java @@ -88,6 +88,7 @@ public class CopyToPaySIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, CopyToPaySIArchiveAction.SalaryField::getSalaryName, CopyToPaySIArchiveAction.SalaryField::getValue)); + log.info("CopyToPaySIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); //操作人 String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(CopyToPaySIArchiveAction.SalaryField::getValue).orElse("1"); //增员 diff --git a/src/com/engine/salary/action/EditSIArchiveAction.java b/src/com/engine/salary/action/EditSIArchiveAction.java index 4cb6eb505..d29b4eac3 100644 --- a/src/com/engine/salary/action/EditSIArchiveAction.java +++ b/src/com/engine/salary/action/EditSIArchiveAction.java @@ -79,6 +79,7 @@ public class EditSIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, EditSIArchiveAction.SalaryField::getSalaryName, EditSIArchiveAction.SalaryField::getValue)); + log.info("EditSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); //福利执行状态 String runStatus = list.stream().filter(f -> f.salaryName.equals("档案状态")).findFirst().map(EditSIArchiveAction.SalaryField::getValue).orElse("1"); diff --git a/src/com/engine/salary/action/EditSalaryAction.java b/src/com/engine/salary/action/EditSalaryAction.java index 3c8dd5446..b4be034b7 100644 --- a/src/com/engine/salary/action/EditSalaryAction.java +++ b/src/com/engine/salary/action/EditSalaryAction.java @@ -77,7 +77,7 @@ public class EditSalaryAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue)); - + log.info("EditSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() .importDatas(importData) .build(); diff --git a/src/com/engine/salary/action/EditToPaySIArchiveAction.java b/src/com/engine/salary/action/EditToPaySIArchiveAction.java index 31259e94a..4a68f0111 100644 --- a/src/com/engine/salary/action/EditToPaySIArchiveAction.java +++ b/src/com/engine/salary/action/EditToPaySIArchiveAction.java @@ -97,6 +97,7 @@ public class EditToPaySIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, EditToPaySIArchiveAction.SalaryField::getSalaryName, EditToPaySIArchiveAction.SalaryField::getValue)); + log.info("EditToPaySIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); //福利执行状态 String runStatus = EmployeeStatusEnum.STAY_ADD.getValue(); diff --git a/src/com/engine/salary/action/EditToStopSIArchiveAction.java b/src/com/engine/salary/action/EditToStopSIArchiveAction.java index 1f2a612fd..599548cef 100644 --- a/src/com/engine/salary/action/EditToStopSIArchiveAction.java +++ b/src/com/engine/salary/action/EditToStopSIArchiveAction.java @@ -97,6 +97,7 @@ public class EditToStopSIArchiveAction implements Action { } List> importData = new ArrayList<>(); importData.add(SalaryEntityUtil.convert2Map(list, EditToStopSIArchiveAction.SalaryField::getSalaryName, EditToStopSIArchiveAction.SalaryField::getValue)); + log.info("EditToStopSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importData); //福利执行状态 String runStatus = EmployeeStatusEnum.PAYING.getValue(); diff --git a/src/com/engine/salary/action/InitSalaryAction.java b/src/com/engine/salary/action/InitSalaryAction.java index af3ab875e..3600eb506 100644 --- a/src/com/engine/salary/action/InitSalaryAction.java +++ b/src/com/engine/salary/action/InitSalaryAction.java @@ -100,7 +100,7 @@ public class InitSalaryAction implements Action { } Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - + log.info("InitSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); return doSalaryArchiveInit(requestInfo, importDataMap); } catch (Exception e) { log.error("定薪异常", e); diff --git a/src/com/engine/salary/action/RehireAction.java b/src/com/engine/salary/action/RehireAction.java index f0ac107f3..772d6ae9e 100644 --- a/src/com/engine/salary/action/RehireAction.java +++ b/src/com/engine/salary/action/RehireAction.java @@ -108,6 +108,7 @@ public class RehireAction implements Action { list.add(new SalaryField(processField, salaryName, value)); } Map salaryFieldMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); + log.info("RehireAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), salaryFieldMap); String taxAgentName = salaryFieldMap.getOrDefault("个税扣缴义务人", "").toString(); String empIdStr = salaryFieldMap.getOrDefault("员工id", "").toString(); if (StringUtils.isBlank(taxAgentName) || StringUtils.isBlank(empIdStr)) { diff --git a/src/com/engine/salary/action/StayAddToPaySIArchiveAction.java b/src/com/engine/salary/action/StayAddToPaySIArchiveAction.java index 371bdd8ee..8de687242 100644 --- a/src/com/engine/salary/action/StayAddToPaySIArchiveAction.java +++ b/src/com/engine/salary/action/StayAddToPaySIArchiveAction.java @@ -93,6 +93,7 @@ public class StayAddToPaySIArchiveAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, StayAddToPaySIArchiveAction.SalaryField::getSalaryName, StayAddToPaySIArchiveAction.SalaryField::getValue); + log.info("StayAddToPaySIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/StayDelToStopSIArchiveAction.java b/src/com/engine/salary/action/StayDelToStopSIArchiveAction.java index b715b9eea..25ce39614 100644 --- a/src/com/engine/salary/action/StayDelToStopSIArchiveAction.java +++ b/src/com/engine/salary/action/StayDelToStopSIArchiveAction.java @@ -94,6 +94,7 @@ public class StayDelToStopSIArchiveAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, StayDelToStopSIArchiveAction.SalaryField::getSalaryName, StayDelToStopSIArchiveAction.SalaryField::getValue); + log.info("StayDelToStopSIArchiveAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); List taxAgentPOS = getTaxAgentMapper().listByName(taxAgentName); if(CollectionUtils.isEmpty(taxAgentPOS)){ diff --git a/src/com/engine/salary/action/StopSalaryAction.java b/src/com/engine/salary/action/StopSalaryAction.java index 10d4d765a..9d564816b 100644 --- a/src/com/engine/salary/action/StopSalaryAction.java +++ b/src/com/engine/salary/action/StopSalaryAction.java @@ -99,6 +99,7 @@ public class StopSalaryAction implements Action { } // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, StopSalaryAction.SalaryField::getSalaryName, StopSalaryAction.SalaryField::getValue); + log.info("StopSalaryAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); //操作人 String uid = importDataMap.getOrDefault("操作人","1").toString(); User user = new User(Integer.parseInt(uid)); diff --git a/src/com/engine/salary/action/UpdateSISchemeDetailAction.java b/src/com/engine/salary/action/UpdateSISchemeDetailAction.java index 91c93c377..57a947a02 100644 --- a/src/com/engine/salary/action/UpdateSISchemeDetailAction.java +++ b/src/com/engine/salary/action/UpdateSISchemeDetailAction.java @@ -117,6 +117,7 @@ public class UpdateSISchemeDetailAction implements Action { rs.beforFirst(); // 流程数据 Map importDataMap = SalaryEntityUtil.convert2Map(list, UpdateSISchemeDetailAction.SalaryField::getSalaryName, UpdateSISchemeDetailAction.SalaryField::getValue); + log.info("UpdateSISchemeDetailAction,tableName :{},workflowid:{},流程参数:{}",tableName, requestInfo.getWorkflowid(), importDataMap); //设置更新对象元素 String schemeId = importDataMap.getOrDefault("福利方案id", "").toString(); String schemeName = importDataMap.getOrDefault("福利方案名称", "").toString(); From f1bd47f8b7cf6c7ae6b97419db0b460d22798868 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 27 Oct 2025 11:22:51 +0800 Subject: [PATCH 48/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E5=A4=9A=E6=9D=A1=E4=BB=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctResultServiceImpl.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 26433f489..7f39ec784 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -327,14 +327,25 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isNotEmpty(otherConditions)) { List items = SalaryEntityUtil.properties(otherConditions, SalaryAcctResultQueryParam.OtherCondition::getItemId, Collectors.toList()); List list = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singletonList(queryParam.getSalaryAcctRecordId()), items); - for (int i = 0; i < otherConditions.size(); i++) { - SalaryAcctResultQueryParam.OtherCondition otherCondition = otherConditions.get(i); - Long itemId = otherCondition.getItemId(); - FilterEnum filter = otherCondition.getFilter(); - List params = otherCondition.getParams(); - list = list.stream().filter(a -> Objects.equals(a.getSalaryItemId(), itemId)).filter(a -> filter.filter(params).test(a.getResultValue())).collect(Collectors.toList()); + Map> acctEmpResultsMap = SalaryEntityUtil.group2Map(list, SalaryAcctResultPO::getSalaryAcctEmpId); + Set removeAcctEmpIds = new HashSet<>(); + for (Long acctEmpId : acctEmpResultsMap.keySet()) { + List acctEmpResults = acctEmpResultsMap.get(acctEmpId); + //如果有一个条件不成立就删除 + for (int i = 0; i < otherConditions.size(); i++) { + SalaryAcctResultQueryParam.OtherCondition otherCondition = otherConditions.get(i); + Long itemId = otherCondition.getItemId(); + FilterEnum filter = otherCondition.getFilter(); + List params = otherCondition.getParams(); + for (SalaryAcctResultPO po : acctEmpResults) { + if(Objects.equals(po.getSalaryItemId(), itemId) && !filter.filter(params).test(po.getResultValue())){ + removeAcctEmpIds.add(po.getSalaryAcctEmpId()); + } + } + } } - List salaryAcctEmpId = SalaryEntityUtil.properties(list, SalaryAcctResultPO::getSalaryAcctEmpId, Collectors.toList()); + acctEmpResultsMap.keySet().removeAll(removeAcctEmpIds); + List salaryAcctEmpId = Lists.newArrayList(acctEmpResultsMap.keySet()); if (CollectionUtils.isEmpty(salaryAcctEmpId)) { //条件不满足直接返回空列表 From 49d6f2f13b321b79e233ec711442cb163d1ebcb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 29 Oct 2025 14:02:28 +0800 Subject: [PATCH 49/84] =?UTF-8?q?=E9=92=B1=E6=99=BA-=E8=80=83=E5=8B=A4?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=A0=B9=E6=8D=AE=E6=89=A3=E7=BC=B4=E4=B9=89?= =?UTF-8?q?=E5=8A=A1=E4=BA=BA=E8=BF=87=E6=BB=A4=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datacollection/param/AttendQuoteQueryParam.java | 2 ++ .../salary/service/impl/AttendQuoteServiceImpl.java | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/com/engine/salary/entity/datacollection/param/AttendQuoteQueryParam.java b/src/com/engine/salary/entity/datacollection/param/AttendQuoteQueryParam.java index 117c6bb56..54fecc40d 100644 --- a/src/com/engine/salary/entity/datacollection/param/AttendQuoteQueryParam.java +++ b/src/com/engine/salary/entity/datacollection/param/AttendQuoteQueryParam.java @@ -31,4 +31,6 @@ public class AttendQuoteQueryParam extends BaseQueryParam { //薪资所属月 private List salaryYearMonth; private List salaryYearMonthDate; + + private List taxAgentIds; } diff --git a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java index 5a0e2f28a..90d089c05 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.collection.CollUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.biz.AttendQuoteBiz; @@ -10,6 +11,7 @@ import com.engine.salary.entity.datacollection.dto.AttendQuoteListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteQueryParam; import com.engine.salary.entity.datacollection.po.AttendQuotePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.enums.auth.AuthFilterTypeEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -21,6 +23,7 @@ import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.auth.AuthService; import com.engine.salary.service.auth.AuthServiceImpl; import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalaryLoggerUtil; import com.engine.salary.util.db.MapperProxyFactory; @@ -34,6 +37,7 @@ import java.time.YearMonth; import java.util.Collection; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -74,6 +78,14 @@ public class AttendQuoteServiceImpl extends Service implements AttendQuoteServic List list = getAttendQuoteMapper().list(queryParam); list = getAuthService(user).auth(list, AuthFilterTypeEnum.DATA_OPT, AttendQuoteListDTO.class); + //扣缴义务人搜索 + List taxAgentIds = queryParam.getTaxAgentIds(); + if(CollUtil.isNotEmpty(taxAgentIds)){ + List salarySobPOS = getSalarySobService(user).listByTaxAgentIds(taxAgentIds); + Set sobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); + list = list.stream().filter(e -> sobIds.contains(e.getSalarySobId())).collect(Collectors.toList()); + } + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, AttendQuoteListDTO.class); } From b4994dab3f4f77a3caf271592724596e8d470f8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 29 Oct 2025 15:46:24 +0800 Subject: [PATCH 50/84] =?UTF-8?q?=E5=B8=B8=E7=94=A8sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/删除档案.txt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/resource/wiki/删除档案.txt b/resource/wiki/删除档案.txt index 22d1976b0..a9aab191b 100644 --- a/resource/wiki/删除档案.txt +++ b/resource/wiki/删除档案.txt @@ -46,11 +46,13 @@ update hrsa_other_archives set delete_type=3; update hrsa_tax_agent_emp set delete_type=3; --- 删除核算记录和工资单信息 -update hrsa_salary_acct_record set delete_type=3 where delete_type=0; -update hrsa_salary_acct_emp set delete_type=3 where delete_type=0; -update hrsa_salary_acct_result set delete_type=3 where delete_type=0; -update hrsa_salary_send set delete_type=3 where delete_type=0; -update hrsa_salary_send_info set delete_type=3 where delete_type=0; +-- 删除核算记录 +update hrsa_salary_acct_record set delete_type=3 where delete_type=0 and id= 核算记录id; +update hrsa_salary_acct_emp set delete_type=3 where delete_type=0 and salary_acct_record_id=核算记录id; +update hrsa_salary_acct_result set delete_type=3 where delete_type=0 and salary_acct_record_id = 核算记录id; + +--删除工资单信息 +update hrsa_salary_send set delete_type=3 where delete_type=0 and salary_accounting_id = 核算记录id; +update hrsa_salary_send_info set delete_type=3 where delete_type=0 and salary_acct_record_id = 核算记录id; From 3dd8db37dc12fea3d0d955ea3e18f5f9f54b3e85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 3 Nov 2025 13:35:06 +0800 Subject: [PATCH 51/84] =?UTF-8?q?=E8=B4=A6=E5=A5=97sql=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=E4=BA=BA=E5=91=98=E8=8C=83=E5=9B=B4=E6=8E=A5=E5=85=A5?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryEmployeeServiceImpl.java | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index cf04d1e76..7c0d23b2d 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSON; import com.api.formmode.mybatis.util.SqlProxyHandle; @@ -174,7 +175,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } //外部人员 - if(hasExtEmp){ + if (hasExtEmp) { List salarySobExtRangePOS = getSalarySobExtRangeService(user).listBySalarySobId(salarySobId); if (CollectionUtils.isNotEmpty(salarySobExtRangePOS)) { List ids = SalaryEntityUtil.properties(salarySobExtRangePOS, SalarySobExtRangePO::getTargetId, Collectors.toList()); @@ -418,20 +419,24 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee result.addAll(employBiz.listByVirtualParams(virtualParams)); - List empIds = new ArrayList<>(); - includeQueryParams.stream() - .filter(param -> param.getTargetType().equals(TargetTypeEnum.SQL.name())) - .forEach(param -> { - String sql = param.getTarget(); - RecordSet rs = new RecordSet(); - if (rs.execute(sql)) { - while (rs.next()) { - empIds.add((long) rs.getInt("id")); - } + for (SalarySobRangeEmpQueryParam param:includeQueryParams) { + if(param.getTargetType().equals(TargetTypeEnum.SQL.name())){ + List empIds = new ArrayList<>(); + String sql = param.getTarget(); + RecordSet rs = new RecordSet(); + if (rs.execute(sql)) { + while (rs.next()) { + empIds.add((long) rs.getInt("id")); } - }); - List employees = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds); - result.addAll(employees); + } + if(CollUtil.isNotEmpty(empIds)){ + Collection employeeStatus = param.getEmployeeStatus(); + List employeeByIdsAll = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds); + List collect = employeeByIdsAll.stream().filter(e -> employeeStatus.contains(e.getStatus())).collect(Collectors.toList()); + result.addAll(collect); + } + } + } // 从hrmresource和hrmresourcevirtual可能获取到重复人员数据,需要根据人员id去重 result = result.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparingLong(DataCollectionEmployee::getEmployeeId))), ArrayList::new)); From e6a474261c1dca37fd01ceb7a5552bc8eb9fb51d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 6 Nov 2025 11:27:41 +0800 Subject: [PATCH 52/84] =?UTF-8?q?=E8=A1=A5=E7=BC=B4=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SIAccountServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 4725c5790..62012d45c 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -1736,7 +1736,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // Long taxAgentId = 0L; List list = new ArrayList<>(); - + String username = (String) map.getOrDefault("姓名", ""); String billMonth = (String) map.getOrDefault("账单月份", ""); String taxAgentName = (String) map.getOrDefault("个税扣缴义务人", ""); String supplementaryMonth = (String) map.getOrDefault("补缴月份", ""); @@ -1840,11 +1840,11 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //校验补缴人员是否存在福利档案基础信息,并且runStatus处于正在缴纳或者待减员 InsuranceArchivesBaseInfoPO insuranceBaseInfo = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(paymentOrganization, employeeId); if (insuranceBaseInfo == null || !(insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()) || insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue())) ) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "补缴人员中存在未设置福利档案人员或相关人员不在福利在缴人员中,不可新建补缴信息!")); + throw new SalaryRunTimeException(username + SalaryI18nUtil.getI18nLabel(0, "补缴未设置福利档案人员或不在福利在缴人员中,不可新建补缴信息!")); } List empIdsInPayMonthRange = listCanPayEmpIds(paymentOrganization, billMonth.substring(0, 7)); if (!empIdsInPayMonthRange.contains(employeeId)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99920, "无核算人员")); + throw new SalaryRunTimeException(username + SalaryI18nUtil.getI18nLabel(99920, "无核算人员")); } DataCollectionEmployee employee = getSalaryEmployeeService(user).getEmployeeById(employeeId); // 封装InsuranceAccountDetailPO From 20bd294397eebfa923c9ec41db05b86a6889e376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 12 Nov 2025 14:57:46 +0800 Subject: [PATCH 53/84] =?UTF-8?q?=E8=80=83=E5=8B=A4=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=8C=83=E5=9B=B4100?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/AttendQuoteDataServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 5c5e58bbf..50bd37d53 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -519,7 +519,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa List> attendQuoteSyncData = new ArrayList<>(); Attend4Salary attend4Salary = new Attend4Salary(); try { - int partSize = 500; + int partSize = 100; List> partition = Lists.partition(employeeIds, partSize); for (List part : partition) { attend4Salary.setBeginDate(attendCycleRange.getFromDate()); From 6a061592e5e8a11f2914797ce4d48c4977c92a64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 13 Nov 2025 11:37:46 +0800 Subject: [PATCH 54/84] =?UTF-8?q?=E5=A4=84=E7=90=86pg=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/PG/sql202501150103.sql | 43 +++++++++++----------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/resource/sqlupgrade/PG/sql202501150103.sql b/resource/sqlupgrade/PG/sql202501150103.sql index d62aea72f..3841048c5 100644 --- a/resource/sqlupgrade/PG/sql202501150103.sql +++ b/resource/sqlupgrade/PG/sql202501150103.sql @@ -1,41 +1,42 @@ -CREATE TABLE hrsa_hrm_snapshot ( - ID bigint(0) NOT NULL, +CREATE TABLE hrsa_hrm_snapshot +( + ID bigint NOT NULL, snapshot_time timestamp, - employee_id bigint(0), + employee_id bigint, loginid varchar(100), LASTNAME varchar(60), SEX char(1), BIRTHDAY char(10) , - NATIONALITY int(0) , + NATIONALITY int , MARITALSTATUS char(1) , TELEPHONE varchar(60), MOBILE varchar(60) , MOBILECALL varchar(60) , EMAIL varchar(60), - LOCATIONID int(0), + LOCATIONID int, WORKROOM varchar(60), HOMEADDRESS varchar(100), RESOURCETYPE char(1) , STARTDATE char(10) , ENDDATE char(10), - JOBTITLE int(0) , + JOBTITLE int , JOBTITLENAME varchar(200) , JOBACTIVITYDESC varchar(200), - JOBLEVEL int(0) , - SECLEVEL int(0) , - DEPARTMENTID int(0) , + JOBLEVEL int , + SECLEVEL int , + DEPARTMENTID int , DEPARTMENTNAME varchar(200) , - SUBCOMPANYID1 int(0) , + SUBCOMPANYID1 int , SUBCOMPANYNAME varchar(200) , - COSTCENTERID int(0) , - MANAGERID int(0) , - ASSISTANTID int(0), - BANKID1 int(0) , + COSTCENTERID int , + MANAGERID int , + ASSISTANTID int, + BANKID1 int , ACCOUNTID1 varchar(100) , LASTLOGINDATE char(10) , CERTIFICATENUM varchar(60) , NATIVEPLACE varchar(100) , - EDUCATIONLEVEL int(0) , + EDUCATIONLEVEL int , BEMEMBERDATE char(10) , BEPARTYDATE char(10) , WORKCODE varchar(60) , @@ -44,8 +45,8 @@ CREATE TABLE hrsa_hrm_snapshot ( RESIDENTPLACE varchar(200) , POLICY varchar(30) , DEGREE varchar(30) , - USEKIND int(0) , - JOBCALL int(0) , + USEKIND int , + JOBCALL int , jobcallname varchar(200) , ACCUMFUNDACCOUNT varchar(30), BIRTHPLACE varchar(60) , @@ -54,14 +55,14 @@ CREATE TABLE hrsa_hrm_snapshot ( RESIDENTPOSTCODE varchar(60) , EXTPHONE varchar(50) , MANAGERSTR varchar(500), - STATUS int(0) , + STATUS int , FAX varchar(60) , ISLABOUUNION char(1), TEMPRESIDENTNUMBER varchar(60), PROBATIONENDDATE char(10), - COUNTRYID int(0) , - ACCOUNTTYPE int(0) , - BELONGTO int(0) , + COUNTRYID int , + ACCOUNTTYPE int , + BELONGTO int , ACCOUNTNAME varchar(200) , companystartdate varchar(10), workstartdate varchar(10) , From 9f98572144352d88f7531bb4053230f217874205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 14 Nov 2025 10:12:22 +0800 Subject: [PATCH 55/84] =?UTF-8?q?=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/web/TaxDeclarationController.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index a98c540ce..37384a21c 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -5,13 +5,6 @@ import com.engine.salary.entity.taxdeclaration.dto.*; import com.engine.salary.entity.taxdeclaration.param.*; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareStatusPO; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO; -import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDetailListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.service.TaxDeclarationExcelService; import com.engine.salary.service.TaxDeclarationService; import com.engine.salary.service.impl.TaxDeclarationExcelServiceImpl; @@ -546,20 +539,6 @@ public class TaxDeclarationController { } - /** - * 个税申报表详情列表 - * - * @param queryParam 查询条件 - * @return - */ - @POST - @Path("/batSave") - @Produces(MediaType.APPLICATION_JSON) - public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationBatParam param) { - User user = HrmUserVarify.getUser(request, response); - param.setSalaryMonth(SalaryDateUtil.String2YearMonth(param.getSalaryMonthStr())); - return new ResponseResult(user).run(getTaxDeclarationWrapper(user)::batSave, param); - } //个税申报表详情列表 @POST From 83adc57dda84e9510e099001429d1433b78e3602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 14 Nov 2025 13:25:33 +0800 Subject: [PATCH 56/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E6=A0=B8=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctResultServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 1ed826103..01e1e7e45 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -965,7 +965,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(), "薪资计算完成"); stopWatch.stop(); log.info(stopWatch.prettyPrint()); From 6a01e1b0f606f55fd990f32246c98ea1904d78a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 17 Nov 2025 15:02:11 +0800 Subject: [PATCH 57/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=9C=A8=E7=BA=BF=E7=AE=97=E7=A8=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalaryAcctRecordQueryParam.java | 6 + .../param/SalaryCalcTaxBatParam.java | 27 ++++ .../salaryacct/param/SalaryCalcTaxParam.java | 6 + .../salaryaccounting/SalaryAcctOptEnum.java | 58 +++++++ .../salary/service/SalaryCalcTaxService.java | 6 + .../impl/SalaryAcctRecordServiceImpl.java | 147 +++++++++--------- .../impl/SalaryAcctResultServiceImpl.java | 5 +- .../impl/SalaryCalcTaxServiceImpl.java | 32 ++++ .../salary/web/SalaryAcctController.java | 19 +++ .../wrapper/SalaryAcctResultWrapper.java | 8 + 10 files changed, 242 insertions(+), 72 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java create mode 100644 src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java index 8424aa765..983d2cdf5 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctRecordQueryParam.java @@ -39,4 +39,10 @@ public class SalaryAcctRecordQueryParam extends BaseQueryParam { private String startMonthStr; private String endMonthStr; + + /** + * 最后操作 + * SalaryAcctOptEnum + */ + private List lastOperates; } diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java new file mode 100644 index 000000000..7721d3c0b --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxBatParam.java @@ -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 salaryAcctRecordIds; +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java index d4745f149..4e1469fe6 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java @@ -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 { /** diff --git a/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java new file mode 100644 index 000000000..69352fb16 --- /dev/null +++ b/src/com/engine/salary/enums/salaryaccounting/SalaryAcctOptEnum.java @@ -0,0 +1,58 @@ +package com.engine.salary.enums.salaryaccounting; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +/** + * 操作枚举 + *

Copyright: Copyright (c) 2025

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum SalaryAcctOptEnum implements BaseEnum { + + 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; + } +} diff --git a/src/com/engine/salary/service/SalaryCalcTaxService.java b/src/com/engine/salary/service/SalaryCalcTaxService.java index 7e6efec5c..81c9f3545 100644 --- a/src/com/engine/salary/service/SalaryCalcTaxService.java +++ b/src/com/engine/salary/service/SalaryCalcTaxService.java @@ -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); + } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 1fa0d4203..f1cc07c75 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -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 salaryAcctRecordPOS = getSalaryAcctRecordMapper().listSome(po); salaryAcctRecordPOS = getAuthService(user).auth(salaryAcctRecordPOS, AuthFilterTypeEnum.DATA_OPT, SalaryAcctRecordPO.class); + //过滤 + List 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 taxAgentIds = salarySobPO.getTaxAgentIds(); - taxAgentIds.forEach(taxAgentId->{ + taxAgentIds.forEach(taxAgentId -> { //查询扣缴义务人下的所有账套 List salarySobPOS = getSalarySobService(user).listByTaxAgentId(taxAgentId); Set salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId); //获取账套下的所有核算结果 List 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()); } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 01e1e7e45..f8bae807c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -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 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()); diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index f76d1354a..9d5dab251 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -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 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 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); + } + }); + } } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 4757a8c32..e714125f9 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -593,6 +593,25 @@ public class SalaryAcctController { return new ResponseResult(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(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(user).run(getSalaryAcctResultWrapper(user)::batCalcTaxFeedback, salaryCalcTaxParam); + } + //计算税后工资 @POST @Path("/acctresult/afterTaxAccounting") diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index c2a3d45eb..b5b8d4e2e 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -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); + } } From 37ff12bf6adfc0d8f10353efbe4d85cf509715a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 18 Nov 2025 09:34:24 +0800 Subject: [PATCH 58/84] =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEmployeeServiceImpl.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index 19d0147ed..24db00d78 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -11,7 +11,6 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; -import com.engine.salary.entity.setting.param.PageListSettingQueryParam; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.auth.AuthFilterTypeEnum; @@ -31,6 +30,8 @@ import com.engine.salary.service.*; import com.engine.salary.service.auth.AuthService; import com.engine.salary.service.auth.AuthServiceImpl; import com.engine.salary.service.impl.*; +import com.engine.salary.sys.service.SalarySysConfService; +import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; @@ -49,6 +50,8 @@ import weaver.hrm.User; import java.util.*; import java.util.stream.Collectors; +import static com.engine.salary.sys.constant.SalarySysConstant.REPORT_ORGANIZATIN_TYPE; + /** * 薪酬统计员工明细 *

Copyright: Copyright (c) 2022

@@ -103,6 +106,11 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala return ServiceUtil.getService(SettingServiceImpl.class, user); } + private SalarySysConfService getSalarySysConfService(User user) { + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + } + + private final boolean isRealOrg = "1".equals(getSalarySysConfService(user).getValueByCode(REPORT_ORGANIZATIN_TYPE)); @Override public PageInfo listPage(SalaryStatisticsEmployeeQueryParam queryParam) { List list = Collections.emptyList(); @@ -262,14 +270,22 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala map.put("salarySob", SalarySobMap.get(se.getSalarySobId())); map.put("acctTimes", salaryAcctRecordMap.get(se.getSalaryAcctRecordId())); map.put("userName", Util.null2String(emp.getUsername())); - map.put("subCompany", Util.null2String(emp.getSubcompanyName())); - map.put("department", Util.null2String(emp.getDepartmentName())); - map.put("jobTitle", Util.null2String(emp.getJobtitleName())); - map.put("status", Util.null2String(NumberUtil.isNumber(emp.getStatus()) ? SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(emp.getStatus())).getDefaultLabel() : null)); map.put("workCode", Util.null2String(emp.getWorkcode())); map.put("idNo", Util.null2String(emp.getIdNo())); map.put("companystartdate", Util.null2String(emp.getCompanystartdate())); + if(isRealOrg){ + map.put("subCompany", Util.null2String(emp.getSubcompanyName())); + map.put("department", Util.null2String(emp.getDepartmentName())); + map.put("jobTitle", Util.null2String(emp.getJobtitleName())); + map.put("status", Util.null2String(NumberUtil.isNumber(emp.getStatus()) ? SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(emp.getStatus())).getDefaultLabel() : null)); + }else { + map.put("subCompany", Util.null2String(se.getSubcompanyName())); + map.put("department", Util.null2String(se.getDepartmentName())); + map.put("jobTitle", Util.null2String(se.getJobtitleName())); + map.put("status", Util.null2String(NumberUtil.isNumber(se.getStatus()) ? SalaryEmployeeStatusEnum.parseByValue(Integer.valueOf(se.getStatus())).getDefaultLabel() : null)); + } + // IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(Integer.parseInt(se.getIncomeCategory())); // map.put("incomeCategory", Objects.isNull(incomeCategoryEnum) ? "" : SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel())); list.add(map); From 84e57edee15c7b963362fa3188eafb79e66d3024 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 18 Nov 2025 17:52:26 +0800 Subject: [PATCH 59/84] =?UTF-8?q?=E5=B8=B8=E8=A7=81sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/{人员生成不了档案.sql => 常见问题.md} | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) rename resource/wiki/{人员生成不了档案.sql => 常见问题.md} (70%) diff --git a/resource/wiki/人员生成不了档案.sql b/resource/wiki/常见问题.md similarity index 70% rename from resource/wiki/人员生成不了档案.sql rename to resource/wiki/常见问题.md index 1ddc0e7e4..747980c74 100644 --- a/resource/wiki/人员生成不了档案.sql +++ b/resource/wiki/常见问题.md @@ -1,3 +1,5 @@ + +## 薪资档案生成不了 select id from hrsa_tax_agent_emp where tax_agent_id =扣缴义务人id and delete_type = 0 @@ -7,4 +9,13 @@ where tax_agent_id =扣缴义务人id and delete_type = 0) update hrsa_tax_agent_emp set delete_type = 3 where delete_type = 0 -where tax_agent_id=扣缴义务人id and delete_type = 0 and employee_id not in (select employee_id from hrsa_salary_archive where tax_agent_id =扣缴义务人id and delete_type = 0) \ No newline at end of file +where tax_agent_id=扣缴义务人id and delete_type = 0 and employee_id not in (select employee_id from hrsa_salary_archive where tax_agent_id =扣缴义务人id and delete_type = 0) + + + +## 考勤引用 +drop sequence HRSA_ATTEND_QUOTE_ID +/ + +drop trigger HRSA_ATTEND_QUOTE_TRI +/ \ No newline at end of file From 624a3f8c4641817a32031e29b5bd323ab63c8322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 20 Nov 2025 16:16:10 +0800 Subject: [PATCH 60/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=9C=A8=E7=BA=BF=E7=AE=97=E7=A8=8E=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/po/SalaryAcctRecordPO.java | 5 ++++ .../salaryacct/SalaryAcctRecordMapper.xml | 5 ++++ .../service/SalaryAcctRecordService.java | 1 + .../impl/SalaryAcctRecordServiceImpl.java | 7 ++++- .../impl/SalaryCalcTaxServiceImpl.java | 27 +++++++++++++------ 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java index b847314ba..c409beaab 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctRecordPO.java @@ -148,6 +148,11 @@ public class SalaryAcctRecordPO { @Deprecated private List lockSalaryItemIds; + /** + * 在线算税结果信息 + */ + private String msg; + private Set opts; diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml index 42435893e..06de4deec 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml @@ -35,6 +35,7 @@ + @@ -58,6 +59,7 @@ , t.approval_status , t.approval_id , t.run_status + , t.msg @@ -433,6 +435,9 @@ approval_status=#{approvalStatus}, + + msg=#{msg}, + WHERE id = #{id} AND delete_type = 0 diff --git a/src/com/engine/salary/service/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index f12105c38..359bf5a4b 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -235,4 +235,5 @@ public interface SalaryAcctRecordService { void batReCalculate(SalaryAcctBatParam param); + void updateMsg(Long salaryAcctRecordId, String s); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index f1cc07c75..aa252f80b 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -1028,7 +1028,7 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe .description(saveParam.getDescription()) .build(); Long salaryAcctRecordId = save(param); - getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.UNPROCESSED.getDefaultLabel()); + updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.UNPROCESSED.getDefaultLabel()); } } @@ -1049,4 +1049,9 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe reCalculate(recordId); } } + + @Override + public void updateMsg(Long salaryAcctRecordId, String msg) { + getSalaryAcctRecordMapper().updateIgnoreNull(SalaryAcctRecordPO.builder().id(salaryAcctRecordId).msg(msg).build()); + } } diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 9d5dab251..808f31ddb 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -112,19 +112,21 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe @Override public void calcTax(SalaryCalcTaxParam salaryCalcTaxParam) { + Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); // 查询供应商信息 TaxDeclarationApiConfigPO apiConfig = getTaxDeclarationApiConfigService(user).getConfig(true); if (apiConfig == null) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160525, "接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量")); } - - Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); int i = getSalaryAcctEmployeeService(user).countNotDeclareByParam(AbnormalEmployeeListQueryParam.builder().recordId(salaryAcctRecordId).build()); if (i > 0) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"存在未报送的人员,请先进行人员报送"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(11111, "存在未报送的人员,请先进行人员报送")); } List reqs = getSalaryAcctCalcTaxReqService(user).listByRecordId(salaryAcctRecordId); if (CollUtil.isNotEmpty(reqs)) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"请先获取上一次在线算税结果"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(11111, "请先获取上一次在线算税结果")); } @@ -168,9 +170,11 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe DeclareTaxResponse declareTaxResponse = JsonUtil.parseObject(res, DeclareTaxResponse.class); if (Objects.isNull(declareTaxResponse) || Objects.isNull(declareTaxResponse.getHead())) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"服务异常"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); } if (!Objects.equals(declareTaxResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,declareTaxResponse.getHead().getMsg()); throw new SalaryRunTimeException(declareTaxResponse.getHead().getMsg()); } @@ -189,19 +193,24 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe // 批量保存 getSalaryAcctCalcTaxReqService(user).batchSave(salaryAcctCalcTaxReqs); + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.ONLINE.getDefaultLabel()); + //清空异常信息 + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,""); // 记录日志 getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.CALC_TAX_ONLINE); } @Override public void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam) { + // 查询薪资核算记录 + Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); // 查询供应商信息 TaxDeclarationApiConfigPO apiConfig = getTaxDeclarationApiConfigService(user).getConfig(true); if (apiConfig == null) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160525, "接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量")); } - // 查询薪资核算记录 - Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); // 查询薪资核算记录关联的薪资核算人员 List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecord.getId()); @@ -216,6 +225,7 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe // 查询薪资核算记录关联的异步算税请求记录 List salaryAcctCalcTaxReqs = getSalaryAcctCalcTaxReqService(user).listByRecordId(salaryAcctRecord.getId()); if (CollectionUtils.isEmpty(salaryAcctCalcTaxReqs)) { + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"请先计算个税再获取反馈"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(268184, "请先计算个税再获取反馈")); } // 查询薪资核算记录关联的薪资账套个税字段对应 @@ -251,6 +261,7 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares, taxRuleDTO); } catch (OnlineCalculateTaxException e) { log.error("获取在线算税结果异常", e); + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,e.getMessage()); getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); throw new SalaryRunTimeException(e.getMessage()); } @@ -302,6 +313,10 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe getSalaryAcctResultService(user).batchSave(addResultPOS); getSalaryAcctResultService(user).batchUpdate(updateResultPOS); getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.RESULT.getDefaultLabel()); + //清空异常信息 + getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,""); // 记录日志 getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.GET_CALC_TAX_FEEDBACK); } @@ -313,8 +328,6 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe 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); } @@ -328,8 +341,6 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe 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); } From d6e67b6e4a033ee8b29549b10a994f6ac53d3f1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 21 Nov 2025 11:10:16 +0800 Subject: [PATCH 61/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E6=90=9C?= =?UTF-8?q?=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/Mysql/sql202511210103SHQZJRXXFW.sql | 1 + resource/sqlupgrade/SQLServer/sql202511210103SHQZJRXXFW.sql | 2 ++ .../salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 resource/sqlupgrade/Mysql/sql202511210103SHQZJRXXFW.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202511210103SHQZJRXXFW.sql diff --git a/resource/sqlupgrade/Mysql/sql202511210103SHQZJRXXFW.sql b/resource/sqlupgrade/Mysql/sql202511210103SHQZJRXXFW.sql new file mode 100644 index 000000000..26a17cd3a --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202511210103SHQZJRXXFW.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_salary_acct_record ADD COLUMN msg text; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202511210103SHQZJRXXFW.sql b/resource/sqlupgrade/SQLServer/sql202511210103SHQZJRXXFW.sql new file mode 100644 index 000000000..da411610d --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202511210103SHQZJRXXFW.sql @@ -0,0 +1,2 @@ +ALTER TABLE hrsa_salary_acct_record ADD msg text +GO \ No newline at end of file diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java index 33bc15ee2..f383583be 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordListDTO.java @@ -67,7 +67,7 @@ public class SalaryAcctRecordListDTO { @TableTitle(title = "审批状态", dataIndex = "approvalStatus", key = "approvalStatus") private String approvalStatus; - @TableTitle(title = "执行状态", dataIndex = "runStatus", key = "runStatus") + @TableTitle(title = "批量操作状态", dataIndex = "runStatus", key = "runStatus") private String runStatus; @TableTitle(title = "操作", dataIndex = "operate", key = "operate") From dcd37b9ad33c3a93de5013f5cf6bb0001e4468b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 21 Nov 2025 14:04:44 +0800 Subject: [PATCH 62/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/prop/hrmSalary.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index f3380b545..09f610c2b 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=3.0.2.2510.01 +version=3.0.3.2510.01.ts openFormulaForcedEditing=false \ No newline at end of file From 9326c77f5d5e45852da8dfc74722b14a17983d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 24 Nov 2025 17:17:08 +0800 Subject: [PATCH 63/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java | 2 ++ src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java index 5a78052ab..c9eeab561 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctRecordFormDTO.java @@ -36,4 +36,6 @@ public class SalaryAcctRecordFormDTO { //周期提示信息 private SalarySobCycleDTO cycleInfo; + + private String msg; } diff --git a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java index 1ecaa6fd1..85597aca9 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctRecordWrapper.java @@ -230,7 +230,8 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord .setSalarySobId(salarySobPO.getId()) .setSalarySobName(salarySobPO.getName()) .setSalaryMonth(SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth()).toString()) - .setDescription(salaryAcctRecordPO.getDescription()); + .setDescription(salaryAcctRecordPO.getDescription()) + .setMsg(salaryAcctRecordPO.getMsg()); } // 转换成前端所需的数据格式 Map result = new HashMap<>(); From 85e0b85871caf98e3085ea111350a504a0e1e21f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 24 Nov 2025 17:20:11 +0800 Subject: [PATCH 64/84] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/web/SalaryBillController.java | 4 +- .../salary/wrapper/SalarySendWrapper.java | 60 +++++++++++++------ 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index ab505d1ce..23e06b6ee 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -485,7 +485,7 @@ public class SalaryBillController { @Produces(MediaType.APPLICATION_JSON) public String batGrant(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalarySendWrapper(user)::batGrant, queryParam); + return new ResponseResult(user).run(getSalarySendWrapper(user)::batGrant, queryParam); } /** @@ -499,7 +499,7 @@ public class SalaryBillController { @Produces(MediaType.APPLICATION_JSON) public String batWithdraw(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getSalarySendWrapper(user)::batWithdraw, queryParam); + return new ResponseResult(user).run(getSalarySendWrapper(user)::batWithdraw, queryParam); } diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 1772ba8b9..532d90d52 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -130,9 +130,9 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy list.stream().forEach(dto -> { // 回算过,但是查看的是普通工资单(不能查看详情);回算过,但是查看的是回算工资单(可以发);记录没回算过(可以发) - if(Objects.equals(dto.getSalaryAcctRecordType(), NumberUtils.INTEGER_ONE) && Objects.equals(dto.getSalaryAcctType(),NumberUtils.INTEGER_ZERO)){ + if (Objects.equals(dto.getSalaryAcctRecordType(), NumberUtils.INTEGER_ONE) && Objects.equals(dto.getSalaryAcctType(), NumberUtils.INTEGER_ZERO)) { dto.setCanSeeDetail(false); - }else{ + } else { dto.setCanSeeDetail(true); } }); @@ -155,7 +155,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy e.setTemplate(NumberUtils.INTEGER_ONE.equals(e.getSalaryAcctType()) ? salaryTemplatePO.getReplenishName() : salaryTemplatePO.getName()); e.setTemplateId(salaryTemplatePO.getId()); if ((salaryTemplatePO.getAckFeedbackStatus() != null && salaryTemplatePO.getAckFeedbackStatus() == 1) || - (salaryTemplatePO.getFeedbackStatus() != null && salaryTemplatePO.getFeedbackStatus() == 1) ) { + (salaryTemplatePO.getFeedbackStatus() != null && salaryTemplatePO.getFeedbackStatus() == 1)) { e.setAckFeedbackStatus(1); } else { e.setAckFeedbackStatus(0); @@ -701,6 +701,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy /** * 发送短信验证码 + * * @param param 短信验证码发送参数 */ public void sendMobileCode(SMSCodeSendParam param) { @@ -709,6 +710,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy /** * 校验短信验证码 + * * @param param * @return */ @@ -719,7 +721,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy public PayrollCheckTypeEnum payrollCheckType() { SalarySysConfPO conf = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_PAYROLL_CHECK_TYPE); - if(conf == null){ + if (conf == null) { return PayrollCheckTypeEnum.PWD; } @@ -727,14 +729,14 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy } public void confirmSalaryBill(Long salaryInfoId) { - if(ObjectUtil.isNull(salaryInfoId)){ + if (ObjectUtil.isNull(salaryInfoId)) { throw new SalaryRunTimeException("工资单id不能为空!"); } getSalaryBillService(user).confirmSalaryBill(salaryInfoId); } public void feedBackSalaryBill(Long salaryInfoId) { - if(ObjectUtil.isNull(salaryInfoId)){ + if (ObjectUtil.isNull(salaryInfoId)) { throw new SalaryRunTimeException("工资单id不能为空!"); } getSalaryBillService(user).feedBackSalaryBill(salaryInfoId); @@ -753,26 +755,48 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy } - public void batGrant(SalarySendBatParam param) { + public String batGrant(SalarySendBatParam param) { List salarySendIds = param.getSalarySendIds(); + int successCount = 0; + int failCount = 0; + String failMsg = ""; for (int i = 0; i < salarySendIds.size(); i++) { - Long sendId = salarySendIds.get(i); - SalarySendGrantParam grantParam = SalarySendGrantParam.builder() - .salarySendId(sendId) - .build(); - grant(grantParam); + try { + Long sendId = salarySendIds.get(i); + SalarySendGrantParam grantParam = SalarySendGrantParam.builder() + .salarySendId(sendId) + .build(); + grant(grantParam); + successCount++; + } catch (Exception e) { + failCount++; + failMsg = failMsg + "第" + (i + 1) + "个发放失败!失败原因:" + e.getMessage() + "\n"; + } } + + return String.format("成功:" + successCount + "个,失败:" + failCount + "个%s", failCount == 0 ? "" : ",失败原因:" + failMsg); } - public void batWithdraw(SalarySendBatParam param) { + + public String batWithdraw(SalarySendBatParam param) { List salarySendIds = param.getSalarySendIds(); + int successCount = 0; + int failCount = 0; + String failMsg = ""; for (int i = 0; i < salarySendIds.size(); i++) { - Long sendId = salarySendIds.get(i); - SalarySendWithdrawParam grantParam = SalarySendWithdrawParam.builder() - .salarySendId(sendId) - .build(); - withdraw(grantParam); + try { + Long sendId = salarySendIds.get(i); + SalarySendWithdrawParam grantParam = SalarySendWithdrawParam.builder() + .salarySendId(sendId) + .build(); + withdraw(grantParam); + } catch (Exception e) { + failCount++; + failMsg = failMsg + "第" + (i + 1) + "个撤回失败!失败原因:" + e.getMessage() + "\n"; + } + } + return String.format("成功:" + successCount + "个,失败:" + failCount + "个%s", failCount == 0 ? "" : ",失败原因:" + failMsg); } } From fe02f572150d3e62045388f3d64b5cb9d3f1e15e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 25 Nov 2025 16:13:40 +0800 Subject: [PATCH 65/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E7=A4=BE?= =?UTF-8?q?=E4=BF=9D=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/siaccount/dto/QZReportListDTO.java | 584 ++++++++++++++++++ .../param/QZInsuranceAccountBatchParam.java | 26 + .../InsuranceAccountDetailMapper.java | 3 + .../InsuranceAccountDetailMapper.xml | 187 ++++++ .../salary/service/SIAccountService.java | 3 + .../service/impl/SIAccountServiceImpl.java | 25 + .../salary/web/SIAccountController.java | 17 + 7 files changed, 845 insertions(+) create mode 100644 src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java create mode 100644 src/com/engine/salary/entity/siaccount/param/QZInsuranceAccountBatchParam.java diff --git a/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java b/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java new file mode 100644 index 000000000..b0443a76a --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java @@ -0,0 +1,584 @@ +package com.engine.salary.entity.siaccount.dto; + +import com.engine.hrmelog.annotation.ElogTransform; +import com.engine.salary.annotation.Encrypt; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QZReportListDTO { + + + + /** + * 公司名称 + */ + @ElogTransform(name = "个税扣缴义务人") + private Long paymentOrganization; + private String paymentOrganizationName; + /** + * 工号 + */ + private String workCode; + /** + * 一级部门 + */ + private String dept1; + + /** + * 二级部门 + */ + private String dept2; + + /** + * 实际工作地 + */ + private String actualWorkplace; + + /** + * 劳动关系地 + */ + private String laborWorkplace; + + /** + * 岗位名称 + */ + private String jobcall; + /** + * 进入日期 + */ + + /** + * 离职日期 + */ + /** + * 社保基数 + */ + private String socialBase; + /** + * 公积金基数 + */ + private String fundBase; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** + * 主键id + */ + @ElogTransform(name = "主键id") + private Long id; + + /** + * 员工id + */ + @ElogTransform(name = "员工id") + private Long employeeId; + + /** + * 账单月份 + */ + @ElogTransform(name = "账单月份") + private String billMonth; + + /** + * 账单状态 0-未归档 1-已归档 + */ + @ElogTransform(name = "账单状态") + private Integer billStatus; + + /** + * 缴纳状态 + */ + @ElogTransform(name = "缴纳状态") + private Integer paymentStatus; + + /** + * 补缴月份/退差月份 + */ + @ElogTransform(name = "补缴月份/退差月份") + private String supplementaryMonth; + + /** + * 补缴项目 + */ + @ElogTransform(name = "补缴项目") + private String supplementaryProjects; + + /** + * 数据来源 0-系统核算 1-临时数据 + */ + @ElogTransform(name = "数据来源") + private Integer resourceFrom; + + /** + * 社保缴纳组织 + */ + @ElogTransform(name = "社保缴纳组织") + private Long socialPayOrg; + + /** + * 社保账号 + */ + @ElogTransform(name = "社保账号") + private String socialAccount; + + /** + * 公积金缴纳组织 + */ + @ElogTransform(name = "公积金缴纳组织") + private Long fundPayOrg; + + /** + * 公积金账号 + */ + @ElogTransform(name = "公积金账号") + private String fundAccount; + + /** + * 补充公积金账号 + */ + @ElogTransform(name = "补充公积金账号") + private String supplementFundAccount; + + /** + * 其他福利缴纳组织 + */ + @ElogTransform(name = "其他福利缴纳组织") + private Long otherPayOrg; + + /** + * 社保方案ID + */ + @ElogTransform(name = "社保方案ID") + private Long socialSchemeId; + + /** + * 社保缴纳基数 + */ + @Encrypt + @ElogTransform(name = "社保缴纳基数") + private String socialPaymentBaseString; + + /** + * 社保缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "社保缴纳基数——单位") + private String socialPaymentComBaseString; + + /** + * 公积金方案ID + */ + @ElogTransform(name = "公积金方案ID") + private Long fundSchemeId; + + /** + * 公积金缴纳基数 + */ + @Encrypt + @ElogTransform(name = "公积金缴纳基数") + private String fundPaymentBaseString; + + /** + * 公积金缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "公积金缴纳基数——单位") + private String fundPaymentComBaseString; + + /** + * 其他福利方案id + */ + @ElogTransform(name = "其他福利方案id") + private Long otherSchemeId; + + /** + * 其他福利缴纳基数 + */ + @Encrypt + @ElogTransform(name = "其他福利缴纳基数") + private String otherPaymentBaseString; + + /** + * 其他福利缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "其他福利缴纳基数——单位") + private String otherPaymentComBaseString; + + /** + * 社保个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "社保个人缴费明细") + private String socialPerJson; + + /** + * 特殊社保缴费明细 + */ + @Encrypt + @ElogTransform(name = "特殊社保缴费明细") + private String socialSpecialJson; + + /** + * 社保个人合计 + */ + @Encrypt + @ElogTransform(name = "社保个人合计") + private String socialPerSum; + + /** + * 公积金个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "公积金个人缴费明细") + private String fundPerJson; + + /** + * 特殊公积金缴费明细 + */ + @Encrypt + @ElogTransform(name = "特殊公积金缴费明细") + private String fundSpecialJson; + + /** + * 公积金个人合计 + */ + @Encrypt + @ElogTransform(name = "公积金个人合计") + private String fundPerSum; + + /** + * 其他福利个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "其他福利个人缴费明细") + private String otherPerJson; + + /** + * 其他福利个人合计 + */ + @Encrypt + @ElogTransform(name = "其他福利个人合计") + private String otherPerSum; + + /** + * 个人合计 + */ + @Encrypt + @ElogTransform(name = "个人合计") + private String perSum; + + /** + * 社保单位缴费明细 + */ + @Encrypt + @ElogTransform(name = "社保单位缴费明细") + private String socialComJson; + + /** + * 社保单位合计 + */ + @Encrypt + @ElogTransform(name = "社保单位合计") + private String socialComSum; + + /** + * 公积金单位缴费明细 + */ + @ElogTransform(name = "公积金单位缴费明细") + private String fundComJson; + + /** + * 公积金单位合计 + */ + @ElogTransform(name = "公积金单位合计") + private String fundComSum; + + /** + * 其他福利单位缴费明细 + */ + @ElogTransform(name = "其他福利单位缴费明细") + private String otherComJson; + + /** + * 其他福利单位合计 + */ + @ElogTransform(name = "其他福利单位合计") + private String otherComSum; + + /** + * 单位合计 + */ + @Encrypt + @ElogTransform(name = "单位合计") + private String comSum; + + /** + * 社保合计 + */ + @Encrypt + @ElogTransform(name = "社保合计") + private String socialSum; + + /** + * 公积金合计 + */ + @Encrypt + @ElogTransform(name = "公积金合计") + private String fundSum; + + /** + * 其他福利合计 + */ + @Encrypt + @ElogTransform(name = "其他福利合计") + private String otherSum; + + /** + * 合计 + */ + @Encrypt + @ElogTransform(name = "合计") + private String total; + + + private String subcompanyName; + private Long subcompanyId; + private String departmentName; + private Long departmentId; + private String jobtitleName; + private Long jobtitleId; + private Long jobcallId; + private String status; + + + + /** + * 社保方案ID + */ + @ElogTransform(name = "社保方案ID") + private Long bSocialSchemeId; + + /** + * 社保缴纳基数 + */ + @Encrypt + @ElogTransform(name = "社保缴纳基数") + private String bSocialPaymentBaseString; + + /** + * 社保缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "社保缴纳基数——单位") + private String bSocialPaymentComBaseString; + + /** + * 公积金方案ID + */ + @ElogTransform(name = "公积金方案ID") + private Long bFundSchemeId; + + /** + * 公积金缴纳基数 + */ + @Encrypt + @ElogTransform(name = "公积金缴纳基数") + private String bFundPaymentBaseString; + + /** + * 公积金缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "公积金缴纳基数——单位") + private String bFundPaymentComBaseString; + + /** + * 其他福利方案id + */ + @ElogTransform(name = "其他福利方案id") + private Long bOtherSchemeId; + + /** + * 其他福利缴纳基数 + */ + @Encrypt + @ElogTransform(name = "其他福利缴纳基数") + private String bOtherPaymentBaseString; + + /** + * 其他福利缴纳基数——单位 + */ + @Encrypt + @ElogTransform(name = "其他福利缴纳基数——单位") + private String bOtherPaymentComBaseString; + + /** + * 社保个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "社保个人缴费明细") + private String bSocialPerJson; + + /** + * 特殊社保缴费明细 + */ + @Encrypt + @ElogTransform(name = "特殊社保缴费明细") + private String bSocialSpecialJson; + + /** + * 社保个人合计 + */ + @Encrypt + @ElogTransform(name = "社保个人合计") + private String bSocialPerSum; + + /** + * 公积金个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "公积金个人缴费明细") + private String bFundPerJson; + + /** + * 特殊公积金缴费明细 + */ + @Encrypt + @ElogTransform(name = "特殊公积金缴费明细") + private String bFundSpecialJson; + + /** + * 公积金个人合计 + */ + @Encrypt + @ElogTransform(name = "公积金个人合计") + private String bFundPerSum; + + /** + * 其他福利个人缴费明细 + */ + @Encrypt + @ElogTransform(name = "其他福利个人缴费明细") + private String bOtherPerJson; + + /** + * 其他福利个人合计 + */ + @Encrypt + @ElogTransform(name = "其他福利个人合计") + private String bOtherPerSum; + + /** + * 个人合计 + */ + @Encrypt + @ElogTransform(name = "个人合计") + private String bPerSum; + + /** + * 社保单位缴费明细 + */ + @Encrypt + @ElogTransform(name = "社保单位缴费明细") + private String bSocialComJson; + + /** + * 社保单位合计 + */ + @Encrypt + @ElogTransform(name = "社保单位合计") + private String bSocialComSum; + + /** + * 公积金单位缴费明细 + */ + @ElogTransform(name = "公积金单位缴费明细") + private String bFundComJson; + + /** + * 公积金单位合计 + */ + @ElogTransform(name = "公积金单位合计") + private String bFundComSum; + + /** + * 其他福利单位缴费明细 + */ + @ElogTransform(name = "其他福利单位缴费明细") + private String bOtherComJson; + + /** + * 其他福利单位合计 + */ + @ElogTransform(name = "其他福利单位合计") + private String bOtherComSum; + + /** + * 单位合计 + */ + @Encrypt + @ElogTransform(name = "单位合计") + private String bComSum; + + /** + * 社保合计 + */ + @Encrypt + @ElogTransform(name = "社保合计") + private String bSocialSum; + + /** + * 公积金合计 + */ + @Encrypt + @ElogTransform(name = "公积金合计") + private String bFundSum; + + /** + * 其他福利合计 + */ + @Encrypt + @ElogTransform(name = "其他福利合计") + private String bOtherSum; + + /** + * 合计 + */ + @Encrypt + @ElogTransform(name = "合计") + private String bTotal; + +} diff --git a/src/com/engine/salary/entity/siaccount/param/QZInsuranceAccountBatchParam.java b/src/com/engine/salary/entity/siaccount/param/QZInsuranceAccountBatchParam.java new file mode 100644 index 000000000..8152c3b32 --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/param/QZInsuranceAccountBatchParam.java @@ -0,0 +1,26 @@ +package com.engine.salary.entity.siaccount.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * 钱智社保报表 + *

Copyright: Copyright (c) 2025

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class QZInsuranceAccountBatchParam { + + private List ids; + +} diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java index faf48f4bc..12eb290f4 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java @@ -1,5 +1,6 @@ package com.engine.salary.mapper.siaccount; +import com.engine.salary.entity.siaccount.dto.QZReportListDTO; import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; import com.engine.salary.entity.siaccount.param.SupplementAccountBaseParam; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; @@ -200,4 +201,6 @@ public interface InsuranceAccountDetailMapper { void deleteByIds(@Param("ids")List ids); void deleteByEmpIds(@Param("employeeIds")List deleteEmployeeIds, @Param("billMonth") String billMonth, @Param("paymentOrganization") Long paymentOrganization); + + List qzReportList(InsuranceAccountDetailParam queryParam); } diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 71685ffcb..773ce1cd8 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -1636,4 +1636,191 @@ AND t.payment_organization = #{paymentOrganization} AND t.employee_id = #{employeeId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index e299c15f0..2ae58ce17 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -332,5 +332,8 @@ public interface SIAccountService { void batFile(AccountBatParam param); void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam); + + Object qzReport(QZInsuranceAccountBatchParam qzInsuranceAccountBatchParam); + } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 6a42ac130..d5a1e958a 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -7190,6 +7190,31 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } } + @Override + public Object qzReport(QZInsuranceAccountBatchParam qzInsuranceAccountBatchParam) { + + List ids = qzInsuranceAccountBatchParam.getIds(); + + List list = new ArrayList<>(); + for (Long id : ids) { + InsuranceAccountBatchPO batchPO= getInsuranceAccountBatchMapper().getById(id); + Long paymentOrganization = batchPO.getPaymentOrganization(); + String billMonth = batchPO.getBillMonth(); + + InsuranceAccountDetailParam queryParam = InsuranceAccountDetailParam.builder() + .billMonth(billMonth) + .paymentOrganization(paymentOrganization.toString()) + .build(); + //排序配置 + OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); + queryParam.setOrderRule(orderRule); + //系统人员福利台账明细 + list.addAll(encryptUtil.decryptList(getInsuranceAccountDetailMapper().qzReportList(queryParam), QZReportListDTO.class)); + } + + return null; + } + public void accountOtherView(InsuranceAccountViewListDTO dto, List pos) { int otherNum = 0; BigDecimal otherPaySum = new BigDecimal("0"); diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index 3509cd31a..7d5f6c605 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -1220,4 +1220,21 @@ public class SIAccountController { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getSIAccountWrapper(user)::addNewBalance, param); } + + + /** + * 获取台账列表页 + * + * @param request + * @param response + * @return + */ + @POST + @Path("/qz/list") + @Produces(MediaType.APPLICATION_JSON) + public String qzReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody QZInsuranceAccountBatchParam insuranceAccountBatchParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::qzReport, insuranceAccountBatchParam); + } + } From a85e371791d7981e5ed607cee7af7dd46f9298c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 26 Nov 2025 16:45:01 +0800 Subject: [PATCH 66/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E7=A4=BE?= =?UTF-8?q?=E4=BF=9D=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/RecordsBuildService.java | 3 + .../service/impl/RecordsBuildServiceImpl.java | 418 +++++++++++++++++- .../service/impl/SIAccountServiceImpl.java | 7 +- 3 files changed, 412 insertions(+), 16 deletions(-) diff --git a/src/com/engine/salary/service/RecordsBuildService.java b/src/com/engine/salary/service/RecordsBuildService.java index 3edbecd45..a01efc1bb 100644 --- a/src/com/engine/salary/service/RecordsBuildService.java +++ b/src/com/engine/salary/service/RecordsBuildService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.siaccount.dto.QZReportListDTO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; @@ -19,4 +20,6 @@ public interface RecordsBuildService { List> buildCommonRecordsWithStyle(List list, Long employeeId); List> buildInspectRecords(List list, Long paymentOrganization); + + List> buildQzReport(List list, Long employeeId, boolean dynamicEmpInfo); } diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index 51fd19482..142947e52 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.TypeReference; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.siaccount.dto.QZReportListDTO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesAccountPO; @@ -28,11 +29,13 @@ import com.engine.salary.util.SalaryEnumUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.general.Util; import weaver.hrm.User; +import weaver.hrm.company.DepartmentComInfo; import java.math.BigDecimal; import java.text.ParseException; @@ -47,6 +50,7 @@ import java.util.stream.Collectors; * @Date 2022/4/11 * @Version V1.0 **/ +@Slf4j public class RecordsBuildServiceImpl extends Service implements RecordsBuildService { private EmployMapper getEmployMapper() { @@ -150,7 +154,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (socialComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); socialComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialComBase", v); @@ -170,7 +174,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } } } - record.put("fundPayOrg", item.getFundPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getFundPayOrg(),TaxAgentPO.builder().build())).getName()); + record.put("fundPayOrg", item.getFundPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getFundPayOrg(), TaxAgentPO.builder().build())).getName()); record.put("fundAccount", item.getFundAccount()); record.put("fundSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getFundSchemeId())); record.put("supplementFundAccount", item.getSupplementFundAccount()); @@ -185,7 +189,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (fundJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); fundJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundPerBase", v); @@ -197,7 +201,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (fundComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); fundComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundComBase", v); @@ -217,7 +221,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } } } - record.put("otherPayOrg", item.getOtherPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getOtherPayOrg(),TaxAgentPO.builder().build())).getName()); + record.put("otherPayOrg", item.getOtherPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getOtherPayOrg(), TaxAgentPO.builder().build())).getName()); record.put("otherSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getOtherSchemeId())); if (StringUtils.isNotEmpty(item.getOtherPaymentBaseString()) || StringUtils.isNotEmpty(item.getOtherPaymentComBaseString())) { Map otherJson = JSON.parseObject(item.getOtherPaymentBaseString(), new HashMap().getClass()); @@ -230,7 +234,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (otherJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); otherJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherPerBase", v); @@ -242,7 +246,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (otherComJson != null) { //查询该福利方案下开启缴纳的福利项 // List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); - List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); otherComJson.forEach((k, v) -> { if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "otherComBase", v); @@ -264,7 +268,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } if (StringUtils.isNotEmpty(item.getSocialPerJson())) { Map socialJson = JSON.parseObject(item.getSocialPerJson(), new HashMap().getClass()); - if(socialJson!=null){ + if (socialJson != null) { socialJson.forEach((k, v) -> { record.put(k + "socialPer", (String) v); }); @@ -297,7 +301,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ // record.put("socialSpecialSum", socialSpecialSum[0]); if (StringUtils.isNotEmpty(item.getFundPerJson())) { Map fundPerJson = JSON.parseObject(item.getFundPerJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "fundPer", (String) v); }); @@ -329,7 +333,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ // record.put("fundSpecialSum", fundSpecialSum[0]); if (StringUtils.isNotEmpty(item.getOtherPerJson())) { Map fundPerJson = JSON.parseObject(item.getOtherPerJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "otherPer", (String) v); }); @@ -340,7 +344,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("perSum", item.getPerSum()); if (StringUtils.isNotEmpty(item.getSocialComJson())) { Map fundPerJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "socialCom", (String) v); }); @@ -352,7 +356,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("socialComSum", item.getSocialComSum()); if (StringUtils.isNotEmpty(item.getFundComJson())) { Map fundPerJson = JSON.parseObject(item.getFundComJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "fundCom", (String) v); }); @@ -362,7 +366,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("fundComSum", item.getFundComSum()); if (StringUtils.isNotEmpty(item.getOtherComJson())) { Map fundPerJson = JSON.parseObject(item.getOtherComJson(), new HashMap().getClass()); - if(fundPerJson!=null){ + if (fundPerJson != null) { fundPerJson.forEach((k, v) -> { record.put(k + "otherCom", (String) v); }); @@ -375,7 +379,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { socialSpecialJson.forEach((k, v) -> { // String standardSocialPer = Util.null2String(record.get(k + "socialPer")); // BigDecimal standardSocialPerVal = new BigDecimal(0); @@ -399,7 +403,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { fundSpecialJson.forEach((k, v) -> { // String standardFundPer = Util.null2String(record.get(k + "fundPer")); // BigDecimal standardFundPerVal = new BigDecimal(0); @@ -515,4 +519,388 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } return new SimpleDateFormat(SalaryI18nUtil.getI18nLabel(100519, "补缴yyyy年MM月")).format(date); } + + @Override + public List> buildQzReport(List list, Long employeeId, boolean dynamicEmpInfo) { + boolean welBaseDiffSign = getSIArchivesService(user).isDiffWelBase(); + List> result = new ArrayList<>(); + if (CollectionUtils.isEmpty(list)) { + return result; + } + List employeeIds = list.stream().map(item -> item.getEmployeeId()).distinct().collect(Collectors.toList()); + List employeeByIds = new ArrayList<>(); + List> partition = Lists.partition(employeeIds, 1000); + for (List longs : partition) { + employeeByIds.addAll(getSalaryEmployeeService(user).getEmployeeByIdsAll(longs)); + } + if (CollectionUtils.isEmpty(employeeByIds)) { + return result; + } + List paymentList = getTaxAgentMapper().listAll(); + + SalaryAssert.notEmpty(paymentList, SalaryI18nUtil.getI18nLabel(100341, "暂无扣缴义务人")); + Map paymentMap = paymentList.stream().collect(Collectors.toMap(TaxAgentPO::getId, Function.identity())); + Map collect = employeeByIds.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, Function.identity())); + DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + list.forEach(item -> { + Map record = new HashMap<>(); + DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()); + record.put("id", item.getId()); + record.put("paymentOrganizationName", paymentMap.get(item.getSocialPayOrg()) == null ? "" : paymentMap.get(item.getSocialPayOrg()).getName()); + record.put("workcode", StringUtils.isBlank(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()); + record.put("userName", simpleEmployee.getUsername()); + String[] depList = new String[0]; + try { + depList = departmentComInfo.getDepartmentRealPath(simpleEmployee.getDepartmentId().toString(), ",", "").split(","); + } catch (Exception ex) { + log.error("获取部门信息失败" + simpleEmployee.getDepartmentId() + ex); + depList = new String[0]; + } + record.put("firstDepartmentName", depList.length >= 1 ? Util.formatMultiLang(depList[depList.length - 1], String.valueOf(user.getLanguage())) : ""); + record.put("secondDepartmentName", depList.length >= 2 ? Util.formatMultiLang(depList[depList.length - 2], String.valueOf(user.getLanguage())) : ""); + record.put("jobcall", item.getJobcall()); + record.put("companystartdate", simpleEmployee.getCompanystartdate()); + record.put("dismissdate", item.getStatus() != null && UserStatusEnum.getUnavailableStatus().contains(item.getStatus()) ? simpleEmployee.getDismissdate() : ""); + //社保基数,取养老个人的基数 + + + if (!dynamicEmpInfo) { + record.put("department", item.getDepartmentName()); + record.put("departmentId", item.getDepartmentId()); + record.put("subcompany", item.getSubcompanyName()); + record.put("subcompanyId", item.getSubcompanyId()); + record.put("jobtitle", item.getJobtitleName()); + record.put("jobtitleId", item.getJobtitleId()); + record.put("jobcall", item.getJobcall()); + record.put("jobcallId", item.getJobcallId()); + record.put("employeeStatus", item.getStatus() != null ? UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(item.getStatus())) : ""); + } else { + record.put("department", simpleEmployee.getDepartmentName()); + record.put("departmentId", simpleEmployee.getDepartmentId()); + record.put("employeeStatus", simpleEmployee.getStatus() != null ? UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(simpleEmployee.getStatus())) : ""); + } + + record.put("supplementaryMonth", item.getSupplementaryMonth()); + ResourceFromEnum from = SalaryEnumUtil.enumMatchByValue(item.getResourceFrom(), ResourceFromEnum.values(), ResourceFromEnum.class); + + record.put("idNo", Util.null2String(simpleEmployee.getIdNo())); + record.put("sourceFrom", SalaryI18nUtil.getI18nLabel(from.getLabelId(), from.getDefaultLabel())); + record.put("socialPayOrg", paymentMap.get(item.getSocialPayOrg()) == null ? "" : paymentMap.get(item.getSocialPayOrg()).getName()); + record.put("socialAccount", item.getSocialAccount()); + + record.put("socialSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getSocialSchemeId())); + if (StringUtils.isNotEmpty(item.getSocialPaymentBaseString()) || StringUtils.isNotEmpty(item.getSocialPaymentComBaseString())) { + Map socialJson = JSON.parseObject(item.getSocialPaymentBaseString(), new HashMap().getClass()); +// if(socialJson!=null){ +// socialJson.forEach((k, v) -> { +// record.put(k + "socialBase", (String) v); +// }); +// } + if (welBaseDiffSign) { + if (socialJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "socialPerBase", v); + } + if (Long.parseLong(k) == 9001L) { + record.put("socialBase", v); + } + }); + } + Map socialComJson = JSON.parseObject(item.getSocialPaymentComBaseString(), new TypeReference>() { + }); + if (socialComJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + socialComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "socialComBase", v); + } + }); + } + } else { + if (socialJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getSocialSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getSocialSchemeId()); + socialJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "socialBase", v); + } + if (Long.parseLong(k) == 9001L) { + record.put("socialBase", v); + } + }); + } + } + } + record.put("fundPayOrg", item.getFundPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getFundPayOrg(), TaxAgentPO.builder().build())).getName()); + record.put("fundAccount", item.getFundAccount()); + record.put("fundSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getFundSchemeId())); + record.put("supplementFundAccount", item.getSupplementFundAccount()); + if (StringUtils.isNotEmpty(item.getFundPaymentBaseString()) || StringUtils.isNotEmpty(item.getFundPaymentComBaseString())) { + Map fundJson = JSON.parseObject(item.getFundPaymentBaseString(), new HashMap().getClass()); +// if(fundJson!=null){ +// fundJson.forEach((k, v) -> { +// record.put(k + "fundBase", (String) v); +// }); +// } + if (welBaseDiffSign) { + if (fundJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "fundPerBase", v); + } + if (Long.parseLong(k) == 9006L) { + record.put("fundBase", v); + } + }); + } + Map fundComJson = JSON.parseObject(item.getFundPaymentComBaseString(), new TypeReference>() { + }); + if (fundComJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + fundComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "fundComBase", v); + } + }); + } + } else { + if (fundJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getFundSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getFundSchemeId()); + fundJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "fundBase", v); + } + if (Long.parseLong(k) == 9006L) { + record.put("fundBase", v); + } + }); + } + } + } + record.put("otherPayOrg", item.getOtherPayOrg() == null ? "" : (paymentMap.getOrDefault(item.getOtherPayOrg(), TaxAgentPO.builder().build())).getName()); + record.put("otherSchemeName", getInsuranceSchemeMapper().querySchemeName(item.getOtherSchemeId())); + if (StringUtils.isNotEmpty(item.getOtherPaymentBaseString()) || StringUtils.isNotEmpty(item.getOtherPaymentComBaseString())) { + Map otherJson = JSON.parseObject(item.getOtherPaymentBaseString(), new HashMap().getClass()); +// if(otherJson!=null){ +// otherJson.forEach((k, v) -> { +// record.put(k + "otherBase", (String) v); +// }); +// } + if (welBaseDiffSign) { + if (otherJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_PERSON.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(), PaymentScopeEnum.SCOPE_PERSON.getValue()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "otherPerBase", v); + } + }); + } + Map otherComJson = JSON.parseObject(item.getOtherPaymentComBaseString(), new TypeReference>() { + }); + if (otherComJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId(),PaymentScopeEnum.SCOPE_COMPANY.getValue()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId(), PaymentScopeEnum.SCOPE_COMPANY.getValue()); + otherComJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "otherComBase", v); + } + }); + } + } else { + if (otherJson != null) { + //查询该福利方案下开启缴纳的福利项 +// List insuranceIdList = siArchivesBiz.payInsuranceIds(item.getOtherSchemeId()); + List insuranceIdList = getSIArchivesService(user).payInsuranceIds(item.getOtherSchemeId()); + otherJson.forEach((k, v) -> { + if (insuranceIdList.contains(Long.valueOf(k))) { + record.put(k + "otherBase", v); + } + }); + } + } + } + if (StringUtils.isNotEmpty(item.getSocialPerJson())) { + Map socialJson = JSON.parseObject(item.getSocialPerJson(), new HashMap().getClass()); + if (socialJson != null) { + socialJson.forEach((k, v) -> { + record.put(k + "socialPer", (String) v); + }); + } + + } + // + // // 钱智 社保差异 + // final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; + // if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { + // Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); + // if(socialSpecialJson!=null){ + // socialSpecialJson.forEach((k, v) -> { + // String standardSocialPer = Util.null2String(record.get(k + "socialPer")); + // BigDecimal standardSocialPerVal = new BigDecimal(0); + // BigDecimal specialSocialPerVal = new BigDecimal(0); + // if (NumberUtils.isCreatable(standardSocialPer)) { + // standardSocialPerVal = new BigDecimal(standardSocialPer); + // } + // if (v != null && NumberUtils.isCreatable(v.toString())) { + // specialSocialPerVal = new BigDecimal(v.toString()); + // } + // BigDecimal subtract = specialSocialPerVal.subtract(standardSocialPerVal); + // socialSpecialSum[0] = socialSpecialSum[0].add(subtract); + // record.put(k + "socialSpecial", subtract.toString()); + // }); + // } + // } + record.put("socialPerSum", item.getSocialPerSum()); + // record.put("socialSpecialSum", socialSpecialSum[0]); + if (StringUtils.isNotEmpty(item.getFundPerJson())) { + Map fundPerJson = JSON.parseObject(item.getFundPerJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "fundPer", (String) v); + }); + } + + } + // // 钱智 公积金差异 + // final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; + // if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { + // Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); + // if(fundSpecialJson!=null){ + // fundSpecialJson.forEach((k, v) -> { + // String standardFundPer = Util.null2String(record.get(k + "fundPer")); + // BigDecimal standardFundPerVal = new BigDecimal(0); + // BigDecimal specialFundPerVal = new BigDecimal(0); + // if (NumberUtils.isCreatable(standardFundPer)) { + // standardFundPerVal = new BigDecimal(standardFundPer); + // } + // if (v != null && NumberUtils.isCreatable(v.toString())) { + // specialFundPerVal = new BigDecimal(v.toString()); + // } + // BigDecimal subtract = specialFundPerVal.subtract(standardFundPerVal); + // fundSpecialSum[0] = fundSpecialSum[0].add(subtract); + // record.put(k + "fundSpecial", subtract.toString()); + // }); + // } + // } + record.put("fundPerSum", item.getFundPerSum()); + // record.put("fundSpecialSum", fundSpecialSum[0]); + if (StringUtils.isNotEmpty(item.getOtherPerJson())) { + Map fundPerJson = JSON.parseObject(item.getOtherPerJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "otherPer", (String) v); + }); + } + + } + record.put("otherPerSum", item.getOtherPerSum()); + record.put("perSum", item.getPerSum()); + if (StringUtils.isNotEmpty(item.getSocialComJson())) { + Map fundPerJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "socialCom", (String) v); + }); + } + fundPerJson.forEach((k, v) -> { + record.put(k + "socialCom", (String) v); + }); + } + record.put("socialComSum", item.getSocialComSum()); + if (StringUtils.isNotEmpty(item.getFundComJson())) { + Map fundPerJson = JSON.parseObject(item.getFundComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "fundCom", (String) v); + }); + } + + } + record.put("fundComSum", item.getFundComSum()); + if (StringUtils.isNotEmpty(item.getOtherComJson())) { + Map fundPerJson = JSON.parseObject(item.getOtherComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "otherCom", (String) v); + }); + } + + } + record.put("otherComSum", item.getOtherComSum()); + + // 钱智 社保差异 + final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; + if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { + Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); + if (socialSpecialJson != null) { + socialSpecialJson.forEach((k, v) -> { + // String standardSocialPer = Util.null2String(record.get(k + "socialPer")); + // BigDecimal standardSocialPerVal = new BigDecimal(0); + // if (NumberUtils.isCreatable(standardSocialPer)) { + // standardSocialPerVal = new BigDecimal(standardSocialPer); + // } + BigDecimal specialComVal = v == null ? new BigDecimal("0") : new BigDecimal(v.toString()); + String standardSocialCom = Util.null2String(record.get(k + "socialCom")); + BigDecimal standardComPerVal = new BigDecimal(0); + if (NumberUtils.isCreatable(standardSocialCom)) { + standardComPerVal = new BigDecimal(standardSocialCom); + } + BigDecimal subtract = specialComVal.subtract(standardComPerVal); + socialSpecialSum[0] = socialSpecialSum[0].add(subtract); + record.put(k + "socialSpecial", subtract.toString()); + }); + } + } + record.put("socialSpecialSum", socialSpecialSum[0].toPlainString()); + // 钱智 公积金差异 + final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; + if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { + Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); + if (fundSpecialJson != null) { + fundSpecialJson.forEach((k, v) -> { + // String standardFundPer = Util.null2String(record.get(k + "fundPer")); + // BigDecimal standardFundPerVal = new BigDecimal(0); + // if (NumberUtils.isCreatable(standardFundPer)) { + // standardFundPerVal = new BigDecimal(standardFundPer); + // } + BigDecimal specialComVal = v == null ? new BigDecimal("0") : new BigDecimal(v.toString()); + String standardFundCom = Util.null2String(record.get(k + "fundCom")); + BigDecimal standardFundComVal = new BigDecimal(0); + if (NumberUtils.isCreatable(standardFundCom)) { + standardFundComVal = new BigDecimal(standardFundCom); + } + BigDecimal subtract = specialComVal.subtract(standardFundComVal); + fundSpecialSum[0] = fundSpecialSum[0].add(subtract); + record.put(k + "fundSpecial", subtract.toString()); + }); + } + } + record.put("fundSpecialSum", fundSpecialSum[0].toPlainString()); + record.put("specialSum", socialSpecialSum[0].add(fundSpecialSum[0]).toPlainString()); + record.put("comSum", item.getComSum()); + record.put("socialSum", item.getSocialSum()); + record.put("fundSum", item.getFundSum()); + record.put("otherSum", item.getOtherSum()); + record.put("total", item.getTotal()); + result.add(record); + }); + return result; + } } \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index d5a1e958a..7f73a5376 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -7209,9 +7209,14 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); queryParam.setOrderRule(orderRule); //系统人员福利台账明细 - list.addAll(encryptUtil.decryptList(getInsuranceAccountDetailMapper().qzReportList(queryParam), QZReportListDTO.class)); + List qzReportListDTOS = getInsuranceAccountDetailMapper().qzReportList(queryParam); + encryptUtil.decryptList(qzReportListDTOS, QZReportListDTO.class); + list.addAll(qzReportListDTOS); } + List> list1 = getService(user).buildQzReport(list, (long) user.getUID(), false); + + return null; } From 5377a472cccb080c4120e712e513dd05428b721b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 26 Nov 2025 17:20:17 +0800 Subject: [PATCH 67/84] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SISchemeServiceImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 0484a1079..35f207e4d 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -2473,6 +2473,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { * @param employeeId */ public String update(InsuranceSchemeReqParam updateParam, long employeeId) { + log.info("福利方案更新参数:{}", updateParam); //查询是否存在福利方案 InsuranceSchemePO insuranceSchemePO = getById(updateParam.getInsuranceScheme().getId()); if (Objects.isNull(insuranceSchemePO)) { @@ -2506,6 +2507,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //更新福利方案主表 InsuranceSchemePO insuranceSchemePO1 = InsuranceSchemeBO.buildInsuranceSchemePO(insuranceSchemePO, updateParam.getInsuranceScheme()); getInsuranceSchemeMapper().update(insuranceSchemePO1); + log.info("福利方案更新主表:{}", insuranceSchemePO1); //记录主表操作日志 loggerContext.setNewValues(insuranceSchemePO1); SalaryElogConfig.siSchemeLoggerTemplate.write(loggerContext); @@ -2529,6 +2531,7 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { //更新福利方案明细表 先删后插 getInsuranceSchemeDetailMapper().batchDeleteByPrimaryIds(Collections.singleton(updateParam.getInsuranceScheme().getId())); //更新明细表 + log.info("福利方案更新明细表:{}", insuranceSchemeDetailPOS); encryptUtil.encryptList(insuranceSchemeDetailPOS, InsuranceSchemeDetailPO.class); insuranceSchemeDetailPOS.forEach(getInsuranceSchemeDetailMapper()::insert); From bfa4057016fd87e19dc8f3ccd17a118fc7da9315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Nov 2025 10:44:01 +0800 Subject: [PATCH 68/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E7=A4=BE?= =?UTF-8?q?=E4=BF=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/siaccount/dto/QZReportListDTO.java | 1 - .../service/impl/RecordsBuildServiceImpl.java | 21 +- .../service/impl/SIAccountServiceImpl.java | 313 ++++++++++-------- 3 files changed, 179 insertions(+), 156 deletions(-) diff --git a/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java b/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java index b0443a76a..491de2fda 100644 --- a/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java +++ b/src/com/engine/salary/entity/siaccount/dto/QZReportListDTO.java @@ -19,7 +19,6 @@ public class QZReportListDTO { /** * 公司名称 */ - @ElogTransform(name = "个税扣缴义务人") private Long paymentOrganization; private String paymentOrganizationName; /** diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index 142947e52..a45f72839 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -558,28 +558,11 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } record.put("firstDepartmentName", depList.length >= 1 ? Util.formatMultiLang(depList[depList.length - 1], String.valueOf(user.getLanguage())) : ""); record.put("secondDepartmentName", depList.length >= 2 ? Util.formatMultiLang(depList[depList.length - 2], String.valueOf(user.getLanguage())) : ""); - record.put("jobcall", item.getJobcall()); + record.put("jobtitleName", simpleEmployee.getJobtitleName()); record.put("companystartdate", simpleEmployee.getCompanystartdate()); - record.put("dismissdate", item.getStatus() != null && UserStatusEnum.getUnavailableStatus().contains(item.getStatus()) ? simpleEmployee.getDismissdate() : ""); - //社保基数,取养老个人的基数 + record.put("dismissdate", simpleEmployee.getStatus() != null && UserStatusEnum.getUnavailableStatus().contains(simpleEmployee.getStatus()) ? simpleEmployee.getDismissdate() : ""); - if (!dynamicEmpInfo) { - record.put("department", item.getDepartmentName()); - record.put("departmentId", item.getDepartmentId()); - record.put("subcompany", item.getSubcompanyName()); - record.put("subcompanyId", item.getSubcompanyId()); - record.put("jobtitle", item.getJobtitleName()); - record.put("jobtitleId", item.getJobtitleId()); - record.put("jobcall", item.getJobcall()); - record.put("jobcallId", item.getJobcallId()); - record.put("employeeStatus", item.getStatus() != null ? UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(item.getStatus())) : ""); - } else { - record.put("department", simpleEmployee.getDepartmentName()); - record.put("departmentId", simpleEmployee.getDepartmentId()); - record.put("employeeStatus", simpleEmployee.getStatus() != null ? UserStatusEnum.getDefaultLabelByValue(Integer.parseInt(simpleEmployee.getStatus())) : ""); - } - record.put("supplementaryMonth", item.getSupplementaryMonth()); ResourceFromEnum from = SalaryEnumUtil.enumMatchByValue(item.getResourceFrom(), ResourceFromEnum.values(), ResourceFromEnum.class); diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 7f73a5376..234aeea76 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -16,6 +16,7 @@ import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.TaxAgentBiz; import com.engine.salary.cache.SalaryCacheKey; import com.engine.salary.component.SalaryWeaTable; +import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; @@ -172,7 +173,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } private SalarySysConfService getSalarySysConfService(User user) { - return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); + return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } private InsuranceSchemeMapper getInsuranceSchemeMapper() { @@ -358,7 +359,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //非系统人员核算明细 List extList = getInsuranceAccountDetailMapper().extList(queryParam); list.addAll(extList); - PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(),queryParam.getPageSize(), + PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, InsuranceAccountDetailPO.class); List insuranceAccountDetailPOS = pageInfo.getList(); encryptUtil.decryptList(insuranceAccountDetailPOS, InsuranceAccountDetailPO.class); @@ -415,7 +416,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //非系统人员核算明细 List extList = getInsuranceAccountDetailMapper().extList(queryParam); list.addAll(extList); - PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(),queryParam.getPageSize(), + PageInfo pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, InsuranceAccountDetailPO.class); List insuranceAccountDetailPOS = pageInfo.getList(); encryptUtil.decryptList(insuranceAccountDetailPOS, InsuranceAccountDetailPO.class); @@ -929,7 +930,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { insuranceAccountDetailPOS = insuranceAccountDetailPOS.stream() .filter(f -> f.getPaymentStatus().equals(PaymentStatusEnum.COMMON.getValue()) || f.getPaymentStatus().equals(PaymentStatusEnum.REPAIR.getValue()) - || f.getPaymentStatus().equals(PaymentStatusEnum.BALANCE.getValue()) ) + || f.getPaymentStatus().equals(PaymentStatusEnum.BALANCE.getValue())) .collect(Collectors.toList()); List list = buildNewInsuranceDetailPOS(insuranceAccountDetailPOS); Map siAcctResultWithEmpAndPayStatus = insuranceAccountDetailPOS.stream() @@ -1029,7 +1030,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { socialSpecialJson.forEach((k, v) -> { // String standardSocialPer = Util.null2String(record.get(k + "socialCommonPer")); // BigDecimal standardSocialPerVal = new BigDecimal(0); @@ -1099,7 +1100,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { fundSpecialJson.forEach((k, v) -> { // String standardFundPer = Util.null2String(record.get(k + "fundCommonPer")); // BigDecimal standardFundPerVal = new BigDecimal(0); @@ -1253,7 +1254,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "socialPer"); commonResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "正常缴纳个人"), item.getId() + "socialCommonPer"); - commonResult.put(SalaryI18nUtil.getI18nLabel(0, "单位超额-") + categoryIdNameMap.get(String.valueOf(item.getId())) , item.getId() + "socialSpecial"); + commonResult.put(SalaryI18nUtil.getI18nLabel(0, "单位超额-") + categoryIdNameMap.get(String.valueOf(item.getId())), item.getId() + "socialSpecial"); repairResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "补缴个人"), item.getId() + "socialRepairPer"); balanceResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "补差个人"), item.getId() + "socialBalancePer"); } @@ -1263,7 +1264,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } result.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(87159, "个人"), item.getId() + "fundPer"); commonResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "正常缴纳个人"), item.getId() + "fundCommonPer"); - commonResult.put(SalaryI18nUtil.getI18nLabel(0, "单位超额-") + categoryIdNameMap.get(String.valueOf(item.getId())) , item.getId() + "fundSpecial"); + commonResult.put(SalaryI18nUtil.getI18nLabel(0, "单位超额-") + categoryIdNameMap.get(String.valueOf(item.getId())), item.getId() + "fundSpecial"); repairResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "补缴个人"), item.getId() + "fundRepairPer"); balanceResult.put(categoryIdNameMap.get(String.valueOf(item.getId())) + SalaryI18nUtil.getI18nLabel(0, "补差个人"), item.getId() + "fundBalancePer"); } @@ -1349,7 +1350,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { insuranceAccountDetailPOS = insuranceAccountDetailPOS.stream() .filter(f -> f.getPaymentStatus().equals(PaymentStatusEnum.COMMON.getValue()) || f.getPaymentStatus().equals(PaymentStatusEnum.REPAIR.getValue()) - || f.getPaymentStatus().equals(PaymentStatusEnum.BALANCE.getValue()) ) + || f.getPaymentStatus().equals(PaymentStatusEnum.BALANCE.getValue())) .collect(Collectors.toList()); List list = buildNewInsuranceDetailPOS(insuranceAccountDetailPOS); // InsuranceAccountDetailPOEncrypt.decryptInsuranceAccountDetailPOList(list); @@ -1639,7 +1640,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "账单月份"); // List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "taxAgentName", "billMonth"); - List dataIndexList = Lists.newArrayList("userName", "department", "mobile", "workcode","idNo", "socialPayOrg", "billMonth"); + List dataIndexList = Lists.newArrayList("userName", "department", "mobile", "workcode", "idNo", "socialPayOrg", "billMonth"); // 查询福利核算项目 List welfareNames = (List) param.getWelfareNames(); headerList.addAll(welfareNames); @@ -1815,7 +1816,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, dataValue, deparmentName, mobile, workcode,idNo, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode, idNo, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -1845,7 +1846,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } - if (!isError){ + if (!isError) { List employeeIds = new ArrayList<>(); employeeIds.add(employeeId); //如果福利核算信息查询不到唯一匹配数据,不支持导入 @@ -1865,7 +1866,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } //校验补缴人员是否存在福利档案基础信息,并且runStatus处于正在缴纳或者待减员 InsuranceArchivesBaseInfoPO insuranceBaseInfo = getInsuranceBaseInfoMapper().getOneByEmployeeIdAndPayOrg(paymentOrganization, employeeId); - if (insuranceBaseInfo == null || !(insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()) || insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue())) ) { + if (insuranceBaseInfo == null || !(insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()) || insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()))) { throw new SalaryRunTimeException(username + SalaryI18nUtil.getI18nLabel(0, "补缴未设置福利档案人员或不在福利在缴人员中,不可新建补缴信息!")); } List empIdsInPayMonthRange = listCanPayEmpIds(paymentOrganization, billMonth.substring(0, 7)); @@ -1902,10 +1903,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { insuranceAccountDetailPO.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); insuranceAccountDetailPO.setDeleteType(0); InsuranceAccountDetailPO insertPO = handleInsuranceAccountDetail4AddSupplementary(insuranceAccountDetailPO, map); - if(!checkBalancePayInsurance(insertPO)) { + if (!checkBalancePayInsurance(insertPO)) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "导入数据中存在福利档案中未设置的福利项缴纳数值!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "导入数据中存在福利档案中未设置的福利项缴纳数值!")); excelComments.add(errorMessageMap); } else { insertInsuranceAccountDetailList.add(insertPO); @@ -1913,23 +1914,23 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "本次福利核算不包含该人员")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "本次福利核算不包含该人员")); excelComments.add(errorMessageMap); } } else if (list.size() > 1) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员本次核算出现多组数据,请删除数据库中多余核算项")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员本次核算出现多组数据,请删除数据库中多余核算项")); excelComments.add(errorMessageMap); } else { //拼装待更新数据 encryptUtil.decryptList(list, InsuranceAccountDetailPO.class); InsuranceAccountDetailPO updatePO = handleInsuranceAccountDetail(list.get(0), map); //判断导入福利项是否符合福利方案设置缴纳项 - if(!checkBalancePayInsurance(updatePO)) { + if (!checkBalancePayInsurance(updatePO)) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "导入数据中存在福利档案中未设置的福利项缴纳数值!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "导入数据中存在福利档案中未设置的福利项缴纳数值!")); excelComments.add(errorMessageMap); } else { updateInsuranceAccountDetailList.add(updatePO); @@ -1952,7 +1953,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // 将待插入列表加密 encryptUtil.encryptList(insertInsuranceAccountDetailList, InsuranceAccountDetailPO.class); //更新 - for(InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) { + for (InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) { // getSiAccountBiz(user).updateByEmployeeIdAndBillMonth(po); updateByEmployeeIdAndBillMonth(po); } @@ -2052,7 +2053,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "账单月份", "补缴月份"); - List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode","idNo", "taxAgentName", "billMonth", "supplementaryMonth"); + List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "idNo", "taxAgentName", "billMonth", "supplementaryMonth"); // 查询福利核算项目 List welfareNames = (List) param.getWelfareNames(); headerList.addAll(welfareNames); @@ -2077,7 +2078,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 获取福利台账中的补缴数据 - * @param billMonth 账单月份 + * + * @param billMonth 账单月份 * @param paymentOrganization 个税扣缴义务人id * @return */ @@ -2094,13 +2096,13 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().equals(paymentOrganization) + .filter(f -> f.getPaymentOrganization().equals(paymentOrganization) && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); supplyDataList = supplyDataList.stream().filter(f -> canAccountIds.contains(f.getEmployeeId())).collect(Collectors.toList()); - for(InsuranceAccountDetailPO po : supplyDataList) { + for (InsuranceAccountDetailPO po : supplyDataList) { Map resultMap = new HashMap<>(); employee = getSalaryEmployeeService(user).getEmployeeById(po.getEmployeeId()); resultMap.put("username", employee.getUsername()); @@ -2119,7 +2121,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 获取福利台账中的补差数据 - * @param billMonth 账单月份 + * + * @param billMonth 账单月份 * @param paymentOrganization 个税扣缴义务人id * @return */ @@ -2134,7 +2137,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List balanceDataList = getInsuranceAccountDetailMapper().queryBalanceListByBillMonth(billMonth, paymentOrganization); - for(InsuranceAccountDetailPO po : balanceDataList) { + for (InsuranceAccountDetailPO po : balanceDataList) { Map resultMap = new HashMap<>(); employee = getSalaryEmployeeService(user).getEmployeeById(po.getEmployeeId()); resultMap.put("username", employee.getUsername()); @@ -2153,7 +2156,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 获取福利台账中的正常缴纳数据 - * @param billMonth 账单月份 + * + * @param billMonth 账单月份 * @param paymentOrganization 个税扣缴义务人id * @return */ @@ -2169,13 +2173,13 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //过滤出福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().equals(paymentOrganization) + .filter(f -> f.getPaymentOrganization().equals(paymentOrganization) && (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue()))) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); normalDataList = normalDataList.stream().filter(f -> canAccountIds.contains(f.getEmployeeId())).collect(Collectors.toList()); - for(InsuranceAccountDetailPO po : normalDataList) { + for (InsuranceAccountDetailPO po : normalDataList) { Map resultMap = new HashMap<>(); employee = getSalaryEmployeeService(user).getEmployeeById(po.getEmployeeId()); resultMap.put("username", employee.getUsername()); @@ -2216,7 +2220,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { && !"账单月份".equals(map.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - for(Map.Entry entry : toDealMap.entrySet()) { + for (Map.Entry entry : toDealMap.entrySet()) { //判断元素是否属于福利类 String keyName = entry.getKey(); //获取元素名后缀,方便之后判断“个人”或“单位” @@ -2412,7 +2416,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { Map socialComJson = JSON.parseObject(insuranceAccountDetailPO.getSocialComJson(), new HashMap().getClass()); socialComJson = socialComJson == null ? new HashMap<>() : socialComJson; Map finalSocialComJson = socialComJson; @@ -2432,7 +2436,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { Map fundComJson = JSON.parseObject(insuranceAccountDetailPO.getFundComJson(), new HashMap().getClass()); fundComJson = fundComJson == null ? new HashMap<>() : fundComJson; Map finalFundComJson = fundComJson; @@ -2484,7 +2488,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { && !"账单月份".equals(map.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - for(Map.Entry entry : toDealMap.entrySet()) { + for (Map.Entry entry : toDealMap.entrySet()) { //判断元素是否属于福利类 String keyName = entry.getKey(); //获取元素名后缀,方便之后判断“个人”或“单位” @@ -2674,7 +2678,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * map中value值求和 */ - public String sumOfMapValue(Map welfarePay){ + public String sumOfMapValue(Map welfarePay) { BigDecimal sum = new BigDecimal("0"); for (String value : welfarePay.values()) { sum = sum.add(new BigDecimal(value)); @@ -2690,7 +2694,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map toDelMap = new HashMap<>(); //校验newMap中的value值是否为整数或者小数 - for(Map.Entry newEntry : newMap.entrySet()) { + for (Map.Entry newEntry : newMap.entrySet()) { String newValue = newEntry.getValue(); int l = newValue.length(); @@ -2727,7 +2731,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 判断字符串是否为整数或者小数或者负数 */ - public static boolean isNumeric(String str){ + public static boolean isNumeric(String str) { // Pattern pattern = Pattern.compile("[0-9]*\\.?[0-9]+"); Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$"); @@ -2747,8 +2751,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //校验内容:billMonth的长度是否为7、年月连接符是否为“-” String connector; - if(billMonth.length() == 7){ - connector = billMonth.substring(4,5); + if (billMonth.length() == 7) { + connector = billMonth.substring(4, 5); return "-".equals(connector); } else { return false; @@ -2883,8 +2887,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List socialComBaseColumns = Lists.newArrayList(); if (welBaseDiffSign) { for (ICategoryPO po : socialWelfareList) { - socialPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); - socialComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); + socialPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); + socialComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); } socialBaseColumns.addAll(socialPerBaseColumns); socialBaseColumns.addAll(socialComBaseColumns); @@ -2900,8 +2904,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List fundComBaseColumns = Lists.newArrayList(); if (welBaseDiffSign) { for (ICategoryPO po : fundWelfareList) { - fundPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); - fundComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); + fundPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); + fundComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); } fundBaseColumns.addAll(fundPerBaseColumns); fundBaseColumns.addAll(fundComBaseColumns); @@ -2917,8 +2921,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List otherComBaseColumns = Lists.newArrayList(); if (welBaseDiffSign) { for (ICategoryPO po : otherWelfareList) { - otherPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"个人")); - otherComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0,"单位")); + otherPerBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "个人")); + otherComBaseColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "申报基数") + SalaryI18nUtil.getI18nLabel(0, "单位")); } otherBaseColumns.addAll(otherPerBaseColumns); otherBaseColumns.addAll(otherComBaseColumns); @@ -2931,33 +2935,33 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //社保个人(生育保险个人、工伤保险个人、失业保险个人、养老保险个人、医疗保险个人) List socialPerColumns = new ArrayList<>(); for (ICategoryPO po : socialWelPerList) { - socialPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"个人")); + socialPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "个人")); } //住房公积金个人、补充住房公积金个人 List fundPerColumns = new ArrayList<>(); for (ICategoryPO po : fundWelPerList) { - fundPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"个人")); + fundPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "个人")); } //其他个人(比如企业年金个人) List otherPerColumns = new ArrayList<>(); for (ICategoryPO po : otherWelPerList) { - otherPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"个人")); + otherPerColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "个人")); } //社保单位(生育保险单位、工伤保险单位、失业保险单位、养老保险单位、医疗保险单位) List socialComColumns = new ArrayList<>(); for (ICategoryPO po : socialWelComList) { - socialComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"单位")); + socialComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "单位")); } //住房公积金单位、补充住房公积金单位 List fundComColumns = new ArrayList<>(); for (ICategoryPO po : fundWelComList) { - fundComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"单位")); + fundComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "单位")); } //其他单位(比如企业年金单位) List otherComColumns = new ArrayList<>(); for (ICategoryPO po : otherWelComList) { - otherComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0,"单位")); + otherComColumns.add(po.getInsuranceName() + SalaryI18nUtil.getI18nLabel(0, "单位")); } Map> welColumnMap = new HashMap<>(); @@ -3031,10 +3035,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (ICategoryPO po : socialWelfareList) { result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"个人"), po.getId() + "socialPerBase"); + + SalaryI18nUtil.getI18nLabel(0, "个人"), po.getId() + "socialPerBase"); result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"单位"), po.getId() + "socialComBase"); + + SalaryI18nUtil.getI18nLabel(0, "单位"), po.getId() + "socialComBase"); } } else { for (ICategoryPO po : socialWelfareList) { @@ -3048,10 +3052,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (ICategoryPO po : fundWelfareList) { result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"个人"), po.getId() + "fundPerBase"); + + SalaryI18nUtil.getI18nLabel(0, "个人"), po.getId() + "fundPerBase"); result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"单位"), po.getId() + "fundComBase"); + + SalaryI18nUtil.getI18nLabel(0, "单位"), po.getId() + "fundComBase"); } } else { for (ICategoryPO po : fundWelfareList) { @@ -3065,10 +3069,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (ICategoryPO po : otherWelfareList) { result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"个人"), po.getId() + "otherPerBase"); + + SalaryI18nUtil.getI18nLabel(0, "个人"), po.getId() + "otherPerBase"); result.put(Util.formatMultiLang(po.getInsuranceName(), String.valueOf(user.getLanguage())) + SalaryI18nUtil.getI18nLabel(0, "申报基数") - + SalaryI18nUtil.getI18nLabel(0,"单位"), po.getId() + "otherComBase"); + + SalaryI18nUtil.getI18nLabel(0, "单位"), po.getId() + "otherComBase"); } } else { for (ICategoryPO po : otherWelfareList) { @@ -3224,7 +3228,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, dataValue, deparmentName, mobile, workcode, idNo,null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, dataValue, deparmentName, mobile, workcode, idNo, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -3254,7 +3258,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } - if (!isError){ + if (!isError) { List employeeIds = new ArrayList<>(); employeeIds.add(employeeId); //根据员工id、个税扣缴义务人id、账单月份查询,如果当前对比表中存在数据,则记录为待删除数据 @@ -3303,8 +3307,9 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 将excel导入的数据行组装成ExcelInsuranceDetailPO对象 + * * @param billMonth 对比的账单月份 - * @param baseMap excel导入的对比数据 + * @param baseMap excel导入的对比数据 */ private ExcelInsuranceDetailPO handleExcelInsuranceDetail(String billMonth, Long employeeId, Long paymentOrganization, Map baseMap, Map welColumnNameCodeMap) { // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); @@ -3340,7 +3345,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { && !"工号".equals(map.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); - for(Map.Entry entry : toDealMap.entrySet()) { + for (Map.Entry entry : toDealMap.entrySet()) { // //判断元素是否属于福利类 // String keyName = entry.getKey(); // //获取元素名后缀,方便之后判断“个人”或“单位”或者“基数” @@ -3578,7 +3583,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { taskExecutor.execute(() -> { if (paymentOrganization != null && billMonth != null) { - InsuranceAccountDetailParam refreshParam =new InsuranceAccountDetailParam(); + InsuranceAccountDetailParam refreshParam = new InsuranceAccountDetailParam(); refreshParam.setBillMonth(billMonth); refreshParam.setPaymentOrganization(paymentOrganization.toString()); PageInfo pageInfos = overView(refreshParam); @@ -3608,6 +3613,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } }); } + /** * 将通过id获取InsuranceAccountDetailPO中的社保、公积金、其他福利个人和公司缴纳数据 */ @@ -3756,7 +3762,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } //对比可进行缴纳福利项与上面的已有福利项生成map for (Map balancePayItem : balancePaymentGroup) { - Map target = (Map)targetMap.get(balancePayItem.get("insuranceId") + "-" + balancePayItem.get("paymentScope")); + Map target = (Map) targetMap.get(balancePayItem.get("insuranceId") + "-" + balancePayItem.get("paymentScope")); if (targetMap.get(balancePayItem.get("insuranceId") + "-" + balancePayItem.get("paymentScope")) == null) { balancePayItem.put("insuranceValue", ""); balancePayItem.put("validNum", balancePayItem.get("validNum")); @@ -3774,15 +3780,16 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public String getTotalSign(String total) { if (StringUtils.isNotBlank(total)) { - return total.contains(SalaryI18nUtil.getI18nLabel(0,"社保")) ? "social" : (total.contains(SalaryI18nUtil.getI18nLabel(0,"公积金")) ? "fund" : "other" ); + return total.contains(SalaryI18nUtil.getI18nLabel(0, "社保")) ? "social" : (total.contains(SalaryI18nUtil.getI18nLabel(0, "公积金")) ? "fund" : "other"); } else { return ""; } } + public void getPaymentGroup(String baseJson, String groupType, String welfareType, Map dataMap, List addGroups) { if (StringUtils.isBlank(baseJson)) { - addGroups.add(new SearchConditionGroup(welfareType + groupType +"缴纳", true, null)); + addGroups.add(new SearchConditionGroup(welfareType + groupType + "缴纳", true, null)); return; } @@ -3804,7 +3811,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { baseJsonMap.put(groupPrefix + entry.getKey(), entry.getValue()); } dataMap.putAll(baseJsonMap); - addGroups.add(new SearchConditionGroup(welfareType + groupType +"缴纳", true, inputItems)); + addGroups.add(new SearchConditionGroup(welfareType + groupType + "缴纳", true, inputItems)); } /** @@ -3982,7 +3989,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { Map socialComJson = JSON.parseObject(insuranceAccountDetailPO.getSocialComJson(), new HashMap().getClass()); socialComJson = socialComJson == null ? new HashMap() : socialComJson; Map finalSocialComJson = socialComJson; @@ -4002,7 +4009,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { Map fundComJson = JSON.parseObject(insuranceAccountDetailPO.getFundComJson(), new HashMap().getClass()); fundComJson = fundComJson == null ? new HashMap() : fundComJson; Map finalFundComJson = fundComJson; @@ -4042,8 +4049,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { SalaryI18nUtil.getI18nLabel(86317, "工号"), SalaryI18nUtil.getI18nLabel(86317, "证件号码"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人") - ); - List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode","idNo", "taxAgentName"); + ); + List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "workcode", "idNo", "taxAgentName"); // 查询福利核算项目 List welfareNames = (List) param.getWelfareNames(); headerList.addAll(welfareNames); @@ -4190,7 +4197,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //筛选导入人员信息可以在人力资源池中匹配到的人员信息 - List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue,salaryEmployees, name, departmentName, mobile, workcode,idNo, null); + List employeeSameIds = getSalaryEmployeeService(user).matchImportEmployee(confValue, salaryEmployees, name, departmentName, mobile, workcode, idNo, null); if (CollectionUtils.isEmpty(employeeSameIds)) { isError = true; @@ -4220,7 +4227,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } - if (!isError){ + if (!isError) { //如果福利核算信息查询不到唯一匹配数据,不支持导入 //根据员工id、个税扣缴义务人id、账单月份查询补差数据 @@ -4232,28 +4239,28 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (list.isEmpty()) { //新增数据情况 - InsuranceAccountDetailPO createPO = buildBalanceAccountDetail(paymentOrganization, insuranceCategoryPOS, singleAccount, billMonth, employeeId, currentEmployeeId); + InsuranceAccountDetailPO createPO = buildBalanceAccountDetail(paymentOrganization, insuranceCategoryPOS, singleAccount, billMonth, employeeId, currentEmployeeId); - if(!checkBalancePayInsurance(createPO)) { + if (!checkBalancePayInsurance(createPO)) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); excelComments.add(errorMessageMap); } - if(checkBalance(createPO) && !isError) { + if (checkBalance(createPO) && !isError) { createInsuranceAccountDetailList.add(createPO); } else { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月不存在补差数据中的福利类,请检查补差缴纳信息!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月不存在补差数据中的福利类,请检查补差缴纳信息!")); excelComments.add(errorMessageMap); } } else if (list.size() > 1) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月已存在多组补差数据,请删除数据库中多余项")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月已存在多组补差数据,请删除数据库中多余项")); excelComments.add(errorMessageMap); } else { //更新数据情况 @@ -4261,19 +4268,19 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { encryptUtil.decryptList(list, InsuranceAccountDetailPO.class); InsuranceAccountDetailPO updatePO = handleInsuranceAccountDetail(list.get(0), map); - if(!checkBalancePayInsurance(updatePO)) { + if (!checkBalancePayInsurance(updatePO)) { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(0, "补差数据中存在福利档案中未设置的福利项缴纳数值,请检查补差缴纳信息!")); excelComments.add(errorMessageMap); } - if(checkBalance(updatePO) && !isError) { + if (checkBalance(updatePO) && !isError) { updateInsuranceAccountDetailList.add(updatePO); } else { isError = true; Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月不存在补差数据中的福利类,请检查补差缴纳信息!")); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员在当前账单月不存在补差数据中的福利类,请检查补差缴纳信息!")); excelComments.add(errorMessageMap); } @@ -4295,7 +4302,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //将待更新列表加密 encryptUtil.encryptList(updateInsuranceAccountDetailList, InsuranceAccountDetailPO.class); //更新 - for(InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) { + for (InsuranceAccountDetailPO po : updateInsuranceAccountDetailList) { // getSiAccountBiz(user).updateByEmployeeIdAndBillMonth(po); updateByEmployeeIdAndBillMonth(po); } @@ -4462,7 +4469,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return datas; } - public Map countSum(List> records ){ + public Map countSum(List> records) { // 获取需要统计的列 String[] keys = {"Base", "Com", "Sum", "Per", "total", "Special"}; Set numKeys = new HashSet<>(); @@ -4471,28 +4478,28 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // numKeys.add(key); // } // } - for(int i =0; i < records.size(); i++){ + for (int i = 0; i < records.size(); i++) { Map record = records.get(i); - for(String key : record.keySet()){ - if(StringUtils.containsAny(key,keys)){ + for (String key : record.keySet()) { + if (StringUtils.containsAny(key, keys)) { numKeys.add(key); } } } Map sumRow = new HashMap<>(); - for(String numKey : numKeys){ + for (String numKey : numKeys) { BigDecimal value = new BigDecimal(0); - for(Map record : records){ + for (Map record : records) { BigDecimal addValue = null; - if(record.get(numKey) == null || StringUtils.isBlank(record.get(numKey).toString())){ + if (record.get(numKey) == null || StringUtils.isBlank(record.get(numKey).toString())) { addValue = new BigDecimal(0); - }else{ + } else { addValue = new BigDecimal(record.get(numKey).toString()); } value = value.add(addValue); } // sumRow.put(numKey,value); - sumRow.put(numKey,String.format("%.2f", value)); + sumRow.put(numKey, String.format("%.2f", value)); } return sumRow; @@ -4501,6 +4508,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 检查补差数据中的福利缴纳费用相关福利类别,是否在正常缴纳中有设置缴纳 + * * @param po * @return */ @@ -4535,6 +4543,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 检查补差数据中的福利缴纳费用相关福利项,是否在正常缴纳中方案所设置可缴纳 + * * @param po * @return */ @@ -4682,7 +4691,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } else { //目标员工未设置方案时,判断补差中是否设置(有效值)的福利项 - if(otherPerPayMap != null) { + if (otherPerPayMap != null) { for (Map.Entry entry : otherPerPayMap.entrySet()) { if (StringUtils.isNotBlank(entry.getValue())) { otherPayFlag = false; @@ -4720,7 +4729,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (detailPOS != null && detailPOS.size() > 0) { //开启缴纳的 insuranceIdList = detailPOS.stream().filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue())).map(m -> { - return m.getInsuranceId() .toString() + "-" + m.getPaymentScope().toString(); + return m.getInsuranceId().toString() + "-" + m.getPaymentScope().toString(); }).collect(Collectors.toList()); } return insuranceIdList; @@ -4970,6 +4979,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 新建核算并归档 + * * @param param * @return */ @@ -5085,25 +5095,25 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // 获取薪资核算人员规则 SalarySysConfPO salaryAcctEmployeeRule = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ACCT_EMPLOYEE_RULE); List status = new ArrayList<>(); - if(Objects.isNull(salaryAcctEmployeeRule) || StringUtils.equals(salaryAcctEmployeeRule.getConfValue(), SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue()) ){ + if (Objects.isNull(salaryAcctEmployeeRule) || StringUtils.equals(salaryAcctEmployeeRule.getConfValue(), SalaryAcctEmployeeRuleEnum.BYPAYENDTIME.getValue())) { // 包含停缴 - status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(),EmployeeStatusEnum.STAY_DEL.getValue(), + status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(), EmployeeStatusEnum.STAY_DEL.getValue(), EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()); - }else{ - status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(),EmployeeStatusEnum.STAY_DEL.getValue()); + } else { + status = Arrays.asList(EmployeeStatusEnum.PAYING.getValue(), EmployeeStatusEnum.STAY_DEL.getValue()); } List finalStatus = status; //过滤出需要核算的人员,即福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listAll(); List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().equals(param.getPaymentOrganization()) - && (finalStatus.contains(f.getRunStatus()) )) + .filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization()) + && (finalStatus.contains(f.getRunStatus()))) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); //20231122逻辑优化,过滤出不在起始缴纳月和最后缴纳月区间的人员 List empIdsInPayMonthRange = listCanPayEmpIds(param.getPaymentOrganization(), param.getBillMonth()); - empIds = empIds.stream().filter(f->canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); + empIds = empIds.stream().filter(f -> canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); // List socials = siArchivesBiz.getSocialByEmployeeIds(empIds); List socials = getSIArchivesService(user).getSocialByEmployeeIds(empIds); @@ -5111,7 +5121,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { socials = socials.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp1 = socials.stream() .filter(s -> !(StringUtils.isBlank(s.getSocialEndTime()) && StringUtils.isBlank(s.getSocialStartTime())) && - (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01")))) ) + (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01"))))) .map(InsuranceArchivesSocialSchemePO::getEmployeeId) .collect(Collectors.toList()); @@ -5278,10 +5288,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (count % 50 == 0 || count >= ids.size()) { if (count >= ids.size()) { - getSalaryAcctProgressService(user).updateProgress(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization, BigDecimal.valueOf(0.99), false); + getSalaryAcctProgressService(user).updateProgress(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization, BigDecimal.valueOf(0.99), false); log.info("更新福利核算进度,当前进度为:{}", getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization)); } else { - getSalaryAcctProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization, count >= ids.size() ? count % 50 : 50); + getSalaryAcctProgressService(user).getAndAddCalculatedQty(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization, count >= ids.size() ? count % 50 : 50); log.info("更新福利核算进度,当前进度为:{}", getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + billMonth + "_" + paymentOrganization)); } @@ -5343,7 +5353,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(otherPerson.size() > 0) { + if (otherPerson.size() > 0) { otherPerson.forEach((id, object) -> { if (!needArchivesPerson.contains(id)) { needArchivesPerson.add(id); @@ -5417,7 +5427,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(otherCom.size() > 0) { + if (otherCom.size() > 0) { otherCom.forEach((id, object) -> { if (!needArchivesCom.contains(id)) { needArchivesCom.add(id); @@ -5508,8 +5518,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map fundperson = detailPOS.stream() .filter(item -> (finalXmidList.contains(item.getInsuranceId()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue())) || - (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue()) - && (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) + (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue()) + && (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) .collect( Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); //档案中包含的基数信息 @@ -5524,7 +5534,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(fundperson.size() > 0) { + if (fundperson.size() > 0) { fundperson.forEach((id, object) -> { if (!needArchivesPerson.contains(id)) { needArchivesPerson.add(id); @@ -5584,7 +5594,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (ufTsrysjsbfldaPO != null && (ufTsrysjsbfldaPO.getGrbl() != null || ufTsrysjsbfldaPO.getDybl() != null || ufTsrysjsbfldaPO.getGrgdz() != null || ufTsrysjsbfldaPO.getDwgdz() != null)) { // 基数也要覆盖 // if (fundBaseMap.containsKey(String.valueOf(e))) { - fundBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); + fundBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); // } } fundPerJsonMap.put(String.valueOf(e), result.toPlainString()); @@ -5613,8 +5623,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map fundCom = detailPOS.stream() .filter(item -> (finalComXmidList.contains(item.getInsuranceId()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) || - (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue()) - && (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) + (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue()) + && (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) .collect( Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); //档案中包含的基数信息 @@ -5634,7 +5644,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(fundCom.size() > 0) { + if (fundCom.size() > 0) { fundCom.forEach((id, object) -> { if (!needArchivesCom.contains(id)) { needArchivesCom.add(id); @@ -5694,7 +5704,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (ufTsrysjsbfldaPO != null && (ufTsrysjsbfldaPO.getGrbl() != null || ufTsrysjsbfldaPO.getDybl() != null || ufTsrysjsbfldaPO.getGrgdz() != null || ufTsrysjsbfldaPO.getDwgdz() != null)) { // 基数也要覆盖 // if (fundBaseMap.containsKey(String.valueOf(e))) { - fundBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); + fundBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); // } } fundComJsonMap.put(String.valueOf(e), result.toPlainString()); @@ -5748,8 +5758,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { .filter(item -> (finalXmidList.contains(item.getInsuranceId()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue())) || (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && - Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue()) && - (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1")))) + Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_PERSON.getValue()) && + (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1")))) ) .collect( Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); @@ -5765,7 +5775,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(schemeperson.size() > 0) { + if (schemeperson.size() > 0) { schemeperson.forEach((id, object) -> { if (!needArchivesPerson.contains(id)) { needArchivesPerson.add(id); @@ -5825,7 +5835,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (ufTsrysjsbfldaPO != null && (ufTsrysjsbfldaPO.getGrbl() != null || ufTsrysjsbfldaPO.getDybl() != null || ufTsrysjsbfldaPO.getGrgdz() != null || ufTsrysjsbfldaPO.getDwgdz() != null)) { // 基数也要覆盖 // if (socialBaseMap.containsKey(String.valueOf(e))) { - socialBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); + socialBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); // } } socialPerJsonMap.put(String.valueOf(e), result.toPlainString()); @@ -5853,7 +5863,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map schemeCom = detailPOS.stream() .filter(item -> (finalComXmidList.contains(item.getInsuranceId()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue())) || (Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && Objects.equals(item.getPaymentScope(), PaymentScopeEnum.SCOPE_COMPANY.getValue()) && - (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) + (item.getPaymentCycle() == null || item.getPaymentCycle() == 0 || (item.getPaymentCycle() == 1 && String.valueOf(item.getCycleSetting().charAt(monthIndex)).equals("1"))))) .collect( Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); //档案中包含的基数信息 @@ -5873,7 +5883,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }); } //避免福利档案的方案未设置基数,导致核算时遗漏这些福利项的核算,遍历下方案相关福利项,并将遗漏的福利项id添加 - if(schemeCom.size() > 0) { + if (schemeCom.size() > 0) { schemeCom.forEach((id, object) -> { if (!needArchivesCom.contains(id)) { needArchivesCom.add(id); @@ -5933,7 +5943,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (ufTsrysjsbfldaPO != null && (ufTsrysjsbfldaPO.getGrbl() != null || ufTsrysjsbfldaPO.getDybl() != null || ufTsrysjsbfldaPO.getGrgdz() != null || ufTsrysjsbfldaPO.getDwgdz() != null)) { // 基数也要覆盖 // if (socialBaseMap.containsKey(String.valueOf(e))) { - socialBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); + socialBaseMap.put(String.valueOf(e), ufTsrysjsbfldaPO.getDyjs().toPlainString()); // } } sociaComJsonMap.put(String.valueOf(e), result.toPlainString()); @@ -5956,14 +5966,15 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 对于核算月和福利起始缴纳月处于同年时,要避免根据周期缴纳福利费用时,可能出现的多余费用缴纳情况 + * * @param schemeDetail 福利方案明细 - * @param billMonth 核算月 - * @param startMonth 福利起始缴纳月 + * @param billMonth 核算月 + * @param startMonth 福利起始缴纳月 * @return */ public Map checkCycleSettingWithStartMonth(Map schemeDetail, String billMonth, String startMonth) { - String billYear = billMonth.substring(0,4); - if (StringUtils.isNotBlank(startMonth) && billYear.equals(startMonth.substring(0,4))) { + String billYear = billMonth.substring(0, 4); + if (StringUtils.isNotBlank(startMonth) && billYear.equals(startMonth.substring(0, 4))) { int startMonthIndex = Integer.parseInt(startMonth.split("-")[1]) - 1; schemeDetail.forEach((k, v) -> { if (v.getPaymentCycle() != null && v.getPaymentCycle().equals(1) && startMonthIndex != 0) { @@ -5994,6 +6005,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 根据个税扣缴义务人和账单月,获取三类福利档案中符合缴纳开始结束月区间的人员id + * * @param paymentOrganization * @param billMonth * @return @@ -6082,6 +6094,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { batchSaveInspectDetail(insuranceAccountInspectPOS); } } + public void batchDelInspectDetail(List list) { List> lists = Lists.partition(list, 100); lists.forEach(getInsuranceAccountInspectMapper()::batchDelInspectDetails); @@ -6210,7 +6223,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { for (InsuranceAccountDetailPO insuranceAccountDetailPO : insuranceAccountDetailPOS) { if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { Map socialComJson = JSON.parseObject(insuranceAccountDetailPO.getSocialComJson(), new HashMap().getClass()); socialComJson = socialComJson == null ? new HashMap<>() : socialComJson; Map finalSocialComJson = socialComJson; @@ -6229,7 +6242,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (StringUtils.isNotEmpty(insuranceAccountDetailPO.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(insuranceAccountDetailPO.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { Map fundComJson = JSON.parseObject(insuranceAccountDetailPO.getFundComJson(), new HashMap().getClass()); fundComJson = fundComJson == null ? new HashMap<>() : fundComJson; Map finalFundComJson = fundComJson; @@ -6424,7 +6437,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { supplementAccountBaseParam.setSocialPaymentBaseString(param.getSocialPaymentBaseString()); supplementAccountBaseParam.setFundPaymentBaseString(param.getFundPaymentBaseString()); supplementAccountBaseParam.setOtherPaymentBaseString(param.getOtherPaymentBaseString()); - } else if("3".equals(param.getSupplementType())) { + } else if ("3".equals(param.getSupplementType())) { supplementAccountBaseParam.setSocialPaymentPerString(param.getSocialPaymentPerString()); supplementAccountBaseParam.setSocialPaymentComString(param.getSocialPaymentComString()); supplementAccountBaseParam.setFundPaymentPerString(param.getFundPaymentPerString()); @@ -7197,7 +7210,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List list = new ArrayList<>(); for (Long id : ids) { - InsuranceAccountBatchPO batchPO= getInsuranceAccountBatchMapper().getById(id); + InsuranceAccountBatchPO batchPO = getInsuranceAccountBatchMapper().getById(id); Long paymentOrganization = batchPO.getPaymentOrganization(); String billMonth = batchPO.getBillMonth(); @@ -7216,6 +7229,31 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List> list1 = getService(user).buildQzReport(list, (long) user.getUID(), false); + List columns = Lists.newArrayList(); + columns.add(new WeaTableColumnGroup("150", "公司名称", "paymentOrganizationName")); + columns.add(new WeaTableColumnGroup("150", "工号", "workcode")); + columns.add(new WeaTableColumnGroup("150", "姓名", "userName")); + columns.add(new WeaTableColumnGroup("150", "一级部门", "firstDepartmentName")); + columns.add(new WeaTableColumnGroup("150", "二级部门", "secondDepartmentName")); + columns.add(new WeaTableColumnGroup("150", "实际工作地", "actualWorkplace")); + columns.add(new WeaTableColumnGroup("150", "劳动关系地", "laborWorkplace")); + columns.add(new WeaTableColumnGroup("150", "岗位名称", "jobtitleName")); + columns.add(new WeaTableColumnGroup("150", "进入日期", "companystartdate")); + columns.add(new WeaTableColumnGroup("150", "离职日期", "dismissdate")); + columns.add(new WeaTableColumnGroup("150", "社保基数", "socialBase")); + columns.add(new WeaTableColumnGroup("150", "公积金基数", "fundBase")); + + columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "失业保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "工伤保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "生育保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "住房公积金", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + return null; } @@ -7250,7 +7288,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // 钱智 公积金差异 if (StringUtils.isNotEmpty(item.getFundSpecialJson())) { Map fundSpecialJson = JSON.parseObject(item.getFundSpecialJson(), new HashMap().getClass()); - if(fundSpecialJson!=null){ + if (fundSpecialJson != null) { Map fundComJson = JSON.parseObject(item.getFundComJson(), new HashMap().getClass()); fundComJson = fundComJson == null ? new HashMap() : fundComJson; Map finalFundComJson = fundComJson; @@ -7278,7 +7316,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { BigDecimal socialPaySum = new BigDecimal("0"); BigDecimal[] socialSpecialSum = {new BigDecimal(0)}; for (InsuranceAccountDetailPO item : pos) { - if (StringUtils.isNotBlank(item.getSocialSum()) && SalaryEntityUtil.string2DoubleDefault0(item.getSocialSum()) != 0.0 ) { + if (StringUtils.isNotBlank(item.getSocialSum()) && SalaryEntityUtil.string2DoubleDefault0(item.getSocialSum()) != 0.0) { if (!PaymentStatusEnum.BALANCE.getValue().equals(item.getPaymentStatus())) { socialNum += 1; } @@ -7287,7 +7325,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // 钱智 社保差异 if (StringUtils.isNotEmpty(item.getSocialSpecialJson())) { Map socialSpecialJson = JSON.parseObject(item.getSocialSpecialJson(), new HashMap().getClass()); - if(socialSpecialJson!=null){ + if (socialSpecialJson != null) { Map socialComJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); socialComJson = socialComJson == null ? new HashMap() : socialComJson; Map finalSocialComJson = socialComJson; @@ -7317,7 +7355,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { public int checkIfBusinessAccounting(InsuranceAccountBatchPO param) { List list = getSIAccountUtilMapper().checkIfBusinessaccounting(param.getId()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); - return (int) list.stream().filter( f -> { + return (int) list.stream().filter(f -> { String billMonthBySob = sdf.format(convertSalaryMonthToBillMonth(f.getSalaryMonth(), f.getSocialSecurityCycleType())); return f.getBillmonth().equals(billMonthBySob.substring(0, 7)); }).count(); @@ -7351,6 +7389,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 正常缴纳页 删除社保核算人员 + * * @param param */ @Override @@ -7383,6 +7422,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 正常缴纳页 添加社保核算人员 + * * @param param */ @Override @@ -7412,20 +7452,20 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //过滤出需要核算的人员,即福利档案基础信息表中runStatus为正在缴纳和待减员的人员 List baseInfoPOList = getInsuranceBaseInfoMapper().listByEmployeeIds(empIds); List canAccountIds = baseInfoPOList.stream() - .filter(f->f.getPaymentOrganization().equals(param.getPaymentOrganization())) + .filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())) .map(InsuranceArchivesBaseInfoPO::getEmployeeId) .collect(Collectors.toList()); //20231122逻辑优化,过滤出不在起始缴纳月和最后缴纳月区间的人员 List empIdsInPayMonthRange = listCanPayEmpIds(param.getPaymentOrganization(), param.getBillMonth()); - empIds = empIds.stream().filter(f->canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); + empIds = empIds.stream().filter(f -> canAccountIds.contains(f) && empIdsInPayMonthRange.contains(f)).collect(Collectors.toList()); List socials = getSIArchivesService(user).getSocialByEmployeeIds(empIds); //过滤出目标个税扣缴义务人相关信息 socials = socials.stream().filter(f -> f.getPaymentOrganization().equals(param.getPaymentOrganization())).collect(Collectors.toList()); List emp1 = socials.stream() .filter(s -> !(StringUtils.isBlank(s.getSocialEndTime()) && StringUtils.isBlank(s.getSocialStartTime())) && - (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01")))) ) + (StringUtils.isBlank(s.getSocialEndTime()) || (SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01") != null && !SalaryDateUtil.stringToDate(param.getBillMonth() + "-01").after(SalaryDateUtil.stringToDate(s.getSocialEndTime() + "-01"))))) .map(InsuranceArchivesSocialSchemePO::getEmployeeId) .collect(Collectors.toList()); @@ -7453,7 +7493,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List conNotAddEmpIds = param.getIncludes().stream().filter(empId -> !finalValidIds.contains(empId)).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(conNotAddEmpIds)) { String canNotAddName = getSalaryEmployeeService(user).listByIds(conNotAddEmpIds).stream().map(DataCollectionEmployee::getUsername).collect(Collectors.joining(",")); - throw new SalaryRunTimeException("添加失败,员工:" +canNotAddName + ",社保、公积金、其他福利需至少有一种在当前账单月需缴纳,并且社保档案需为在缴员工"); + throw new SalaryRunTimeException("添加失败,员工:" + canNotAddName + ",社保、公积金、其他福利需至少有一种在当前账单月需缴纳,并且社保档案需为在缴员工"); } addCommonEmpAndAccount(param.getBillMonth(), empIds, param.getPaymentOrganization()); @@ -7462,6 +7502,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 添加正常缴纳人员,并核算 + * * @param billMonth * @param ids * @param paymentOrganization From 044b02e002166e20a6749d08b01656158f54b460 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Nov 2025 16:08:08 +0800 Subject: [PATCH 69/84] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../InsuranceAccountDetailMapper.xml | 3 - .../salary/service/SIAccountService.java | 59 ++++++++---- .../service/impl/RecordsBuildServiceImpl.java | 68 ++++++++++---- .../service/impl/SIAccountServiceImpl.java | 89 +++++++++++++++---- .../salary/web/SIAccountController.java | 35 +++++++- 5 files changed, 202 insertions(+), 52 deletions(-) diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 773ce1cd8..64a6e8496 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -1815,9 +1815,6 @@ from (select * from hrsa_bill_detail where delete_type = 0 and payment_status=0) a left join (select * from hrsa_bill_detail where delete_type = 0 and payment_status=1) b on a.employee_id = b.employee_id - left join hrmresource e on e.ID = a.employee_id - LEFT JOIN hrmdepartment d ON d.id = e.departmentid - LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1 where a.payment_organization = #{paymentOrganization} and a.bill_month = #{billMonth} diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index 2ae58ce17..3f55aaad5 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -16,7 +16,6 @@ import java.util.Map; /** * @Author weaver_cl - * * @Date 2022/4/11 * @Version V1.0 **/ @@ -24,55 +23,63 @@ public interface SIAccountService { /** * 查询台账列表 + * * @param insuranceAccountBatchParam * @return */ - Map listPage(InsuranceAccountBatchParam insuranceAccountBatchParam); + Map listPage(InsuranceAccountBatchParam insuranceAccountBatchParam); /** * 获取正常缴纳列表 + * * @param insuranceAccountDetailParam * @return */ - Map listCommonPage(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listCommonPage(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 根据姓名名获取正常缴纳列表 + * * @param insuranceAccountDetailParam * @return */ - Map listCommonPageByName(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listCommonPageByName(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 获取补缴缴纳列表 + * * @param insuranceAccountDetailParam * @return */ - Map listSupplementaryPage(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listSupplementaryPage(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 获取退差列表 + * * @param insuranceAccountDetailParam * @return */ - Map listRecessionPage(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listRecessionPage(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 获取补差列表 + * * @param insuranceAccountDetailParam * @return */ - Map listBalancePage(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map listBalancePage(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 根据姓名获取补缴缴纳列表 + * * @param insuranceAccountDetailParam * @return */ - Map supplementaryByNameList(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map supplementaryByNameList(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 获取核算月份备注填写表单 + * * @param params * @return */ @@ -80,12 +87,14 @@ public interface SIAccountService { /** * 保存并进入核算 + * * @param param */ String save(AccountParam param); /** * 新建核算并归档 + * * @param param * @return */ @@ -93,48 +102,56 @@ public interface SIAccountService { /** * 正常缴纳页核算 + * * @param saveCommonAccountParam */ void commonAccount(SaveCommonAccountParam saveCommonAccountParam); /** * 删除月份表单 + * * @param accountParam */ void delete(AccountParam accountParam); /** * 添加正常缴纳人员 + * * @param accountParam */ void saveCommonAccount(SaveCommonAccountParam accountParam); /** * 添加补缴人员 + * * @param saveSupplementaryAccountParam */ void saveSupplementaryAccount(SaveSupplementaryAccountParam saveSupplementaryAccountParam); /** * 删除正常缴纳人员 + * * @param accountParam */ void deleteCommonAccount(SaveCommonAccountParam accountParam); /** * 删除补缴人员 + * * @param param */ void deleteSupplementaryAccount(SaveCommonAccountParam param); /** * 台账归档 + * * @param accountParam */ void file(AccountParam accountParam); /** * 重置核算异常 + * * @param ids */ void unconfirmed(Collection ids); @@ -142,6 +159,7 @@ public interface SIAccountService { /** * 获取核算异常列表页是否导出档案开关 + * * @param billMonth */ Map buttonCheck(String billMonth); @@ -149,6 +167,7 @@ public interface SIAccountService { /** * 忽略核算异常 + * * @param longs */ void ignore(Collection longs); @@ -160,41 +179,46 @@ public interface SIAccountService { /** * 人员异动 + * * @param insuranceAccountDetailParam */ - Map changeList(InsuranceAccountDetailParam insuranceAccountDetailParam); + Map changeList(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 核算核算异常,重新核算 + * * @param inspectAccountParam */ void accountInspect(InspectAccountParam inspectAccountParam); /** * 核算失败列表 + * * @param param */ - Map getInspectTable(InsuranceAccountDetailParam param); - + Map getInspectTable(InsuranceAccountDetailParam param); /** * 正常缴纳添加缴纳人员表单 + * * @param params * @return */ - Map getCommonForm(Map params); + Map getCommonForm(Map params); /** * 补缴添加缴纳人员表单 + * * @param params * @return */ - Map getSupplementaryForm(Map params); + Map getSupplementaryForm(Map params); /** * 总览 + * * @param param * @return */ @@ -207,7 +231,7 @@ public interface SIAccountService { * @param employeeIds * @return */ - List> welfareData(String billMonth, List employeeIds,Long taxAgentId); + List> welfareData(String billMonth, List employeeIds, Long taxAgentId); /** * 给套账提供字段名对应字段释义 @@ -295,18 +319,21 @@ public interface SIAccountService { /** * 补缴合计行 + * * @param insuranceAccountDetailParam */ Map listSupplementarySum(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 退差合计列 + * * @param insuranceAccountDetailParam */ Map listRecessionSum(InsuranceAccountDetailParam insuranceAccountDetailParam); /** * 补差合计列 + * * @param insuranceAccountDetailParam */ Map listBalanceSum(InsuranceAccountDetailParam insuranceAccountDetailParam); @@ -333,7 +360,9 @@ public interface SIAccountService { void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam); - Object qzReport(QZInsuranceAccountBatchParam qzInsuranceAccountBatchParam); + Map qzReport(QZInsuranceAccountBatchParam qzInsuranceAccountBatchParam); + + XSSFWorkbook exportQZReport(QZInsuranceAccountBatchParam param); } diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index a45f72839..bcbf482ec 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -588,9 +588,6 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialPerBase", v); } - if (Long.parseLong(k) == 9001L) { - record.put("socialBase", v); - } }); } Map socialComJson = JSON.parseObject(item.getSocialPaymentComBaseString(), new TypeReference>() { @@ -614,9 +611,6 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "socialBase", v); } - if (Long.parseLong(k) == 9001L) { - record.put("socialBase", v); - } }); } } @@ -641,9 +635,6 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundPerBase", v); } - if (Long.parseLong(k) == 9006L) { - record.put("fundBase", v); - } }); } Map fundComJson = JSON.parseObject(item.getFundPaymentComBaseString(), new TypeReference>() { @@ -667,9 +658,6 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ if (insuranceIdList.contains(Long.valueOf(k))) { record.put(k + "fundBase", v); } - if (Long.parseLong(k) == 9006L) { - record.put("fundBase", v); - } }); } } @@ -727,6 +715,16 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ }); } + } + //补缴 + if (StringUtils.isNotEmpty(item.getBSocialPerJson())) { + Map socialJson = JSON.parseObject(item.getBSocialPerJson(), new HashMap().getClass()); + if (socialJson != null) { + socialJson.forEach((k, v) -> { + record.put(k + "bSocialPer", (String) v); + }); + } + } // // // 钱智 社保差异 @@ -760,6 +758,15 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ }); } + } + if (StringUtils.isNotEmpty(item.getBFundPerJson())) { + Map fundPerJson = JSON.parseObject(item.getBFundPerJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bFundPer", (String) v); + }); + } + } // // 钱智 公积金差异 // final BigDecimal[] fundSpecialSum = {new BigDecimal(0)}; @@ -791,6 +798,14 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put(k + "otherPer", (String) v); }); } + } + if (StringUtils.isNotEmpty(item.getBOtherPerJson())) { + Map fundPerJson = JSON.parseObject(item.getBOtherPerJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bOtherPer", (String) v); + }); + } } record.put("otherPerSum", item.getOtherPerSum()); @@ -802,9 +817,14 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put(k + "socialCom", (String) v); }); } - fundPerJson.forEach((k, v) -> { - record.put(k + "socialCom", (String) v); - }); + } + if (StringUtils.isNotEmpty(item.getBSocialComJson())) { + Map fundPerJson = JSON.parseObject(item.getBSocialComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bSocialCom", (String) v); + }); + } } record.put("socialComSum", item.getSocialComSum()); if (StringUtils.isNotEmpty(item.getFundComJson())) { @@ -815,6 +835,15 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ }); } + } + if (StringUtils.isNotEmpty(item.getBFundComJson())) { + Map fundPerJson = JSON.parseObject(item.getBFundComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bFundCom", (String) v); + }); + } + } record.put("fundComSum", item.getFundComSum()); if (StringUtils.isNotEmpty(item.getOtherComJson())) { @@ -825,6 +854,15 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ }); } + } + if (StringUtils.isNotEmpty(item.getBOtherComJson())) { + Map fundPerJson = JSON.parseObject(item.getBOtherComJson(), new HashMap().getClass()); + if (fundPerJson != null) { + fundPerJson.forEach((k, v) -> { + record.put(k + "bOtherCom", (String) v); + }); + } + } record.put("otherComSum", item.getOtherComSum()); diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 234aeea76..a1fdb4ee7 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -7204,11 +7204,11 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } @Override - public Object qzReport(QZInsuranceAccountBatchParam qzInsuranceAccountBatchParam) { + public Map qzReport(QZInsuranceAccountBatchParam param) { - List ids = qzInsuranceAccountBatchParam.getIds(); + List ids = param.getIds(); - List list = new ArrayList<>(); + List dtos = new ArrayList<>(); for (Long id : ids) { InsuranceAccountBatchPO batchPO = getInsuranceAccountBatchMapper().getById(id); Long paymentOrganization = batchPO.getPaymentOrganization(); @@ -7224,10 +7224,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //系统人员福利台账明细 List qzReportListDTOS = getInsuranceAccountDetailMapper().qzReportList(queryParam); encryptUtil.decryptList(qzReportListDTOS, QZReportListDTO.class); - list.addAll(qzReportListDTOS); + dtos.addAll(qzReportListDTOS); } - List> list1 = getService(user).buildQzReport(list, (long) user.getUID(), false); + List> list = getService(user).buildQzReport(dtos, (long) user.getUID(), false); List columns = Lists.newArrayList(); columns.add(new WeaTableColumnGroup("150", "公司名称", "paymentOrganizationName")); @@ -7240,22 +7240,75 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { columns.add(new WeaTableColumnGroup("150", "岗位名称", "jobtitleName")); columns.add(new WeaTableColumnGroup("150", "进入日期", "companystartdate")); columns.add(new WeaTableColumnGroup("150", "离职日期", "dismissdate")); - columns.add(new WeaTableColumnGroup("150", "社保基数", "socialBase")); - columns.add(new WeaTableColumnGroup("150", "公积金基数", "fundBase")); + columns.add(new WeaTableColumnGroup("150", "社保基数", "9001socialBase")); + columns.add(new WeaTableColumnGroup("150", "公积金基数", "9006fundBase")); - columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "失业保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "工伤保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "生育保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "住房公积金", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); - columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "fundBase"), new WeaTableColumnGroup("150", "单位补缴额", "fundBase")))); + columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9001socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9001bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9002socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9002bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "失业保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9004socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9004bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "工伤保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9003socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9003bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "生育保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9005socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9005bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", ""), new WeaTableColumnGroup("150", "单位补缴额", "")))); + columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", ""), new WeaTableColumnGroup("150", "单位补缴额", "")))); + columns.add(new WeaTableColumnGroup("150", "住房公积金", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9006fundCom"), new WeaTableColumnGroup("150", "单位补缴额", "9006bFundCom")))); + columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9001socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9001bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9002socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9002bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "失业保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9004socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9004bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", ""), new WeaTableColumnGroup("150", "个人补缴额", "")))); + columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", ""), new WeaTableColumnGroup("150", "个人补缴额", "")))); + columns.add(new WeaTableColumnGroup("150", "单位超额-社保合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "socialSpecialSum")))); + columns.add(new WeaTableColumnGroup("150", "住房公积金", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9006fundPer"), new WeaTableColumnGroup("150", "个人补缴额", "9006bFundPer")))); + columns.add(new WeaTableColumnGroup("150", "单位超额-公积金合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "fundSpecialSum")))); + columns.add(new WeaTableColumnGroup("150", "社保公积金单位合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "comSum"), new WeaTableColumnGroup("150", "单位补缴额", "bComSum")))); + columns.add(new WeaTableColumnGroup("150", "社保公积金个人合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "perSum"), new WeaTableColumnGroup("150", "个人补缴额", "bPerSum")))); + columns.add(new WeaTableColumnGroup("150", "总计", "",Lists.newArrayList(new WeaTableColumnGroup("150", "总计", "total")))); + columns.add(new WeaTableColumnGroup("150", "服务费", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", ""), new WeaTableColumnGroup("150", "单位补缴额", "")))); + columns.add(new WeaTableColumnGroup("150", "服务费", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", ""), new WeaTableColumnGroup("150", "个人补缴额", "")))); + + Map result = new HashMap<>(); + result.put("columns", columns); + result.put("list", list); + + return result; + } + + @Override + public XSSFWorkbook exportQZReport(QZInsuranceAccountBatchParam param) { + + Map result = qzReport(param); + List headerColumnGroup = Lists.newArrayList(); + List weaTableColumns = (List)result.get("columns"); + + parseHeader(headerColumnGroup, weaTableColumns); + + List headerList = new ArrayList<>(weaTableColumns); + List> resultMapList = (List>)result.get("list"); - return null; + + // excel导出的数据 + List> rows = new ArrayList<>(); + rows.add(headerList); + for (Map map : resultMapList) { + List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); + for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { + row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); + } + rows.add(row); + } + + String sheetName = "社保公积金预算数据"; + return ExcelUtilPlus.genWorkbookWithChildTitleColumnWithExcelFormat(rows, sheetName, false); + } + + private void parseHeader(List headerList, List weaTableColumns) { + for (WeaTableColumnGroup weaTableColumnGroup : weaTableColumns) { + if (CollectionUtils.isEmpty(weaTableColumnGroup.getChildren())) { + headerList.add(weaTableColumnGroup); + continue; + } + parseHeader(headerList, weaTableColumnGroup.getChildren()); + } } public void accountOtherView(InsuranceAccountViewListDTO dto, List pos) { diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index 7d5f6c605..61df28ccd 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -1234,7 +1234,40 @@ public class SIAccountController { @Produces(MediaType.APPLICATION_JSON) public String qzReport(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody QZInsuranceAccountBatchParam insuranceAccountBatchParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getService(user)::qzReport, insuranceAccountBatchParam); + return new ResponseResult>(user).run(getService(user)::qzReport, insuranceAccountBatchParam); } + /** + * 导出在线对比 + * + * @return + */ + @POST + @Path("/exportQZReport") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportContrast(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody QZInsuranceAccountBatchParam param) { + + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getService(user).exportQZReport(param); + String fileName = "社保公积金预算数据-" + LocalDate.now(); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("社保公积金预算数据导出异常", e); + throw e; + } + } + + } From 55238f1dfe3ac66e7eadcb4363ca87a6c0484c77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 28 Nov 2025 13:27:32 +0800 Subject: [PATCH 70/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E9=9C=80?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/prop/hrmSalary.properties | 2 +- .../service/impl/RecordsBuildServiceImpl.java | 18 ++++++++++++++++-- .../service/impl/SIAccountServiceImpl.java | 2 ++ .../service/impl/SalaryCalcTaxServiceImpl.java | 5 ++--- .../wrapper/SalaryAcctResultWrapper.java | 1 + 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index 09f610c2b..df9ab4b74 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=3.0.3.2510.01.ts +version=3.0.4.2510.01.ts openFormulaForcedEditing=false \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index bcbf482ec..6eb3afc46 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -33,6 +33,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.User; import weaver.hrm.company.DepartmentComInfo; @@ -530,8 +531,17 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ List employeeIds = list.stream().map(item -> item.getEmployeeId()).distinct().collect(Collectors.toList()); List employeeByIds = new ArrayList<>(); List> partition = Lists.partition(employeeIds, 1000); - for (List longs : partition) { - employeeByIds.addAll(getSalaryEmployeeService(user).getEmployeeByIdsAll(longs)); + Map map = new HashMap<>(); + for (List ids : partition) { + employeeByIds.addAll(getSalaryEmployeeService(user).getEmployeeByIdsAll(ids)); + //获取实际工作地 + RecordSet rs = new RecordSet(); + String sql =String.format("select id ,field64 from cus_fielddata where scopeid =3 and id in(%s)",ids.stream().map(Object::toString).collect(Collectors.joining(","))) ; + rs.executeQuery(sql); + while (rs.next()) { + String processField = rs.getString("id"); + String salaryName = rs.getString("field64"); + } } if (CollectionUtils.isEmpty(employeeByIds)) { return result; @@ -542,6 +552,10 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ Map paymentMap = paymentList.stream().collect(Collectors.toMap(TaxAgentPO::getId, Function.identity())); Map collect = employeeByIds.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, Function.identity())); DepartmentComInfo departmentComInfo = new DepartmentComInfo(); + + + + list.forEach(item -> { Map record = new HashMap<>(); DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()); diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index a1fdb4ee7..bcca1e74a 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -7229,6 +7229,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List> list = getService(user).buildQzReport(dtos, (long) user.getUID(), false); + + List columns = Lists.newArrayList(); columns.add(new WeaTableColumnGroup("150", "公司名称", "paymentOrganizationName")); columns.add(new WeaTableColumnGroup("150", "工号", "workcode")); diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 808f31ddb..e07316d24 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -225,7 +225,6 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe // 查询薪资核算记录关联的异步算税请求记录 List salaryAcctCalcTaxReqs = getSalaryAcctCalcTaxReqService(user).listByRecordId(salaryAcctRecord.getId()); if (CollectionUtils.isEmpty(salaryAcctCalcTaxReqs)) { - getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,"请先计算个税再获取反馈"); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(268184, "请先计算个税再获取反馈")); } // 查询薪资核算记录关联的薪资账套个税字段对应 @@ -313,10 +312,10 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe getSalaryAcctResultService(user).batchSave(addResultPOS); getSalaryAcctResultService(user).batchUpdate(updateResultPOS); getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); - //更新薪资核算记录最后操作日期 - getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.RESULT.getDefaultLabel()); //清空异常信息 getSalaryAcctRecordService(user).updateMsg(salaryAcctRecordId,""); + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordId, new Date(), SalaryAcctOptEnum.RESULT.getDefaultLabel()); // 记录日志 getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.GET_CALC_TAX_FEEDBACK); } diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index b5b8d4e2e..e52b107d4 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -106,6 +106,7 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult Map datas = new HashMap<>(); datas.put("pageInfo", page); datas.put("columns", columns); + datas.put("msg", salaryAcctRecordPO.getMsg()); return datas; } From 00fc87ffd83e0efd568d6a45eaf1e95e2b7d5bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 28 Nov 2025 15:41:42 +0800 Subject: [PATCH 71/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=B9=B4=E7=BB=88=E5=A5=96=E7=94=B3=E6=8A=A5=E8=A1=A8null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java index e9500c680..091af8916 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationBO.java @@ -722,6 +722,7 @@ public class TaxDeclarationBO { private static String findStringValue(String fieldCode, Map> resultMap, Map salaryItemMap) { return resultMap.getOrDefault(salaryItemMap.getOrDefault(fieldCode, 0L), Collections.emptyList()).stream() .map(SalaryAcctResultPO::getResultValue) + .filter(Objects::nonNull) .findFirst().orElse(""); } From c3b2dc298268e869f50e5b0cd5f354d69c2953b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 1 Dec 2025 11:35:41 +0800 Subject: [PATCH 72/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/customization/salary/hrmSalaryQZ.properties | 3 ++ .../service/impl/RecordsBuildServiceImpl.java | 37 ++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties diff --git a/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties new file mode 100644 index 000000000..98908b874 --- /dev/null +++ b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties @@ -0,0 +1,3 @@ +# ????? +actualWorkplaceField=field64 + diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index 6eb3afc46..299acd3da 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -17,6 +17,7 @@ import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.siaccount.BillStatusEnum; import com.engine.salary.enums.siaccount.ResourceFromEnum; import com.engine.salary.enums.sicategory.PaymentScopeEnum; +import com.engine.salary.mapper.SQLMapper; import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; import com.engine.salary.mapper.taxagent.TaxAgentMapper; @@ -34,6 +35,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.conn.RecordSet; +import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; import weaver.hrm.company.DepartmentComInfo; @@ -76,6 +78,10 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ return ServiceUtil.getService(SIArchivesServiceImpl.class, user); } + private SQLMapper getSQLMapper() { + return MapperProxyFactory.getProxy(SQLMapper.class); + } + @Override public List> buildCommonRecords(List list, Long employeeId, boolean dynamicEmpInfo) { // boolean welBaseDiffSign = siArchivesBiz.isDiffWelBase(); @@ -531,18 +537,39 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ List employeeIds = list.stream().map(item -> item.getEmployeeId()).distinct().collect(Collectors.toList()); List employeeByIds = new ArrayList<>(); List> partition = Lists.partition(employeeIds, 1000); - Map map = new HashMap<>(); + + + BaseBean bb = new BaseBean(); + String actualWorkplaceField = bb.getPropValue("hrmSalaryQZ", "actualWorkplaceField"); + Map actualWorkplaceMap = new HashMap<>(); for (List ids : partition) { employeeByIds.addAll(getSalaryEmployeeService(user).getEmployeeByIdsAll(ids)); //获取实际工作地 RecordSet rs = new RecordSet(); - String sql =String.format("select id ,field64 from cus_fielddata where scopeid =3 and id in(%s)",ids.stream().map(Object::toString).collect(Collectors.joining(","))) ; + String sql = String.format("select id ,%s from cus_fielddata where scopeid =3 and id in(%s)", actualWorkplaceField, ids.stream().map(Object::toString).collect(Collectors.joining(","))); rs.executeQuery(sql); while (rs.next()) { String processField = rs.getString("id"); - String salaryName = rs.getString("field64"); + String actualWorkplace = rs.getString(actualWorkplaceField); + actualWorkplaceMap.put(Long.parseLong(processField), actualWorkplace); } } + + Map laborWorkplaceMap = new HashMap<>(); + for (List ids : partition) { + //劳动关系地 + RecordSet rs = new RecordSet(); + String sql = String.format("select a.ygxm,b.ztmc from uf_htxy a left join uf_htzt b on a.htgsmc = b.id where a.htlx=0 and a.ygxm in (%s) ORDER BY a.htqsrq desc", ids.stream().map(Object::toString).collect(Collectors.joining(","))); + rs.executeQuery(sql); + while (rs.next()) { + String processField = rs.getString("ygxm"); + String laborWorkplace = rs.getString("ztmc"); + if (!laborWorkplaceMap.containsKey(Long.parseLong(processField))) { + laborWorkplaceMap.put(Long.parseLong(processField), laborWorkplace); + } + } + } + if (CollectionUtils.isEmpty(employeeByIds)) { return result; } @@ -554,8 +581,6 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ DepartmentComInfo departmentComInfo = new DepartmentComInfo(); - - list.forEach(item -> { Map record = new HashMap<>(); DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()); @@ -563,6 +588,8 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("paymentOrganizationName", paymentMap.get(item.getSocialPayOrg()) == null ? "" : paymentMap.get(item.getSocialPayOrg()).getName()); record.put("workcode", StringUtils.isBlank(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()); record.put("userName", simpleEmployee.getUsername()); + record.put("actualWorkplace", actualWorkplaceMap.getOrDefault(item.getEmployeeId(), "")); + record.put("laborWorkplace", laborWorkplaceMap.getOrDefault(item.getEmployeeId(), "")); String[] depList = new String[0]; try { depList = departmentComInfo.getDepartmentRealPath(simpleEmployee.getDepartmentId().toString(), ",", "").split(","); From 37e9e06c56cabddc6c5bf107c9d39a2e25d47c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 1 Dec 2025 15:07:00 +0800 Subject: [PATCH 73/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E5=B0=81=E5=AD=98?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Mysql/sql202512010103SHQZJRXXFW.sql | 1 + .../SQLServer/sql202512010103SHQZJRXXFW.sql | 2 + .../siaccount/param/AccountBatParam.java | 3 + .../siaccount/po/InsuranceAccountBatchPO.java | 5 ++ .../engine/salary/enums/siaccount/FCEnum.java | 44 ++++++++++++ .../salary/service/SIAccountService.java | 1 + .../service/impl/SIAccountServiceImpl.java | 72 +++++++++++++++++-- .../salary/web/SIAccountController.java | 8 +++ 8 files changed, 129 insertions(+), 7 deletions(-) create mode 100644 resource/sqlupgrade/Mysql/sql202512010103SHQZJRXXFW.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202512010103SHQZJRXXFW.sql create mode 100644 src/com/engine/salary/enums/siaccount/FCEnum.java diff --git a/resource/sqlupgrade/Mysql/sql202512010103SHQZJRXXFW.sql b/resource/sqlupgrade/Mysql/sql202512010103SHQZJRXXFW.sql new file mode 100644 index 000000000..225184460 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202512010103SHQZJRXXFW.sql @@ -0,0 +1 @@ +ALTER TABLE hrsa_bill_batch ADD COLUMN fc int(255) NULL; \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202512010103SHQZJRXXFW.sql b/resource/sqlupgrade/SQLServer/sql202512010103SHQZJRXXFW.sql new file mode 100644 index 000000000..af25ff5f3 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202512010103SHQZJRXXFW.sql @@ -0,0 +1,2 @@ +alter table hrsa_bill_batch add fc int +GO \ No newline at end of file diff --git a/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java b/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java index fa9de96fc..ae3c955ea 100644 --- a/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java +++ b/src/com/engine/salary/entity/siaccount/param/AccountBatParam.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.siaccount.param; +import com.engine.salary.enums.siaccount.FCEnum; import com.engine.salary.util.valid.DataCheck; import lombok.AllArgsConstructor; import lombok.Builder; @@ -37,4 +38,6 @@ public class AccountBatParam { private List ids; + private FCEnum fc; + } diff --git a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java index 5b610e6da..38c074e89 100644 --- a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java +++ b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountBatchPO.java @@ -143,6 +143,11 @@ public class InsuranceAccountBatchPO { private Long jobcallId; private String status; + /** + * 封存状态,0-未封存 1-已封存 + */ + private Integer fc; + private Set opts; diff --git a/src/com/engine/salary/enums/siaccount/FCEnum.java b/src/com/engine/salary/enums/siaccount/FCEnum.java new file mode 100644 index 000000000..bc6258cc7 --- /dev/null +++ b/src/com/engine/salary/enums/siaccount/FCEnum.java @@ -0,0 +1,44 @@ +package com.engine.salary.enums.siaccount; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Objects; + +public enum FCEnum implements BaseEnum { + JF(0, "解封", 91870), + + FC(1, "封存", 91862); + + private Integer value; + + private String defaultLable; + + private Integer labelId; + + FCEnum(Integer value, String defaultLable, Integer labelId) { + this.value = value; + this.defaultLable = defaultLable; + this.labelId = labelId; + } + + public Integer getValue() { + return this.value; + } + + public Integer getLabelId() { + return this.labelId; + } + + public String getDefaultLabel() { + return this.defaultLable; + } + + public static FCEnum parseByValue(Integer value){ + for (FCEnum e : FCEnum.values()) { + if(Objects.equals(e.getValue(), value)){ + return e; + } + } + return JF; + } +} diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index 3f55aaad5..55a262586 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -364,5 +364,6 @@ public interface SIAccountService { XSSFWorkbook exportQZReport(QZInsuranceAccountBatchParam param); + String batFC(AccountBatParam batParam); } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index bcca1e74a..aff4aa957 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -1600,6 +1600,14 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { // if (num > 0) { // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "已被薪酬核算给核算过,无法重新核算!")); // } + //封存状态,不允许重新核算 + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(param.getId()); + Integer fc = po.getFc(); + if (FCEnum.parseByValue(fc) == FCEnum.FC) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "已封存,无法重新核算!")); + } + + param.setBillStatus(0); // getSiAccountBiz(user).updateById(param); updateById(param); @@ -7204,7 +7212,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } @Override - public Map qzReport(QZInsuranceAccountBatchParam param) { + public Map qzReport(QZInsuranceAccountBatchParam param) { List ids = param.getIds(); @@ -7230,7 +7238,6 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List> list = getService(user).buildQzReport(dtos, (long) user.getUID(), false); - List columns = Lists.newArrayList(); columns.add(new WeaTableColumnGroup("150", "公司名称", "paymentOrganizationName")); columns.add(new WeaTableColumnGroup("150", "工号", "workcode")); @@ -7263,7 +7270,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { columns.add(new WeaTableColumnGroup("150", "单位超额-公积金合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "fundSpecialSum")))); columns.add(new WeaTableColumnGroup("150", "社保公积金单位合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "comSum"), new WeaTableColumnGroup("150", "单位补缴额", "bComSum")))); columns.add(new WeaTableColumnGroup("150", "社保公积金个人合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "perSum"), new WeaTableColumnGroup("150", "个人补缴额", "bPerSum")))); - columns.add(new WeaTableColumnGroup("150", "总计", "",Lists.newArrayList(new WeaTableColumnGroup("150", "总计", "total")))); + columns.add(new WeaTableColumnGroup("150", "总计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "总计", "total")))); columns.add(new WeaTableColumnGroup("150", "服务费", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", ""), new WeaTableColumnGroup("150", "单位补缴额", "")))); columns.add(new WeaTableColumnGroup("150", "服务费", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", ""), new WeaTableColumnGroup("150", "个人补缴额", "")))); @@ -7275,17 +7282,16 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { } @Override - public XSSFWorkbook exportQZReport(QZInsuranceAccountBatchParam param) { + public XSSFWorkbook exportQZReport(QZInsuranceAccountBatchParam param) { Map result = qzReport(param); List headerColumnGroup = Lists.newArrayList(); - List weaTableColumns = (List)result.get("columns"); + List weaTableColumns = (List) result.get("columns"); parseHeader(headerColumnGroup, weaTableColumns); List headerList = new ArrayList<>(weaTableColumns); - List> resultMapList = (List>)result.get("list"); - + List> resultMapList = (List>) result.get("list"); // excel导出的数据 @@ -7303,6 +7309,58 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return ExcelUtilPlus.genWorkbookWithChildTitleColumnWithExcelFormat(rows, sheetName, false); } + @Override + public String batFC(AccountBatParam batParam) { + List ids = batParam.getIds(); + String msg = ""; + int success = 0; + int fail = 0; + for (Long id : ids) { + try { + InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id); + fc(po.getBillMonth(), po.getPaymentOrganization(), batParam.getFc()); + success++; + } catch (Exception e) { + log.error("批量封存异常,param {}", batParam, e); + msg += e.getMessage(); + fail++; + } + } + return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); + } + + + public void fc(String billMonth, Long paymentOrganization, FCEnum fc) { + InsuranceAccountBatchPO insuranceAccountBatchPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, paymentOrganization); + encryptUtil.decrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); + SalaryAssert.notNull(insuranceAccountBatchPO, SalaryI18nUtil.getI18nLabel(0, "月份账单不存在")); + + + //封存 + if (fc == FCEnum.FC && !Objects.equals(insuranceAccountBatchPO.getBillStatus(), BillStatusEnum.ARCHIVED.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "未归档")); + } + + insuranceAccountBatchPO.setFc(fc.getValue()); + encryptUtil.encrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); + getInsuranceAccountBatchMapper().updateById(insuranceAccountBatchPO); + + + //记录操作日志 + encryptUtil.decrypt(insuranceAccountBatchPO, InsuranceAccountBatchPO.class); + TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(insuranceAccountBatchPO.getPaymentOrganization()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId("" + insuranceAccountBatchPO.getId()); + loggerContext.setTargetName(taxAgentInfo.getName() + "-" + insuranceAccountBatchPO.getBillMonth()); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "福利台账-封存")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "福利台账-封存") + + ": " + taxAgentInfo.getName() + "-" + insuranceAccountBatchPO.getBillMonth()); + loggerContext.setNewValues(insuranceAccountBatchPO); + SalaryElogConfig.siAccountLoggerTemplate.write(loggerContext); + } + private void parseHeader(List headerList, List weaTableColumns) { for (WeaTableColumnGroup weaTableColumnGroup : weaTableColumns) { if (CollectionUtils.isEmpty(weaTableColumnGroup.getChildren())) { diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index 61df28ccd..c8edfbe61 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -249,6 +249,14 @@ public class SIAccountController { return new ResponseResult(user).run(getService(user)::batSocialSecurityBenefitsRecalculate,batParam); } + @POST + @Path("/batFC") + @Produces(MediaType.APPLICATION_JSON) + public String batFC(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::batFC, param); + } + /** * 正常缴纳页核算 From d0d2d7b70d3e7c4ea256b4a67375f6f58ca9c187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 1 Dec 2025 15:29:57 +0800 Subject: [PATCH 74/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E5=B0=81=E5=AD=98?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/siaccount/InsuranceAccountBatchMapper.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml index 4b45cb2f3..f4cfb4ad0 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml @@ -19,6 +19,7 @@ + @@ -42,6 +43,7 @@ , t.update_time , t.tenant_key , t.payment_organization + , t.fc #{billMonth}, @@ -83,6 +86,7 @@ #{updateTime}, #{tenantKey}, #{paymentOrganization}, + #{fc}, @@ -111,6 +115,7 @@ update_time, tenant_key, payment_organization, + fc, #{billMonth}, @@ -129,6 +134,7 @@ #{updateTime}, #{tenantKey}, #{paymentOrganization}, + #{fc}, @@ -235,7 +241,10 @@ other_pay=#{otherPay}, - bill_status=#{billStatus} + bill_status=#{billStatus}, + + + fc=#{fc} WHERE id = #{id} AND delete_type = 0 From a92bc80b64e75a78ee3f805d4aac14227fbd0f94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 1 Dec 2025 16:34:02 +0800 Subject: [PATCH 75/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E5=B0=81=E5=AD=98?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/customization/salary/hrmSalaryQZ.properties | 5 ++--- src/com/engine/salary/service/SIAccountService.java | 3 +++ .../salary/service/impl/SIAccountServiceImpl.java | 13 +++++++++++++ src/com/engine/salary/web/SIAccountController.java | 9 +++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties index 98908b874..e54b05bd6 100644 --- a/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties +++ b/resource/wiki/代码样例/拦截工资单相关接口/com/customization/salary/hrmSalaryQZ.properties @@ -1,3 +1,2 @@ -# ????? -actualWorkplaceField=field64 - +actualWorkplaceField=field2 +socialManagerRoleId=28 diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index 55a262586..f16d329c6 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -365,5 +365,8 @@ public interface SIAccountService { XSSFWorkbook exportQZReport(QZInsuranceAccountBatchParam param); String batFC(AccountBatParam batParam); + + Boolean fcAuth(); + } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index aff4aa957..77d3f96e5 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -10,6 +10,8 @@ import com.api.formmode.mybatis.util.SqlProxyHandle; import com.cloudstore.dev.api.util.Util_DataCache; import com.cloudstore.eccom.pc.table.*; import com.cloudstore.eccom.result.WeaResultMsg; +import com.engine.common.service.HrmCommonService; +import com.engine.common.service.impl.HrmCommonServiceImpl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; @@ -87,6 +89,7 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.file.ImageFileManager; +import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; @@ -7329,6 +7332,16 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return String.format("成功:" + success + "个,失败:" + fail + "个%s", fail == 0 ? "" : ",失败原因:" + msg); } + @Override + public Boolean fcAuth() { + BaseBean bb = new BaseBean(); + String socialManagerRoleId = bb.getPropValue("hrmSalaryQZ", "socialManagerRoleId"); + HrmCommonService hrmCommonService = new HrmCommonServiceImpl(); + List ids = hrmCommonService.getRoleMembers(socialManagerRoleId, "2"); + + return ids.contains(Util.null2String(user.getUID())); + } + public void fc(String billMonth, Long paymentOrganization, FCEnum fc) { InsuranceAccountBatchPO insuranceAccountBatchPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, paymentOrganization); diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index c8edfbe61..73bf41f3f 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -249,6 +249,15 @@ public class SIAccountController { return new ResponseResult(user).run(getService(user)::batSocialSecurityBenefitsRecalculate,batParam); } + @POST + @Path("/fcAuth") + @Produces(MediaType.APPLICATION_JSON) + public String fcAuth(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getService(user)::fcAuth); + } + + @POST @Path("/batFC") @Produces(MediaType.APPLICATION_JSON) From 5ba83586d62a71fd625d735ebfd3502c4aa6cf6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 1 Dec 2025 16:43:05 +0800 Subject: [PATCH 76/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E5=B0=81=E5=AD=98?= =?UTF-8?q?=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/siaccount/bo/InsuranceAccountBO.java | 1 + .../entity/siaccount/dto/InsuranceAccountBatchListDTO.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java index f2af2ac95..a1a54861c 100644 --- a/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java +++ b/src/com/engine/salary/entity/siaccount/bo/InsuranceAccountBO.java @@ -62,6 +62,7 @@ public class InsuranceAccountBO { .otherNum(e.getOtherNum()) .otherPay(SalaryEntityUtil.thousandthConvert(e.getOtherPay())) .remarks(e.getRemarks()) + .fc(e.getFc()) .socialNum(e.getSocialNum()) .socialPay(SalaryEntityUtil.thousandthConvert(e.getSocialPay())) .paymentOrganization(e.getPaymentOrganization() != null ? MapperProxyFactory.getProxy(TaxAgentMapper.class).getById(e.getPaymentOrganization()).getName() : "") diff --git a/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountBatchListDTO.java b/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountBatchListDTO.java index 28939613b..42348994c 100644 --- a/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountBatchListDTO.java +++ b/src/com/engine/salary/entity/siaccount/dto/InsuranceAccountBatchListDTO.java @@ -112,6 +112,8 @@ public class InsuranceAccountBatchListDTO { @TableTitle(title = "备注", dataIndex = "remarks", key = "remarks") private String remarks; + private Integer fc; + private Set opts; From cb423962a2650bef688966c79baaee2303b6686e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 2 Dec 2025 10:22:14 +0800 Subject: [PATCH 77/84] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E7=A9=BF=E9=80=8F?= =?UTF-8?q?=EF=BC=8C=E6=8C=89=E7=85=A7=E8=96=AA=E8=B5=84=E6=89=80=E5=B1=9E?= =?UTF-8?q?=E6=9C=88=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/service/impl/SalaryStatisticsReportServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index dbf64ecb8..28f30de0b 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -530,7 +530,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary throw new SalaryRunTimeException("该维度值中无数据!"); } // 同一个人放在一起 - listByDimensionValue = listByDimensionValue.stream().sorted(Comparator.comparing(SalaryAcctEmployeePO::getEmployeeId)).collect(Collectors.toList()); + listByDimensionValue = listByDimensionValue.stream().sorted((a,b)-> b.getSalaryMonth().compareTo(a.getSalaryMonth())).collect(Collectors.toList()); List salaryAcctEmployeePOList = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), listByDimensionValue); // 获取此分页的核算人员 From 10a11dcca493f29a81f6a0f5b5424b07624bacb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 2 Dec 2025 14:55:50 +0800 Subject: [PATCH 78/84] =?UTF-8?q?=E5=A4=84=E7=90=86=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E8=A1=A5=E7=BC=B4=E6=89=8B=E5=8A=A8=E5=A1=AB=E5=86=99=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SIRepairServiceImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIRepairServiceImpl.java b/src/com/engine/salary/service/impl/SIRepairServiceImpl.java index 64758d625..bb24354e2 100644 --- a/src/com/engine/salary/service/impl/SIRepairServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIRepairServiceImpl.java @@ -485,8 +485,10 @@ public class SIRepairServiceImpl extends Service implements SIRepairService { socialMap = socialMap.entrySet().stream().filter(e -> "9002".equals(e.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); Map socialComMap = JSON.parseObject(socialSchemePO.getSocialPaymentComBaseString(), new HashMap().getClass()); - socialComMap = socialComMap.entrySet().stream().filter(e -> "9002".equals(e.getKey())) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + if(socialComMap !=null){ + socialComMap = socialComMap.entrySet().stream().filter(e -> "9002".equals(e.getKey())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } List socialIds = new ArrayList<>(); socialIds.addAll(socialMap == null ? Collections.emptyList() : socialMap.keySet()); socialIds.addAll(socialComMap == null ? Collections.emptyList() : socialComMap.keySet()); From e7923a24862d679ad5309e14bb82afb94ad565d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 3 Dec 2025 17:34:05 +0800 Subject: [PATCH 79/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E7=BA=BF=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/auth/AuthRoleServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/engine/salary/service/auth/AuthRoleServiceImpl.java b/src/com/engine/salary/service/auth/AuthRoleServiceImpl.java index e305b6833..cb437aac0 100644 --- a/src/com/engine/salary/service/auth/AuthRoleServiceImpl.java +++ b/src/com/engine/salary/service/auth/AuthRoleServiceImpl.java @@ -1,6 +1,7 @@ package com.engine.salary.service.auth; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.hrmelog.entity.dto.LoggerContext; @@ -63,6 +64,12 @@ public class AuthRoleServiceImpl extends Service implements AuthRoleService { public PageInfo roleList(AuthRoleListQueryParam param) { List authRolePOS = getAuthRoleMapper().list(param); + + String name = param.getName(); + if(StrUtil.isNotBlank(name)){ + authRolePOS = authRolePOS.stream().filter(po -> po.getName().contains(name)).collect(Collectors.toList()); + } + int total = authRolePOS.size(); List list = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), authRolePOS) From 59720d9340a5d1f7d9f1ad13b0d230977a37fd80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 4 Dec 2025 17:15:13 +0800 Subject: [PATCH 80/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/prop/hrmSalary.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index df9ab4b74..a5f592ab6 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=3.0.4.2510.01.ts +version=3.0.5.2510.01.ts openFormulaForcedEditing=false \ No newline at end of file From b83a9166105b0883ff526037304242529f548689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 5 Dec 2025 14:18:39 +0800 Subject: [PATCH 81/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index 29ee07ccc..c6283dd16 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -93,7 +93,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ Map collect = employeeByIds.stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, Function.identity())); list.forEach(item -> { Map record = new HashMap<>(); - DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()); + DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()) ==null?new DataCollectionEmployee():collect.get(item.getEmployeeId()); record.put("id", item.getId()); record.put("employeeId", item.getEmployeeId()); record.put("billMonth", item.getBillMonth()); From b48b235898564657b8de1b55f1282250095e1526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 5 Dec 2025 14:20:23 +0800 Subject: [PATCH 82/84] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dnull?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index 9a0cb9fba..68764df57 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -583,7 +583,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ list.forEach(item -> { Map record = new HashMap<>(); - DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()); + DataCollectionEmployee simpleEmployee = collect.get(item.getEmployeeId()) ==null?new DataCollectionEmployee():collect.get(item.getEmployeeId()); record.put("id", item.getId()); record.put("paymentOrganizationName", paymentMap.get(item.getSocialPayOrg()) == null ? "" : paymentMap.get(item.getSocialPayOrg()).getName()); record.put("workcode", StringUtils.isBlank(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()); From b46b270dd1dd48bb819da4b2358af6b526a7e679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 8 Dec 2025 16:58:04 +0800 Subject: [PATCH 83/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E7=A4=BE?= =?UTF-8?q?=E4=BF=9D=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/扩展功能/hrmSalaryQZBB.properties | 5 +++++ .../service/impl/RecordsBuildServiceImpl.java | 9 +++++---- .../salary/service/impl/SIAccountServiceImpl.java | 14 +++++++++----- 3 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 resource/wiki/扩展功能/hrmSalaryQZBB.properties diff --git a/resource/wiki/扩展功能/hrmSalaryQZBB.properties b/resource/wiki/扩展功能/hrmSalaryQZBB.properties new file mode 100644 index 000000000..824bff4e4 --- /dev/null +++ b/resource/wiki/扩展功能/hrmSalaryQZBB.properties @@ -0,0 +1,5 @@ +# ?????? +bcylbx=1731899239050 + +# ???? +dbbx=1731899212789 \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java index 68764df57..b6d0dbd3b 100644 --- a/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java +++ b/src/com/engine/salary/service/impl/RecordsBuildServiceImpl.java @@ -24,10 +24,7 @@ import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.RecordsBuildService; import com.engine.salary.service.SIArchivesService; import com.engine.salary.service.SalaryEmployeeService; -import com.engine.salary.util.SalaryAssert; -import com.engine.salary.util.SalaryDateUtil; -import com.engine.salary.util.SalaryEnumUtil; -import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; @@ -851,6 +848,7 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ } record.put("otherPerSum", item.getOtherPerSum()); record.put("perSum", item.getPerSum()); + record.put("bPerSum", item.getBPerSum()); if (StringUtils.isNotEmpty(item.getSocialComJson())) { Map fundPerJson = JSON.parseObject(item.getSocialComJson(), new HashMap().getClass()); if (fundPerJson != null) { @@ -957,10 +955,13 @@ public class RecordsBuildServiceImpl extends Service implements RecordsBuildServ record.put("fundSpecialSum", fundSpecialSum[0].toPlainString()); record.put("specialSum", socialSpecialSum[0].add(fundSpecialSum[0]).toPlainString()); record.put("comSum", item.getComSum()); + record.put("bComSum", item.getBComSum()); record.put("socialSum", item.getSocialSum()); record.put("fundSum", item.getFundSum()); record.put("otherSum", item.getOtherSum()); record.put("total", item.getTotal()); + record.put("btotal", item.getBTotal()); + record.put("totalSum", SalaryEntityUtil.empty2Zero(item.getTotal()).add(SalaryEntityUtil.empty2Zero(item.getBTotal())).toPlainString()); result.add(record); }); return result; diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 77d3f96e5..0b65195af 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -7240,6 +7240,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { List> list = getService(user).buildQzReport(dtos, (long) user.getUID(), false); + BaseBean bb = new BaseBean(); + String bcylbx = bb.getPropValue("hrmSalaryQZBB", "bcylbx"); + String dbbx = bb.getPropValue("hrmSalaryQZBB", "dbbx"); + List columns = Lists.newArrayList(); columns.add(new WeaTableColumnGroup("150", "公司名称", "paymentOrganizationName")); @@ -7260,20 +7264,20 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { columns.add(new WeaTableColumnGroup("150", "失业保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9004socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9004bSocialCom")))); columns.add(new WeaTableColumnGroup("150", "工伤保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9003socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9003bSocialCom")))); columns.add(new WeaTableColumnGroup("150", "生育保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9005socialCom"), new WeaTableColumnGroup("150", "单位补缴额", "9005bSocialCom")))); - columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", ""), new WeaTableColumnGroup("150", "单位补缴额", "")))); - columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", ""), new WeaTableColumnGroup("150", "单位补缴额", "")))); + columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", bcylbx + "socialCom"), new WeaTableColumnGroup("150", "单位补缴额", bcylbx + "bSocialCom")))); + columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", dbbx + "socialCom"), new WeaTableColumnGroup("150", "单位补缴额", dbbx + "bSocialCom")))); columns.add(new WeaTableColumnGroup("150", "住房公积金", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "9006fundCom"), new WeaTableColumnGroup("150", "单位补缴额", "9006bFundCom")))); columns.add(new WeaTableColumnGroup("150", "养老保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9001socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9001bSocialPer")))); columns.add(new WeaTableColumnGroup("150", "医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9002socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9002bSocialPer")))); columns.add(new WeaTableColumnGroup("150", "失业保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9004socialPer"), new WeaTableColumnGroup("150", "个人补缴额", "9004bSocialPer")))); - columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", ""), new WeaTableColumnGroup("150", "个人补缴额", "")))); - columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", ""), new WeaTableColumnGroup("150", "个人补缴额", "")))); + columns.add(new WeaTableColumnGroup("150", "补充医疗保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", bcylbx + "socialPer"), new WeaTableColumnGroup("150", "个人补缴额", bcylbx + "bSocialPer")))); + columns.add(new WeaTableColumnGroup("150", "大病保险", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", dbbx +"socialPer"), new WeaTableColumnGroup("150", "个人补缴额", dbbx +"bSocialPer")))); columns.add(new WeaTableColumnGroup("150", "单位超额-社保合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "socialSpecialSum")))); columns.add(new WeaTableColumnGroup("150", "住房公积金", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "9006fundPer"), new WeaTableColumnGroup("150", "个人补缴额", "9006bFundPer")))); columns.add(new WeaTableColumnGroup("150", "单位超额-公积金合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "fundSpecialSum")))); columns.add(new WeaTableColumnGroup("150", "社保公积金单位合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", "comSum"), new WeaTableColumnGroup("150", "单位补缴额", "bComSum")))); columns.add(new WeaTableColumnGroup("150", "社保公积金个人合计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", "perSum"), new WeaTableColumnGroup("150", "个人补缴额", "bPerSum")))); - columns.add(new WeaTableColumnGroup("150", "总计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "总计", "total")))); + columns.add(new WeaTableColumnGroup("150", "总计", "", Lists.newArrayList(new WeaTableColumnGroup("150", "总计", "totalSum")))); columns.add(new WeaTableColumnGroup("150", "服务费", "", Lists.newArrayList(new WeaTableColumnGroup("150", "单位缴交额", ""), new WeaTableColumnGroup("150", "单位补缴额", "")))); columns.add(new WeaTableColumnGroup("150", "服务费", "", Lists.newArrayList(new WeaTableColumnGroup("150", "个人缴交额", ""), new WeaTableColumnGroup("150", "个人补缴额", "")))); From fcf5a778c3f7656fe48b185633088280f0c64ee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 8 Dec 2025 16:59:54 +0800 Subject: [PATCH 84/84] =?UTF-8?q?=E9=92=B1=E6=99=BA=EF=BC=8C=E7=A4=BE?= =?UTF-8?q?=E4=BF=9D=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/prop/hrmSalary.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index a5f592ab6..5aa04d438 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=3.0.5.2510.01.ts +version=3.0.6.2510.01.ts openFormulaForcedEditing=false \ No newline at end of file