package cn.iocoder.yudao.module.mes.api.mps; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.api.mps.dto.MesProMpsCreateReqDTO; import cn.iocoder.yudao.module.mes.api.mps.dto.MesProMpsRespDTO; import cn.iocoder.yudao.module.mes.dal.dataobject.pro.mps.MesProMpsDO; import cn.iocoder.yudao.module.mes.enums.pro.MesProMpsStatusEnum; import cn.iocoder.yudao.module.mes.service.pro.mps.MesProMpsService; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.Collections; import java.util.List; import java.util.Map; /** * MPS API 实现类 * * @author 芋道源码 */ @Service @Validated public class MesProMpsApiImpl implements MesProMpsApi { @Resource private MesProMpsService mpsService; @Override public Long createMps(MesProMpsCreateReqDTO createReqDTO) { return mpsService.createMps( createReqDTO.getSaleOrderId(), createReqDTO.getSaleOrderNo(), createReqDTO.getSaleOrderItemId(), createReqDTO.getMdmItemId(), createReqDTO.getProductName(), createReqDTO.getQuantity(), createReqDTO.getClientId(), createReqDTO.getRequestDate(), createReqDTO.getRemark() ); } @Override public MesProMpsRespDTO getMps(Long id) { MesProMpsDO mps = mpsService.getMps(id); return BeanUtils.toBean(mps, MesProMpsRespDTO.class); } @Override public MesProMpsRespDTO getMpsBySaleOrderItemId(Long saleOrderItemId) { MesProMpsDO mps = mpsService.getMpsBySaleOrderItemId(saleOrderItemId); return BeanUtils.toBean(mps, MesProMpsRespDTO.class); } @Override public List getMpsListBySaleOrderItemIds(List saleOrderItemIds) { if (saleOrderItemIds == null || saleOrderItemIds.isEmpty()) { return Collections.emptyList(); } List mpsList = mpsService.getMpsListBySaleOrderItemIds(saleOrderItemIds); return BeanUtils.toBean(mpsList, MesProMpsRespDTO.class); } @Override public Boolean checkCanCreateSalesNotice(List saleOrderItemIds) { if (CollUtil.isEmpty(saleOrderItemIds)) { return true; } List mpsList = mpsService.getMpsListBySaleOrderItemIds(saleOrderItemIds); // 构建 saleOrderItemId -> MPS 的映射 Map mpsMap = new java.util.HashMap<>(); for (MesProMpsDO mps : mpsList) { if (mps.getSaleOrderItemId() != null) { mpsMap.put(mps.getSaleOrderItemId(), mps); } } // 检查每个销售订单明细: // - 如果 MPS 不存在:不能生成发货通知单 // - 如果 MPS 存在且状态为草稿/已下发:不能生成发货通知单 // - 如果 MPS 存在且状态为已完成/已取消:可以生成发货通知单 for (Long itemId : saleOrderItemIds) { MesProMpsDO mps = mpsMap.get(itemId); if (mps == null) { // MPS 不存在,不能生成发货通知单 return false; } if (mps.getStatus().equals(MesProMpsStatusEnum.DRAFT.getStatus()) || mps.getStatus().equals(MesProMpsStatusEnum.ISSUED.getStatus())) { // MPS 未完成,不能生成发货通知单 return false; } } return true; } }