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<MesProMpsRespDTO> getMpsListBySaleOrderItemIds(List<Long> saleOrderItemIds) {
|
if (saleOrderItemIds == null || saleOrderItemIds.isEmpty()) {
|
return Collections.emptyList();
|
}
|
List<MesProMpsDO> mpsList = mpsService.getMpsListBySaleOrderItemIds(saleOrderItemIds);
|
return BeanUtils.toBean(mpsList, MesProMpsRespDTO.class);
|
}
|
|
@Override
|
public Boolean checkCanCreateSalesNotice(List<Long> saleOrderItemIds) {
|
if (CollUtil.isEmpty(saleOrderItemIds)) {
|
return true;
|
}
|
List<MesProMpsDO> mpsList = mpsService.getMpsListBySaleOrderItemIds(saleOrderItemIds);
|
// 构建 saleOrderItemId -> MPS 的映射
|
Map<Long, MesProMpsDO> 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;
|
}
|
|
@Override
|
public Boolean checkSaleOrderProductionFinished(Long saleOrderId) {
|
return mpsService.checkSaleOrderProductionFinished(saleOrderId);
|
}
|
|
@Override
|
public MesProMpsRespDTO getMpsByWorkOrderId(Long workOrderId) {
|
MesProMpsDO mps = mpsService.getMpsByWorkOrderId(workOrderId);
|
return BeanUtils.toBean(mps, MesProMpsRespDTO.class);
|
}
|
|
}
|