package cn.iocoder.yudao.module.mes.service.wm.itemreceipt.listener; import cn.iocoder.yudao.module.bpm.api.event.BpmProcessInstanceStatusEvent; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.itemreceipt.MesWmItemReceiptDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.itemreceipt.MesWmItemReceiptMapper; import cn.iocoder.yudao.module.mes.enums.wm.MesWmItemReceiptStatusEnum; import cn.iocoder.yudao.module.mes.service.wm.itemreceipt.MesWmItemReceiptService; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; /** * 采购入库单 BPM 审批状态监听器 * * 监听 BPM 流程实例状态变更事件,更新采购入库单的审批状态 */ @Component @Slf4j public class MesWmItemReceiptStatusListener { /** * BPM 分类编码:采购入库审批 */ public static final String ITEM_RECEIPT_APPROVE_CATEGORY_CODE = "item_receipt_approve"; @Resource private MesWmItemReceiptService itemReceiptService; @Resource private MesWmItemReceiptMapper itemReceiptMapper; @EventListener public void onApplicationEvent(BpmProcessInstanceStatusEvent event) { // 1. 解析业务主键 Long receiptId; try { receiptId = Long.parseLong(event.getBusinessKey()); } catch (NumberFormatException e) { log.warn("[onApplicationEvent] 业务主键({}) 不是有效的入库单编号", event.getBusinessKey()); return; } // 2. 校验入库单存在 MesWmItemReceiptDO receipt = itemReceiptMapper.selectById(receiptId); if (receipt == null) { log.warn("[onApplicationEvent] 入库单({}) 不存在", receiptId); return; } // 3. 校验入库单状态为审批中 if (!MesWmItemReceiptStatusEnum.APPROVING.getStatus().equals(receipt.getStatus())) { log.warn("[onApplicationEvent] 入库单({}) 不处于审批中状态,当前状态:{}", receiptId, receipt.getStatus()); return; } // 4. 更新入库单审批状态 itemReceiptService.updateItemReceiptAuditStatus(receiptId, event.getStatus()); log.info("[onApplicationEvent] 入库单({}) 审批状态更新完成,BPM 状态:{}", receiptId, event.getStatus()); } }