package cn.iocoder.yudao.module.mes.service.wm.productreceipt; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.wm.productreceipt.vo.detail.MesWmProductReceiptDetailSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productreceipt.MesWmProductReceiptDetailDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.productreceipt.MesWmProductReceiptDetailMapper; import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*; /** * MES 产品收货单明细 Service 实现类 */ @Service @Validated public class MesWmProductReceiptDetailServiceImpl implements MesWmProductReceiptDetailService { @Resource private MesWmProductReceiptDetailMapper productReceiptDetailMapper; @Resource @Lazy private MesWmProductReceiptService productReceiptService; @Resource private MesWmWarehouseAreaService warehouseAreaService; @Override public Long createProductReceiptDetail(MesWmProductReceiptDetailSaveReqVO createReqVO) { // 1. 校验关联数据 validateProductReceiptDetailSaveData(createReqVO); // 2. 新增 MesWmProductReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmProductReceiptDetailDO.class); productReceiptDetailMapper.insert(detail); return detail.getId(); } @Override public void updateProductReceiptDetail(MesWmProductReceiptDetailSaveReqVO updateReqVO) { // 1.1 校验存在 MesWmProductReceiptDetailDO detail = validateProductReceiptDetailExists(updateReqVO.getId()); // 1.2 校验关联数据 updateReqVO.setReceiptId(detail.getReceiptId()); validateProductReceiptDetailSaveData(updateReqVO); // 2. 更新 MesWmProductReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmProductReceiptDetailDO.class); productReceiptDetailMapper.updateById(updateObj); } @Override public void deleteProductReceiptDetail(Long id) { // 校验存在 MesWmProductReceiptDetailDO detail = validateProductReceiptDetailExists(id); // 校验父单据存在且为可编辑状态 productReceiptService.validateProductReceiptEditable(detail.getReceiptId()); // 删除 productReceiptDetailMapper.deleteById(id); } @Override public MesWmProductReceiptDetailDO getProductReceiptDetail(Long id) { return productReceiptDetailMapper.selectById(id); } @Override public List getProductReceiptDetailListByRecptId(Long receiptId) { return productReceiptDetailMapper.selectListByRecptId(receiptId); } @Override public List getProductReceiptDetailListByLineId(Long lineId) { return productReceiptDetailMapper.selectListByLineId(lineId); } @Override public void deleteProductReceiptDetailByLineId(Long lineId) { productReceiptDetailMapper.deleteByLineId(lineId); } @Override public void deleteProductReceiptDetailByRecptId(Long receiptId) { productReceiptDetailMapper.deleteByRecptId(receiptId); } private MesWmProductReceiptDetailDO validateProductReceiptDetailExists(Long id) { MesWmProductReceiptDetailDO detail = productReceiptDetailMapper.selectById(id); if (detail == null) { throw exception(WM_PRODUCT_RECPT_DETAIL_NOT_EXISTS); } return detail; } /** * 校验明细保存时的关联数据 */ private void validateProductReceiptDetailSaveData(MesWmProductReceiptDetailSaveReqVO reqVO) { // 校验父单据存在且为可编辑状态 productReceiptService.validateProductReceiptEditable(reqVO.getReceiptId()); // 校验仓库层级关系 warehouseAreaService.validateWarehouseAreaExists( reqVO.getWarehouseId(), reqVO.getLocationId(), reqVO.getAreaId()); } }