汇通批量核算调整

This commit is contained in:
Harryxzy 2025-07-16 14:19:37 +08:00
parent d24f9bf0a6
commit cf03a36835
3 changed files with 103 additions and 9 deletions

View File

@ -410,6 +410,9 @@
<if test="approvalStatus != null">
approval_status=#{approvalStatus},
</if>
<if test="runStatus != null">
run_status=#{runStatus},
</if>
</set>
WHERE id = #{id} AND delete_type = 0
</update>

View File

@ -2198,7 +2198,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
}
@Override
public void socialSecurityBenefitsRecalculate(InsuranceAccountBatchPO param) {
public void socialSecurityBenefitsRecalculate(InsuranceAccountBatchPO insuranceAccountBatchParam) {
//fixme 重新核算的校验逻辑 1先取台账对应扣缴义务人下的所有账套 2取账套下所有核算记录 3判断核算记录有没有使用对应月份的福利台账
// int num = getSiAccountBiz(user).checkIfBusinessaccounting(param);
// int num = checkIfBusinessAccounting(param);
@ -2206,11 +2206,63 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
// if (num > 0) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "已被薪酬核算给核算过,无法重新核算!"));
// }
param.setBillStatus(0);
insuranceAccountBatchParam.setBillStatus(0);
// getSiAccountBiz(user).updateById(param);
updateById(param);
updateById(insuranceAccountBatchParam);
InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(insuranceAccountBatchParam.getId());
if (po == null) {
return;
}
// 核算
AccountParam param = new AccountParam();
param.setBillMonth(po.getBillMonth());
param.setFlag(false);
param.setPaymentOrganization(po.getPaymentOrganization());
ValidUtil.doValidator(param);
try {
List<Long> employeeIds = getInsuranceAccountDetailMapper().selectEmpByPaymentOrg(param.getPaymentOrganization());
if (CollectionUtils.isEmpty(employeeIds)) {
List<InsuranceAccountDetailPO> list = Lists.newArrayList(getInsuranceAccountDetailMapper().queryNormalListByBillMonth(param.getBillMonth(), param.getPaymentOrganization()));
encryptUtil.decryptList(list, InsuranceAccountDetailPO.class);
if (CollectionUtils.isNotEmpty(list)) {
list.stream().forEach(f -> {
getInsuranceAccountDetailMapper().deleteById(f.getId());
});
}
}
SalaryAssert.notEmpty(employeeIds, SalaryI18nUtil.getI18nLabel(0, "没有需要核算的人员"));
//福利核算进度
ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.ACCT_PROGRESS + param.getBillMonth() + "_" + param.getPaymentOrganization());
if (salaryAcctProgressDTO != null && salaryAcctProgressDTO.isStatus() && salaryAcctProgressDTO.getProgress().compareTo(BigDecimal.ONE) < 0) {
return;
}
// 初始化进度
ProgressDTO initProgress = new ProgressDTO()
.setTitle(SalaryI18nUtil.getI18nLabel(0, "核算中"))
.setTitleLabelId(97515L)
.setTotalQuantity(2000)
.setCalculatedQuantity(NumberUtils.INTEGER_ZERO)
.setProgress(BigDecimal.ZERO)
.setStatus(true)
.setMessage(StringUtils.EMPTY);
getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + param.getBillMonth() + "_" + param.getPaymentOrganization(), initProgress);
siAccounting(param);
} catch (Exception e) {
// 回滚
List<InsuranceAccountBatchPO> list = Lists.newArrayList(getInsuranceAccountBatchMapper().getByBillMonth(param.getBillMonth(), param.getPaymentOrganization()));
list = encryptUtil.decryptList(list, InsuranceAccountBatchPO.class);
if (CollectionUtils.isNotEmpty(list)) {
list.stream().forEach(f -> {
getInsuranceAccountBatchMapper().deleteById(f.getId());
});
}
throw new SalaryRunTimeException(e.getMessage());
}
//记录操作日志
InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getById(param.getId());
InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getById(insuranceAccountBatchParam.getId());
encryptUtil.decrypt(targetPO, InsuranceAccountBatchPO.class);
TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization());
LoggerContext<InsuranceAccountBatchPO> loggerContext = new LoggerContext<>();
@ -5557,14 +5609,20 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
.setStatus(true)
.setMessage(StringUtils.EMPTY);
getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + param.getBillMonth() + "_" + param.getPaymentOrganization(), initProgress);
ExecutorService taskExecutor = Executors.newCachedThreadPool();
taskExecutor.execute(() -> {
if (param.isFlag()) {
siAccounting(param);
if (param.isFileFlag()) {
siFile(param.getBillMonth(), param.getPaymentOrganization());
}
});
} else {
ExecutorService taskExecutor = Executors.newCachedThreadPool();
taskExecutor.execute(() -> {
siAccounting(param);
if (param.isFileFlag()) {
siFile(param.getBillMonth(), param.getPaymentOrganization());
}
});
}
} catch (Exception e) {
// 回滚
List<InsuranceAccountBatchPO> list = Lists.newArrayList(getInsuranceAccountBatchMapper().getByBillMonth(param.getBillMonth(), param.getPaymentOrganization()));

View File

@ -10,6 +10,7 @@ import com.engine.salary.config.SalaryElogConfig;
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.SalaryAcctCalculateParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
@ -36,6 +37,7 @@ import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.page.SalaryPageUtil;
import com.engine.salary.util.valid.ValidUtil;
import com.engine.salary.wrapper.SalaryAcctResultWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
@ -116,6 +118,9 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
}
private SalaryAcctResultWrapper getSalaryAcctResultWrapper(User user) {
return ServiceUtil.getService(SalaryAcctResultWrapper.class, user);
}
@Override
public SalaryAcctRecordPO getById(Long id) {
@ -506,6 +511,21 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
});
}
public void updateRunStatusByIds(Collection<Long> ids, String runStatus) {
// 查询薪资核算记录
List<SalaryAcctRecordPO> salaryAcctRecordPOS = listByIds(ids);
if (CollectionUtils.isEmpty(salaryAcctRecordPOS)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
}
// 更新薪资核算记录的状态
Date now = new Date();
salaryAcctRecordPOS.forEach(salaryAcctRecordPO -> {
salaryAcctRecordPO.setRunStatus(runStatus);
salaryAcctRecordPO.setUpdateTime(now);
getSalaryAcctRecordMapper().updateIgnoreNull(salaryAcctRecordPO);
});
}
@Override
public void deleteByIds(Collection<Long> ids) {
// 查询薪资核算记录
@ -879,7 +899,20 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
List<Long> salaryAcctRecordIds = param.getSalaryAcctRecordIds();
for (int i = 0; i < salaryAcctRecordIds.size(); i++) {
Long recordId = salaryAcctRecordIds.get(i);
reCalculate(recordId);
SalaryAcctRecordPO salaryAcctRecordPO = getById(recordId);
if (salaryAcctRecordPO != null && salaryAcctRecordPO.getStatus().equals(SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) {
// 未归档直接重新核算
} else {
reCalculate(recordId);
}
}
// 更新核算状态
updateRunStatusByIds(salaryAcctRecordIds, "核算中");
// 重新核算
salaryAcctRecordIds.forEach(salaryAcctRecordId -> {
getSalaryAcctResultWrapper(user).calculate4Sync(SalaryAcctCalculateParam.builder().salaryAcctRecordId(salaryAcctRecordId).build());
});
}
}