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
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
SaE{!{|2E1K2q>Q=5dI69l4_m+
delta 4457
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
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
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
SaE{!{|2E1K2q>Q=5dI69l4_m+
delta 4457
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
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