liu
9 小时以前 06ac6cc6f4693a8abc585e69139131fe19274fd1
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
144
145
146
package cn.iocoder.yudao.module.erp.service.sale;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.sale.vo.order.ErpSaleOrderSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import jakarta.validation.Valid;
 
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
 
/**
 * ERP 销售订单 Service 接口
 *
 * @author 超级管理员
 */
public interface ErpSaleOrderService {
 
    /**
     * 创建销售订单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createSaleOrder(@Valid ErpSaleOrderSaveReqVO createReqVO);
 
    /**
     * 更新销售订单
     *
     * @param updateReqVO 更新信息
     */
    void updateSaleOrder(@Valid ErpSaleOrderSaveReqVO updateReqVO);
 
    /**
     * 提交销售订单审批(协同办公 BPM)
     *
     * 未提交或已驳回的销售订单可提交,提交后进入协同办公审批流程
     *
     * @param id 编号
     * @param processDefinitionKey 流程定义的标识
     * @param userId 提交人编号
     */
    void submitSaleOrder(Long id, String processDefinitionKey, Long userId);
 
    /**
     * 更新销售订单的审批状态(协同办公审批结果回调)
     *
     * @param id 编号
     * @param bpmResult BPM 审批结果(通过/驳回/取消)
     */
    void updateSaleOrderAuditStatus(Long id, Integer bpmResult);
 
    /**
     * 获得销售订单审批流程定义列表
     *
     * @return 流程定义列表(id/key/name)
     */
    List<Map<String, Object>> getSaleOrderApproveProcessDefinitionList();
 
    /**
     * 作废销售订单
     *
     * @param id 编号
     */
    void cancelSaleOrder(Long id);
 
    /**
     * 重新启用销售订单
     *
     * @param id 编号
     */
    void enableSaleOrder(Long id);
 
    /**
     * 更新销售订单的出库数量
     *
     * @param id 编号
     * @param outCountMap 出库数量 Map:key 销售订单项编号;value 出库数量
     */
    void updateSaleOrderOutCount(Long id, Map<Long, BigDecimal> outCountMap);
 
    /**
     * 删除销售订单
     *
     * @param ids 编号数组
     */
    void deleteSaleOrder(List<Long> ids);
 
    /**
     * 获得销售订单
     *
     * @param id 编号
     * @return 销售订单
     */
    ErpSaleOrderDO getSaleOrder(Long id);
 
    /**
     * 校验销售订单,已经审核通过
     *
     * @param id 编号
     * @return 销售订单
     */
    ErpSaleOrderDO validateSaleOrder(Long id);
 
    /**
     * 获得销售订单分页
     *
     * @param pageReqVO 分页查询
     * @return 销售订单分页
     */
    PageResult<ErpSaleOrderDO> getSaleOrderPage(ErpSaleOrderPageReqVO pageReqVO);
 
    // ==================== 销售订单项 ====================
 
    /**
     * 获得销售订单项列表
     *
     * @param orderId 销售订单编号
     * @return 销售订单项列表
     */
    List<ErpSaleOrderItemDO> getSaleOrderItemListByOrderId(Long orderId);
 
    /**
     * 获得销售订单项 List
     *
     * @param orderIds 销售订单编号数组
     * @return 销售订单项 List
     */
    List<ErpSaleOrderItemDO> getSaleOrderItemListByOrderIds(Collection<Long> orderIds);
 
    /**
     * 更新销售订单的出库状态
     *
     * 根据明细出库数量自动计算订单状态:
     * - 所有明细都完成出库 → 全部出库状态
     * - 部分明细完成出库 → 部分出库状态
     * - 无明细出库 → 未出库状态
     *
     * @param orderId 订单编号
     */
    void updateSaleOrderOutStatus(Long orderId);
 
}