liu
2026-10-23 5421b8af862890dcf187c2ad5ece55423959ba85
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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.request.ErpPurchaseRequestImportExcelVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestImportReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestImportRespVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.request.ErpPurchaseRequestSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseRequestDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseRequestItemDO;
import jakarta.validation.Valid;
 
import java.util.Collection;
import java.util.List;
import java.util.Set;
 
/**
 * ERP 采购申请 Service 接口
 */
public interface ErpPurchaseRequestService {
 
    /**
     * 创建采购申请
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPurchaseRequest(@Valid ErpPurchaseRequestSaveReqVO createReqVO);
 
    /**
     * 更新采购申请
     *
     * @param updateReqVO 更新信息
     */
    void updatePurchaseRequest(@Valid ErpPurchaseRequestSaveReqVO updateReqVO);
 
    /**
     * 删除采购申请
     *
     * @param ids 编号数组
     */
    void deletePurchaseRequest(List<Long> ids);
 
    /**
     * 获得采购申请
     *
     * @param id 编号
     * @return 采购申请
     */
    ErpPurchaseRequestDO getPurchaseRequest(Long id);
 
    /**
     * 获得采购申请分页
     *
     * @param pageReqVO 分页查询
     * @return 采购申请分页
     */
    PageResult<ErpPurchaseRequestDO> getPurchaseRequestPage(ErpPurchaseRequestPageReqVO pageReqVO);
 
    /**
     * 获得采购申请项列表
     *
     * @param requestId 采购申请编号
     * @return 采购申请项列表
     */
    List<ErpPurchaseRequestItemDO> getPurchaseRequestItemListByRequestId(Long requestId);
 
    /**
     * 获得采购申请项 List
     *
     * @param requestIds 采购申请编号数组
     * @return 采购申请项 List
     */
    List<ErpPurchaseRequestItemDO> getPurchaseRequestItemListByRequestIds(Collection<Long> requestIds);
 
    /**
     * 提交采购申请审批
     *
     * 仅【未提交】或【审核不通过】状态可提交;审批人由「系统管理 - 审批配置」统一指定,
     * 提交后进入【审批中】,并清空上一轮审核结果。
     *
     * @param id 编号
     */
    void submitPurchaseRequest(Long id);
 
    /**
     * 获取采购申请的审批人编号集合(或签:任一人审核即可)
     *
     * @return 审批人用户编号
     */
    Set<Long> getPurchaseRequestApproverUserIds();
 
    /**
     * 审核采购申请(通过 / 不通过)
     *
     * 仅配置内的审批人可执行;审核不通过时必须填写原因,退回后可修改并重新提交。
     *
     * @param id 编号
     * @param pass 是否审核通过
     * @param reviewRemark 审核意见
     */
    void auditPurchaseRequest(Long id, Boolean pass, String reviewRemark);
 
    /**
     * BPM 审批结果回调更新采购申请状态
     *
     * 由 BPM 流程实例结束事件触发,将审批结果回写为业务状态:
     * 审批通过 → 审核通过(并自动生成采购订单);审批不通过 → 审核不通过;流程取消 → 已取消。
     *
     * @param id        采购申请编号
     * @param bpmStatus BPM 审批结果状态
     * @param reason    审核意见(BPM 审批意见)
     */
    void updatePurchaseRequestAuditStatus(Long id, Integer bpmStatus, String reason);
 
    /**
     * 生成采购订单
     *
     * @param id 采购申请编号
     * @param supplierId 供应商编号
     * @return 采购订单编号
     */
    Long generatePurchaseOrder(Long id, Long supplierId);
 
    /**
     * 根据编号列表获取采购申请列表
     *
     * @param ids 编号列表
     * @return 采购申请列表
     */
    List<ErpPurchaseRequestDO> getPurchaseRequestList(List<Long> ids);
 
    /**
     * 导入采购申请
     *
     * @param importRequests 导入的采购申请列表(一行一条明细)
     * @param importReqVO    导入参数
     * @return 导入结果
     */
    ErpPurchaseRequestImportRespVO importPurchaseRequestList(List<ErpPurchaseRequestImportExcelVO> importRequests,
                                                              ErpPurchaseRequestImportReqVO importReqVO);
 
}