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());
|
}
|
|
}
|