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
package cn.iocoder.yudao.module.mes.service.pd.project;
 
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectPageReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.pd.project.vo.MesPdProjectSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.project.MesPdProjectDO;
import jakarta.validation.Valid;
 
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
 
/**
 * MES 设计项目 Service 接口
 *
 * @author 超级管理员
 */
public interface MesPdProjectService {
 
    /**
     * 创建设计项目
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createProject(@Valid MesPdProjectSaveReqVO createReqVO);
 
    /**
     * 更新设计项目
     *
     * @param updateReqVO 更新信息
     */
    void updateProject(@Valid MesPdProjectSaveReqVO updateReqVO);
 
    /**
     * 删除设计项目
     *
     * @param id 编号
     */
    void deleteProject(Long id);
 
    /**
     * 校验设计项目是否存在
     *
     * @param id 编号
     * @return 设计项目
     */
    MesPdProjectDO validateProjectExists(Long id);
 
    /**
     * 获得设计项目
     *
     * @param id 编号
     * @return 设计项目
     */
    MesPdProjectDO getProject(Long id);
 
    /**
     * 获得设计项目分页
     *
     * @param pageReqVO 分页查询
     * @return 设计项目分页
     */
    PageResult<MesPdProjectDO> getProjectPage(MesPdProjectPageReqVO pageReqVO);
 
    /**
     * 发布设计项目(待发布→待上传)
     *
     * @param id 编号
     */
    void publishProject(Long id);
 
    /**
     * 上传资料(待上传→待审核)
     * <p>
     * 同时自动为该项目下所有资料创建审核记录
     *
     * @param id     编号
     * @param userId 当前登录用户ID
     */
    void uploadProject(Long id, Long userId);
 
    /**
     * 提交设计项目审批(待审核→审批中)
     *
     * 审核人由「系统管理 - 审批配置」按业务类型统一配置(业务编码 mes_pd_project_approve),
     * 提交时无需指定;未启用审批或未配置有效审核人时抛出业务异常。
     *
     * @param id 编号
     */
    void submitProjectApproval(Long id);
 
    /**
     * 获得设计项目审批的审核人编号集合
     *
     * 供前端判断当前登录用户是否应展示「审核」按钮;未配置时返回空集合。
     *
     * @return 审核人用户编号集合
     */
    Set<Long> getProjectApproverUserIds();
 
    /**
     * 审核设计项目(审批中→待归档 / 待审核)
     *
     * 仅业务编码 mes_pd_project_approve 配置的审核人可操作(多人时或签),且仅在审批中状态下允许。
     * 审核通过置为待归档;审核不通过必须填写原因,退回待审核状态可修改后重新提交。
     *
     * @param id           编号
     * @param pass         是否通过,true=通过 / false=不通过
     * @param reviewRemark 审核意见,审核不通过时必填
     */
    void auditProject(Long id, Boolean pass, String reviewRemark);
 
    /**
     * 归档设计项目(待归档→已归档)
     * <p>
     * 同时自动创建归档台账记录
     *
     * @param id     编号
     * @param userId 当前登录用户ID
     */
    void archiveProject(Long id, Long userId);
 
    /**
     * 批量获取设计项目 Map
     *
     * @param ids 编号集合
     * @return 设计项目 Map
     */
    Map<Long, MesPdProjectDO> getProjectMap(Collection<Long> ids);
 
    List<MesPdProjectDO> getProjectByProductCode(String productCode);
 
}