package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.business.dto.OfficialInventoryDto; import com.ruoyi.business.dto.PendingInventoryDto; import com.ruoyi.business.entity.InputInventoryRecord; import com.ruoyi.business.entity.InventorySummary; import com.ruoyi.business.mapper.InputInventoryRecordMapper; import com.ruoyi.business.mapper.InventorySummaryMapper; import com.ruoyi.business.service.InputInventoryRecordService; import com.ruoyi.business.service.InventorySummaryService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Objects; import static com.ruoyi.business.constant.InventoryRecordConstant.OFFICIAL_INVENTORY; import static com.ruoyi.business.constant.InventoryRecordConstant.PENDING_INVENTORY; /** *

* 入库记录表 服务实现类 *

* * @author chenhj * @since 2025-06-14 */ @Service @RequiredArgsConstructor public class InputInventoryRecordServiceImpl extends ServiceImpl implements InputInventoryRecordService { private final InputInventoryRecordMapper inputInventoryRecordMapper; private final InventorySummaryService inventorySummaryService; private final InventorySummaryMapper inventorySummaryMapper; @Override public int insertInputInventoryRecord(PendingInventoryDto pendingInventoryDto, OfficialInventoryDto officialInventoryDto, BigDecimal quantity) { if ((pendingInventoryDto != null && officialInventoryDto != null) || (pendingInventoryDto == null && officialInventoryDto == null)) { throw new RuntimeException("库存记录异常"); } InputInventoryRecord inputInventoryRecord = new InputInventoryRecord(); if (officialInventoryDto != null) { inputInventoryRecord.setInventoryType(OFFICIAL_INVENTORY); inputInventoryRecord.setId(officialInventoryDto.getId()); } else { inputInventoryRecord.setInventoryType(PENDING_INVENTORY); inputInventoryRecord.setId(pendingInventoryDto.getId()); } inputInventoryRecord.setQuantity(quantity); inputInventoryRecordMapper.insert(inputInventoryRecord); // 更新库存 return inventorySummaryService.updateInventory(pendingInventoryDto, officialInventoryDto); } @Override public int deleteInputInventoryRecord(List ids) { if (CollectionUtils.isNotEmpty(ids)) { List inputInventoryRecords = inputInventoryRecordMapper.selectBatchIds(ids); // 根据id进行降序排序 List inputInventoryRecordList = inputInventoryRecords.stream() .sorted(Comparator.comparing(InputInventoryRecord::getId).reversed()) .toList(); String InventoryType = inputInventoryRecords.get(0).getInventoryType(); List inventoryIds = inputInventoryRecords.stream().map(InputInventoryRecord::getInventoryId).toList(); List inventorySummaries = inventorySummaryMapper.selectList(new LambdaQueryWrapper() .eq(InventorySummary::getInventoryType, InventoryType) .in(InventorySummary::getInventoryId, inventoryIds)); if (CollectionUtils.isNotEmpty(inventorySummaries)) { List updates = new ArrayList<>(); for (InventorySummary inventorySummary : inventorySummaries) { for (InputInventoryRecord inputInventoryRecord : inputInventoryRecords) { // 如果节点上的入库记录id大于变更的id,说明此id前所有入库记录都要重新计算 if (Objects.equals(inventorySummary.getInventoryId(), inputInventoryRecord.getInventoryId()) && inventorySummary.getInputEndRecordId() > inputInventoryRecord.getId()) { inventorySummary.setInputEndRecordId(inputInventoryRecord.getId()); updates.add(inventorySummary); } } } // 重置他们的节点最终id inventorySummaryMapper.updateById(updates); } } // todo 重新计算节点库存 // todo 更新库存实施数据 // 删除入库记录 return inputInventoryRecordMapper.deleteByIds(ids); } }