package com.ruoyi.measuringinstrumentledger.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.enums.SparePartsRequisitionRecordSourceTypeEnum; import com.ruoyi.measuringinstrumentledger.dto.SparePartsOutboundDto; import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto; import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper; import com.ruoyi.measuringinstrumentledger.mapper.SparePartsRequisitionRecordMapper; import com.ruoyi.measuringinstrumentledger.pojo.SpareParts; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; /** *

* 服务实现类 *

* * @author 芯导软件(江苏)有限公司 * @since 2026-04-02 03:59:56 */ @Service @RequiredArgsConstructor public class SparePartsRequisitionRecordServiceImpl extends ServiceImpl implements SparePartsRequisitionRecordService { private final SparePartsRequisitionRecordMapper sparePartsRequisitionRecordMapper; private final SparePartsMapper sparePartsMapper; @Override public IPage listPage(Page page, SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto) { IPage result = sparePartsRequisitionRecordMapper.listPage(page, sparePartsRequisitionRecordDto); // 处理来源类型文本 result.getRecords().forEach(record -> { if (record.getSourceType() != null) { record.setSourceText(SparePartsRequisitionRecordSourceTypeEnum.getByCode(record.getSourceType()).getValue()); } }); return result; } @Override @Transactional(rollbackFor = Exception.class) public void outbound(SparePartsOutboundDto dto) { SpareParts spareParts = sparePartsMapper.selectById(dto.getSparePartsId()); if (spareParts == null) { throw new IllegalArgumentException("备件不存在"); } if (spareParts.getQuantity().compareTo(new BigDecimal(dto.getQuantity())) < 0) { throw new IllegalArgumentException("备件 " + spareParts.getName() + " 库存不足"); } // 扣减库存 spareParts.setQuantity(spareParts.getQuantity().subtract(new BigDecimal(dto.getQuantity()))); sparePartsMapper.updateById(spareParts); // 创建领用记录 SparePartsRequisitionRecord record = new SparePartsRequisitionRecord(); record.setSourceType(SparePartsRequisitionRecordSourceTypeEnum.SparePartsRequisitionRecordSourceTypeDirectOutbound.getCode()); record.setSparePartsId(dto.getSparePartsId()); record.setQuantity(dto.getQuantity()); record.setDeviceLedgerId(dto.getDeviceLedgerId()); this.save(record); } }