package jnpf.limsService.listener; import jnpf.limsService.LimsSxtQuyangJihuaRenwuService; import jnpf.limsService.event.LimsSxtPlanApprovedEvent; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; import java.time.LocalDate; /** * 计划状态提交后生成任务快照,失败时保留给定时补偿重试。 */ @Slf4j @Component @RequiredArgsConstructor public class LimsSxtPlanApprovedEventListener { private final LimsSxtQuyangJihuaRenwuService renwuService; @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void onPlanApproved(LimsSxtPlanApprovedEvent event) { try { renwuService.wuhuaYishenpiJihua(event.getJihuaId(), event.getTenantId()); } catch (Exception e) { log.error("水系统计划快照生成失败,将由补偿任务重试,jihuaId={}, tenantId={}", event.getJihuaId(), event.getTenantId(), e); return; } try { int generated = renwuService.shengchengDaishengchengQingyandanByJihua( event.getJihuaId(), event.getTenantId(), LocalDate.now()); if (generated > 0) { log.info("水系统计划审批通过,生成 {} 张当天请验单,jihuaId={}, tenantId={}", generated, event.getJihuaId(), event.getTenantId()); } } catch (Exception e) { log.error("水系统计划当天请验单生成失败,将由补偿任务重试,jihuaId={}, tenantId={}", event.getJihuaId(), event.getTenantId(), e); } } }