package cn.iocoder.yudao.module.mes.service.pro.mps;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.module.mes.controller.admin.pro.mps.vo.MesProMpsPageReqVO;
|
import cn.iocoder.yudao.module.mes.controller.admin.pro.mps.vo.MesProMpsSaveReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.pro.mps.MesProMpsDO;
|
import jakarta.validation.Valid;
|
|
import java.math.BigDecimal;
|
import java.util.Collection;
|
import java.util.List;
|
|
/**
|
* MES 生产主计划(MPS)Service 接口
|
*
|
* @author 芋道源码
|
*/
|
public interface MesProMpsService {
|
|
/**
|
* 创建 MPS(供 API 调用,自动映射物料)
|
*
|
* @param saleOrderId 销售订单ID
|
* @param saleOrderNo 销售订单号
|
* @param saleOrderItemId 销售订单明细ID
|
* @param mdmItemId MDM 物料ID
|
* @param productName 产品名称(用于错误提示)
|
* @param quantity 计划数量
|
* @param clientId 客户ID
|
* @param requestDate 需求日期
|
* @param remark 备注
|
* @return MPS 编号,如果 MES 产品不存在返回 null
|
* @throws cn.iocoder.yudao.framework.common.exception.ServiceException 如果 MES 产品不存在
|
*/
|
Long createMps(Long saleOrderId, String saleOrderNo, Long saleOrderItemId,
|
Long mdmItemId, String productName, BigDecimal quantity, Long clientId,
|
String requestDate, String remark);
|
|
/**
|
* 创建 MPS
|
*
|
* @param createReqVO 创建信息
|
* @return MPS 编号
|
*/
|
Long createMps(@Valid MesProMpsSaveReqVO createReqVO);
|
|
/**
|
* 更新 MPS
|
*
|
* @param updateReqVO 更新信息
|
*/
|
void updateMps(@Valid MesProMpsSaveReqVO updateReqVO);
|
|
/**
|
* 删除 MPS(仅草稿状态)
|
*
|
* @param id 编号
|
*/
|
void deleteMps(Long id);
|
|
/**
|
* 下发单条 MPS
|
*
|
* @param id MPS 编号
|
* @return 生成的工单 ID
|
*/
|
Long issueMps(Long id);
|
|
/**
|
* 合并下发多条 MPS
|
* 将多条相同产品的 MPS 合并生成一条生产工单
|
*
|
* @param mpsIds MPS 编号列表
|
* @return 生成的工单 ID
|
*/
|
Long mergeAndIssueMps(List<Long> mpsIds);
|
|
/**
|
* 取消 MPS
|
*
|
* @param id 编号
|
*/
|
void cancelMps(Long id);
|
|
/**
|
* 完成 MPS(由生产工单完成时触发)
|
*
|
* @param id 编号
|
*/
|
void finishMps(Long id);
|
|
/**
|
* 根据销售订单明细获取 MPS
|
*
|
* @param saleOrderItemId 销售订单明细ID
|
* @return MPS
|
*/
|
MesProMpsDO getMpsBySaleOrderItemId(Long saleOrderItemId);
|
|
/**
|
* 获取 MPS
|
*
|
* @param id 编号
|
* @return MPS
|
*/
|
MesProMpsDO getMps(Long id);
|
|
/**
|
* 获取 MPS 分页
|
*
|
* @param pageReqVO 分页查询
|
* @return 分页结果
|
*/
|
PageResult<MesProMpsDO> getMpsPage(MesProMpsPageReqVO pageReqVO);
|
|
/**
|
* 获取 MPS 列表
|
*
|
* @param ids 编号列表
|
* @return MPS 列表
|
*/
|
List<MesProMpsDO> getMpsList(Collection<Long> ids);
|
|
/**
|
* 根据销售订单明细ID列表获取 MPS 列表
|
*
|
* @param saleOrderItemIds 销售订单明细ID列表
|
* @return MPS 列表
|
*/
|
List<MesProMpsDO> getMpsListBySaleOrderItemIds(Collection<Long> saleOrderItemIds);
|
|
/**
|
* 获取可合并的 MPS 列表(相同产品、草稿状态)
|
*
|
* @param productId 产品ID
|
* @return MPS 列表
|
*/
|
List<MesProMpsDO> getMergeableMpsList(Long productId);
|
|
/**
|
* 更新已生产数量
|
*
|
* @param id MPS 编号
|
* @param incrQuantity 增量
|
*/
|
void updateProducedQuantity(Long id, BigDecimal incrQuantity);
|
|
/**
|
* 检查销售订单的所有 MPS 是否已完成生产
|
*
|
* 完成条件:
|
* 1. 已生产数量 >= 计划数量
|
* 2. 所有报工单状态为 FINISHED(确保质检完成)
|
*
|
* @param saleOrderId 销售订单ID
|
* @return true=全部完成,false=未全部完成
|
*/
|
Boolean checkSaleOrderProductionFinished(Long saleOrderId);
|
|
/**
|
* 根据工单ID获取 MPS
|
*
|
* @param workOrderId 工单ID
|
* @return MPS
|
*/
|
MesProMpsDO getMpsByWorkOrderId(Long workOrderId);
|
|
/**
|
* 检查并自动完成 MPS
|
*
|
* 如果 MPS 满足完成条件(已生产数量 >= 计划数量 且 所有报工已完成),
|
* 则自动将 MPS 状态更新为已完成
|
*
|
* @param mpsId MPS 编号
|
* @return true=已完成或本次自动完成,false=未完成
|
*/
|
Boolean checkAndFinishMps(Long mpsId);
|
|
}
|