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 getProjectPage(MesPdProjectPageReqVO pageReqVO); /** * 发布设计项目(待发布→待上传) * * @param id 编号 */ void publishProject(Long id); /** * 上传资料(待上传→待审核) *

* 同时自动为该项目下所有资料创建审核记录 * * @param id 编号 * @param userId 当前登录用户ID */ void uploadProject(Long id, Long userId); /** * 提交设计项目审批(待审核→审批中) * * 审核人由「系统管理 - 审批配置」按业务类型统一配置(业务编码 mes_pd_project_approve), * 提交时无需指定;未启用审批或未配置有效审核人时抛出业务异常。 * * @param id 编号 */ void submitProjectApproval(Long id); /** * 获得设计项目审批的审核人编号集合 * * 供前端判断当前登录用户是否应展示「审核」按钮;未配置时返回空集合。 * * @return 审核人用户编号集合 */ Set getProjectApproverUserIds(); /** * 审核设计项目(审批中→待归档 / 待审核) * * 仅业务编码 mes_pd_project_approve 配置的审核人可操作(多人时或签),且仅在审批中状态下允许。 * 审核通过置为待归档;审核不通过必须填写原因,退回待审核状态可修改后重新提交。 * * @param id 编号 * @param pass 是否通过,true=通过 / false=不通过 * @param reviewRemark 审核意见,审核不通过时必填 */ void auditProject(Long id, Boolean pass, String reviewRemark); /** * 归档设计项目(待归档→已归档) *

* 同时自动创建归档台账记录 * * @param id 编号 * @param userId 当前登录用户ID */ void archiveProject(Long id, Long userId); /** * 批量获取设计项目 Map * * @param ids 编号集合 * @return 设计项目 Map */ Map getProjectMap(Collection ids); List getProjectByProductCode(String productCode); }