package cn.iocoder.yudao.module.mes.service.wm.equipmentreceipt; import cn.hutool.core.util.ObjUtil; 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.equipmentreceipt.vo.line.MesWmEquipmentReceiptLinePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.wm.equipmentreceipt.vo.line.MesWmEquipmentReceiptLineSaveReqVO; import cn.iocoder.yudao.module.mes.dal.dataobject.dv.machinery.MesDvMachineryDO; import cn.iocoder.yudao.module.mes.dal.dataobject.wm.equipmentreceipt.MesWmEquipmentReceiptLineDO; import cn.iocoder.yudao.module.mes.dal.mysql.wm.equipmentreceipt.MesWmEquipmentReceiptLineMapper; import cn.iocoder.yudao.module.mes.service.dv.machinery.MesDvMachineryService; import jakarta.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; 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 MesWmEquipmentReceiptLineServiceImpl implements MesWmEquipmentReceiptLineService { @Resource private MesWmEquipmentReceiptLineMapper equipmentReceiptLineMapper; @Resource private MesDvMachineryService machineryService; @Resource @Lazy private MesWmEquipmentReceiptService equipmentReceiptService; @Override public Long createEquipmentReceiptLine(MesWmEquipmentReceiptLineSaveReqVO createReqVO) { // 校验入库单可编辑 equipmentReceiptService.validateEquipmentReceiptEditable(createReqVO.getReceiptId()); // 校验设备存在且已关联物料 validateMachineryHasItem(createReqVO.getMachineryId()); // 校验数量 validateQuantity(createReqVO.getQuantity()); MesWmEquipmentReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmEquipmentReceiptLineDO.class); equipmentReceiptLineMapper.insert(line); return line.getId(); } @Override public void updateEquipmentReceiptLine(MesWmEquipmentReceiptLineSaveReqVO updateReqVO) { // 校验行存在 validateEquipmentReceiptLineExists(updateReqVO.getId()); // 校验入库单可编辑 equipmentReceiptService.validateEquipmentReceiptEditable(updateReqVO.getReceiptId()); // 校验设备存在且已关联物料 validateMachineryHasItem(updateReqVO.getMachineryId()); // 校验数量 validateQuantity(updateReqVO.getQuantity()); MesWmEquipmentReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmEquipmentReceiptLineDO.class); equipmentReceiptLineMapper.updateById(updateObj); } @Override public void deleteEquipmentReceiptLine(Long id) { // 校验行存在 MesWmEquipmentReceiptLineDO line = validateEquipmentReceiptLineExists(id); // 校验入库单可编辑 equipmentReceiptService.validateEquipmentReceiptEditable(line.getReceiptId()); equipmentReceiptLineMapper.deleteById(id); } @Override public void deleteByReceiptId(Long receiptId) { equipmentReceiptLineMapper.delete(MesWmEquipmentReceiptLineDO::getReceiptId, receiptId); } @Override public MesWmEquipmentReceiptLineDO getEquipmentReceiptLine(Long id) { return equipmentReceiptLineMapper.selectById(id); } @Override public List getEquipmentReceiptLineListByReceiptId(Long receiptId) { return equipmentReceiptLineMapper.selectListByReceiptId(receiptId); } @Override public PageResult getEquipmentReceiptLinePage(MesWmEquipmentReceiptLinePageReqVO pageReqVO) { return equipmentReceiptLineMapper.selectPage(pageReqVO); } private MesWmEquipmentReceiptLineDO validateEquipmentReceiptLineExists(Long id) { MesWmEquipmentReceiptLineDO line = equipmentReceiptLineMapper.selectById(id); if (line == null) { throw exception(WM_EQUIP_RECEIPT_LINE_NOT_EXISTS); } return line; } private void validateMachineryHasItem(Long machineryId) { machineryService.validateMachineryExists(machineryId); MesDvMachineryDO machinery = machineryService.getMachinery(machineryId); if (machinery == null || machinery.getItemId() == null) { throw exception(WM_EQUIP_RECEIPT_MACHINERY_NOT_VALID); } } private void validateQuantity(BigDecimal quantity) { if (quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0) { throw exception(WM_EQUIP_RECEIPT_QUANTITY_INVALID); } } }