package cn.iocoder.yudao.module.mes.service.wm.productreceipt; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.wm.productreceipt.vo.line.MesWmProductReceiptLinePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.productreceipt.vo.line.MesWmProductReceiptLineSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productreceipt.MesWmProductReceiptLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.productreceipt.MesWmProductReceiptLineMapper; import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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.WM_PRODUCT_RECPT_LINE_NOT_EXISTS; /** * MES 产品收货单行 Service 实现类 */ @Service @Validated public class MesWmProductReceiptLineServiceImpl implements MesWmProductReceiptLineService { @Resource private MesWmProductReceiptLineMapper productReceiptLineMapper; @Resource @Lazy private MesWmProductReceiptService productReceiptService; @Resource private MesWmProductReceiptDetailService productReceiptDetailService; @Resource private MesMdmItemService mdmItemService; @Override public Long createProductReceiptLine(MesWmProductReceiptLineSaveReqVO createReqVO) { // 1. 校验关联数据 validateProductReceiptLineSaveData(createReqVO); // 2. 新增 MesWmProductReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmProductReceiptLineDO.class); productReceiptLineMapper.insert(line); return line.getId(); } @Override public void updateProductReceiptLine(MesWmProductReceiptLineSaveReqVO updateReqVO) { // 1.1 校验存在 MesWmProductReceiptLineDO line = validateProductReceiptLineExists(updateReqVO.getId()); // 1.2 校验关联数据 updateReqVO.setReceiptId(line.getReceiptId()); validateProductReceiptLineSaveData(updateReqVO); // 2. 更新 MesWmProductReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmProductReceiptLineDO.class); productReceiptLineMapper.updateById(updateObj); } @Override @Transactional(rollbackFor = Exception.class) public void deleteProductReceiptLine(Long id) { // 校验存在 MesWmProductReceiptLineDO line = validateProductReceiptLineExists(id); // 校验父单据存在且为可编辑状态 productReceiptService.validateProductReceiptEditable(line.getReceiptId()); // 级联删除明细 productReceiptDetailService.deleteProductReceiptDetailByLineId(id); // 删除 productReceiptLineMapper.deleteById(id); } @Override public MesWmProductReceiptLineDO getProductReceiptLine(Long id) { return productReceiptLineMapper.selectById(id); } @Override public PageResult getProductReceiptLinePage(MesWmProductReceiptLinePageReqVO pageReqVO) { return productReceiptLineMapper.selectPage(pageReqVO); } @Override public List getProductReceiptLineListByRecptId(Long receiptId) { return productReceiptLineMapper.selectListByRecptId(receiptId); } @Override public void deleteProductReceiptLineByRecptId(Long receiptId) { productReceiptLineMapper.deleteByRecptId(receiptId); } private MesWmProductReceiptLineDO validateProductReceiptLineExists(Long id) { MesWmProductReceiptLineDO line = productReceiptLineMapper.selectById(id); if (line == null) { throw exception(WM_PRODUCT_RECPT_LINE_NOT_EXISTS); } return line; } /** * 校验行保存时的关联数据 */ private void validateProductReceiptLineSaveData(MesWmProductReceiptLineSaveReqVO reqVO) { // 校验父单据存在且为可编辑状态 productReceiptService.validateProductReceiptEditable(reqVO.getReceiptId()); // 校验物料存在 mdmItemService.validateItemExistsAndEnable(reqVO.getItemId()); } }