yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchasePlanService.java
@@ -2,13 +2,14 @@
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.plan.ErpPurchasePlanPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.plan.ErpPurchasePlanRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.plan.ErpPurchasePlanSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchasePlanDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchasePlanItemDO;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * ERP 采购计划 Service 接口
@@ -72,23 +73,40 @@
    PageResult<ErpPurchasePlanDO> getPurchasePlanPage(ErpPurchasePlanPageReqVO pageReqVO);
    /**
     * 提交采购计划审批
     * 提交采购计划审核
     *
     * @param id                   编号
     * @param processDefinitionKey BPM 流程定义 Key
     * @param userId               用户编号
     * 提交前校验通用审批配置(bizType = purchase_plan_approve)已启用且配置了有效审批人;
     * 校验通过后状态置为「审批中」。草稿与审核不通过状态均可提交。
     *
     * @param id 编号
     */
    void submitPurchasePlan(Long id, String processDefinitionKey, Long userId);
    void submitPurchasePlan(Long id);
    /**
     * 获取采购计划审批流程列表
     * 获得采购计划的审批人用户编号集合
     *
     * @return 流程定义列表
     * 供前端列表页判断是否展示「审核」按钮,未配置时返回空集合。
     *
     * @return 审批人用户编号集合
     */
    List<Map<String, Object>> getPurchasePlanApproveProcessDefinitionList();
    Set<Long> getPurchasePlanApproverUserIds();
    /**
     * 审核采购计划(审批中 → 审核通过 / 审核不通过)
     *
     * 仅通用审批配置中指定的审批人本人可调用;审核不通过时须填写原因。
     * 审核通过后将自动生成采购申请。
     *
     * @param id           采购计划编号
     * @param pass         是否通过
     * @param reviewRemark 审核意见(不通过时为必填的原因)
     */
    void auditPurchasePlan(Long id, Boolean pass, String reviewRemark);
    /**
     * BPM 审批结果回调更新采购计划状态
     *
     * 历史兼容接口:改造为轻量级审批后不再由 BPM 事件触发,保留以兼容既有监听器。
     *
     * @param id        采购计划编号
     * @param bpmResult BPM 审批结果
@@ -96,6 +114,16 @@
    void updatePurchasePlanAuditStatus(Long id, Integer bpmResult);
    /**
     * 获取库存预警建议采购明细
     *
     * <p>遍历启用安全库存的物料,按默认仓库当前库存低于最低库存时,
     * 补足到安全库存(未配置则回落最高/最低库存)得到建议采购明细,不落库,供新增弹窗回填核对。
     *
     * @return 建议采购明细列表
     */
    List<ErpPurchasePlanRespVO.Item> getStockAlertSuggestItems();
    /**
     * 根据库存预警自动生成采购计划(草稿)
     *
     * <p>遍历启用安全库存的物料,当前库存低于安全库存下限时,