云
2026-10-25 d54fbc9d4f8981fa0f7f613b33a28a8cd4f764ea
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchasePlanService.java
@@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.erp.service.purchase;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.plan.ErpPurchasePlanImportExcelVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.plan.ErpPurchasePlanImportReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.plan.ErpPurchasePlanImportRespVO;
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;
@@ -9,7 +12,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * ERP 采购计划 Service 接口
@@ -73,28 +76,57 @@
    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 审批结果
     */
    void updatePurchasePlanAuditStatus(Long id, Integer bpmResult);
    /**
     * BPM 审批结果回调更新采购计划状态(带审核意见)
     *
     * 由 BPM 流程实例结束事件触发,将审批结果回写为业务状态:
     * 审批通过 → 审核通过(并自动生成采购申请);审批不通过 → 审核不通过;流程取消 → 已取消。
     *
     * @param id        采购计划编号
     * @param bpmStatus BPM 审批结果状态
     * @param reason    审核意见(BPM 审批意见)
     */
    void updatePurchasePlanAuditStatus(Long id, Integer bpmStatus, String reason);
    /**
     * 获取库存预警建议采购明细
@@ -126,4 +158,14 @@
     */
    List<Long> generatePurchaseRequests(Long id);
    /**
     * 导入采购计划
     *
     * @param importPlans 导入的采购计划列表(一行一条明细)
     * @param importReqVO 导入参数
     * @return 导入结果
     */
    ErpPurchasePlanImportRespVO importPurchasePlanList(List<ErpPurchasePlanImportExcelVO> importPlans,
                                                       ErpPurchasePlanImportReqVO importReqVO);
}