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);
}
}