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.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.measuringinstrumentledger.dto.SparePartsUseDto; 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 org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.List; @Service public class SparePartsRequisitionRecordServiceImpl extends ServiceImpl implements SparePartsRequisitionRecordService { @Autowired private SparePartsRequisitionRecordMapper sparePartsRequisitionRecordMapper; @Autowired private SparePartsMapper sparePartsMapper; @Override public IPage listPage(Page page, SparePartsRequisitionRecord query) { return sparePartsRequisitionRecordMapper.listPage(page, query); } @Override @Transactional(rollbackFor = Exception.class) public void processSparePartsUse(Long deviceLedgerId, String deviceName, Long sourceId, Integer sourceType, String sourceText, List useList) { if (useList == null || useList.isEmpty()) { return; } String operator = SecurityUtils.getLoginUser().getNickName(); for (SparePartsUseDto useItem : useList) { if (useItem == null || useItem.getId() == null) { continue; } BigDecimal quantity = useItem.getQuantity(); if (quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0) { throw new ServiceException("领用数量必须大于0"); } SpareParts sparePart = sparePartsMapper.selectById(useItem.getId()); if (sparePart == null) { throw new ServiceException("备件不存在"); } if (sparePart.getQuantity() == null || sparePart.getQuantity().compareTo(quantity) < 0) { throw new ServiceException("备件[" + sparePart.getName() + "]库存不足"); } sparePart.setQuantity(sparePart.getQuantity().subtract(quantity)); sparePartsMapper.updateById(sparePart); SparePartsRequisitionRecord record = new SparePartsRequisitionRecord(); record.setSparePartsId(sparePart.getId()); record.setSparePartsName(sparePart.getName()); record.setQuantity(quantity); record.setDeviceLedgerId(deviceLedgerId); record.setDeviceName(deviceName); record.setSourceId(sourceId); record.setSourceType(sourceType); record.setSourceText(StringUtils.isNotEmpty(sourceText) ? sourceText : (sourceType == 0 ? "维修" : "保养")); record.setOperator(operator); sparePartsRequisitionRecordMapper.insert(record); } } }