diff --git a/fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryCalcTask.java b/fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryCalcTask.java index 3592cf2..c787647 100644 --- a/fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryCalcTask.java +++ b/fw-morax-server/src/main/java/cn/fw/morax/server/task/SalaryCalcTask.java @@ -38,7 +38,7 @@ public class SalaryCalcTask { /** * 重试额外薪资数据持久化 */ - @Scheduled(initialDelay = 1000L * 10, fixedRate = 1000L * 30) + @Scheduled(initialDelay = 1000L * 10, fixedRate = 1000L * 180) @Async public void retrySaveExtra() { salaryReportService.retrySaveReward(); diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/salary/SalaryReportService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/salary/SalaryReportService.java index 9cc0ab3..29bf125 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/salary/SalaryReportService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/salary/SalaryReportService.java @@ -34,6 +34,9 @@ import org.springframework.data.redis.core.BoundListOperations; import org.springframework.data.redis.core.ListOperations; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -67,6 +70,8 @@ public class SalaryReportService { private final SalaryGroupService salaryGroupService; private final SalaryPoolCommonService salaryPoolCommonService; private final StringRedisTemplate stringRedisTemplate; + private final PlatformTransactionManager platformTransactionManager; + private final TransactionDefinition transactionDefinition; @Value("${spring.cache.custom.global-prefix}:extra-salary") @Getter private String extraSalaryKey; @@ -85,7 +90,7 @@ public class SalaryReportService { if (Objects.isNull(dto)) { continue; } - saveExtraProject(dto); + saveExtraProjectTX(dto); } catch (Exception e) { failList.add(str); log.error("薪酬额外薪资数据保存失败", e); @@ -106,7 +111,7 @@ public class SalaryReportService { public void salaryRewardReport(SalaryRewardReq req) { SalaryExtraDTO extraDTO = transferExtraProject(req); try { - saveExtraProject(extraDTO); + saveExtraProjectTX(extraDTO); } catch (Exception e) { cacheFailProject(extraDTO, getExtraSalaryKey()); log.error("奖惩项薪资上报数据处理失败", e); @@ -121,7 +126,7 @@ public class SalaryReportService { public void socialSecurityProject(GeneralSalaryProjectReq req) { SalaryExtraDTO extraDTO = transferExtraProject(req, ExtraSalaryTypeEnum.NECESSARY); try { - saveExtraProject(extraDTO); + saveExtraProjectTX(extraDTO); } catch (Exception e) { cacheFailProject(extraDTO, getExtraSalaryKey()); log.error("社保项上报数据处理失败", e); @@ -136,7 +141,7 @@ public class SalaryReportService { public void personTaxProject(GeneralSalaryProjectReq req) { SalaryExtraDTO extraDTO = transferExtraProject(req, ExtraSalaryTypeEnum.PERSON_TAX); try { - saveExtraProject(extraDTO); + saveExtraProjectTX(extraDTO); } catch (Exception e) { cacheFailProject(extraDTO, getExtraSalaryKey()); log.error("社保项上报数据处理失败", e); @@ -151,20 +156,34 @@ public class SalaryReportService { public void subsidyProject(GeneralSalaryProjectReq req) { SalaryExtraDTO extraDTO = transferExtraProject(req, ExtraSalaryTypeEnum.SUBSIDY); try { - saveExtraProject(extraDTO); + saveExtraProjectTX(extraDTO); } catch (Exception e) { cacheFailProject(extraDTO, getExtraSalaryKey()); log.error("补贴项薪资上报数据处理失败", e); } } + /** + * 事务保存额外薪酬项 + * + * @param extraDTO + */ + public void saveExtraProjectTX(SalaryExtraDTO extraDTO) { + TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition); + try { + saveExtraProject(extraDTO); + platformTransactionManager.commit(transactionStatus); + } catch (Exception e) { + platformTransactionManager.rollback(transactionStatus); + throw e; + } + } /** * 保存额外薪酬项 * * @param extraDTO */ - @Transactional(rollbackFor = Exception.class) public void saveExtraProject(SalaryExtraDTO extraDTO) { Optional optional = queryPoolByUser(extraDTO.getUserId(), extraDTO.getPostId(), extraDTO.getShopId(), extraDTO.getDataDate()); Long fundShopId;