diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/ar/service/impl/ArBillServiceImpl.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/ar/service/impl/ArBillServiceImpl.java index 84b3b82f..7b5598db 100644 --- a/bms-back/ruoyi-system/src/main/java/com/ruoyi/ar/service/impl/ArBillServiceImpl.java +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/ar/service/impl/ArBillServiceImpl.java @@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; @@ -412,9 +413,17 @@ public class ArBillServiceImpl implements IArBillService { public void processGenerateTask(Long taskId) { try { ArBillGenerateTask task = generateTaskMapper.selectById(taskId); - if (task == null || !ArBillGenerateTaskStatus.RUNNING.equals(task.getStatus())) { + if (task == null) { + log.warn("应收账单生成任务不存在,taskId={}", taskId); + return; + } + if (ArBillGenerateTaskStatus.CANCEL_REQUESTED.equals(task.getStatus())) { + finishGenerateTaskSafely(taskId, "用户取消账单生成"); + return; + } + if (!ArBillGenerateTaskStatus.RUNNING.equals(task.getStatus())) { log.warn("应收账单生成任务未执行,任务不存在或状态不是 RUNNING,taskId={}, status={}", - taskId, task == null ? null : task.getStatus()); + taskId, task.getStatus()); return; } log.info("开始执行应收账单生成任务,taskId={}, arBillId={}, selectionMode={}", @@ -480,6 +489,7 @@ public class ArBillServiceImpl implements IArBillService { * 用数据库条件更新抢占 WAITING 任务,返回 true 才表示当前节点获得执行权。 */ @Override + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) public boolean claimGenerateTask(Long taskId) { return generateTaskMapper.markRunning(taskId, new Date()) == 1; }