chenhj
3 天以前 8097a2a4383a3785e11990170d61c59ae6b48888
main-business/src/main/java/com/ruoyi/business/service/impl/InputInventoryRecordServiceImpl.java
@@ -1,15 +1,26 @@
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 com.ruoyi.business.utils.InventoryUtils;
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 java.util.stream.Collectors;
import static com.ruoyi.business.constant.InventoryRecordConstant.OFFICIAL_INVENTORY;
import static com.ruoyi.business.constant.InventoryRecordConstant.PENDING_INVENTORY;
@@ -26,6 +37,9 @@
@RequiredArgsConstructor
public class InputInventoryRecordServiceImpl extends ServiceImpl<InputInventoryRecordMapper, InputInventoryRecord> implements InputInventoryRecordService {
    private final InputInventoryRecordMapper inputInventoryRecordMapper;
    private final InventorySummaryService inventorySummaryService;
    private final InventorySummaryMapper inventorySummaryMapper;
    private final InventoryUtils inventoryUtils;
    @Override
    public int insertInputInventoryRecord(PendingInventoryDto pendingInventoryDto, OfficialInventoryDto officialInventoryDto, BigDecimal quantity) {
@@ -43,18 +57,52 @@
        }
        inputInventoryRecord.setQuantity(quantity);
        return inputInventoryRecordMapper.insert(inputInventoryRecord);
        inputInventoryRecordMapper.insert(inputInventoryRecord);
        // 更新库存
//         inventorySummaryService.updateInventory(pendingInventoryDto, officialInventoryDto);
        return inventorySummaryService.updateInventory(pendingInventoryDto, officialInventoryDto);
    }
    @Override
    public int deleteInputInventoryRecord(Long[] ids) {
    public int deleteInputInventoryRecord(List<Long> ids) {
        if (CollectionUtils.isEmpty(ids)) {
            throw new RuntimeException("请传入要删除的id记录");
        }
        List<InputInventoryRecord> inputInventoryRecords = inputInventoryRecordMapper.selectBatchIds(ids);
        // 根据id进行降序排序
        List<InputInventoryRecord> inputInventoryRecordList = inputInventoryRecords.stream()
                .sorted(Comparator.comparing(InputInventoryRecord::getId).reversed())
                .toList();
        String InventoryType = inputInventoryRecords.get(0).getInventoryType();
        List<Long> inventoryIds = inputInventoryRecords.stream().map(InputInventoryRecord::getInventoryId).toList().stream().distinct().collect(Collectors.toList());
        List<InventorySummary> inventorySummaries = inventorySummaryMapper.selectList(new LambdaQueryWrapper<InventorySummary>()
                .eq(InventorySummary::getInventoryType, InventoryType)
                .in(InventorySummary::getInventoryId, inventoryIds));
        if (CollectionUtils.isNotEmpty(inventorySummaries)) {
            List<InventorySummary> updates = new ArrayList<>();
            for (InventorySummary inventorySummary : inventorySummaries) {
                for (InputInventoryRecord inputInventoryRecord : inputInventoryRecordList) {
                    // 如果节点上的入库记录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);
        }
        // 重新计算节点库存
        inventorySummaryService.updateInventorySummary(ids);
        // 更新库存实时数据
        inventoryUtils.updateInventoryByIds(inventoryIds, inputInventoryRecords.get(0).getInventoryType());
        return 0;
        // 删除入库记录
        return inputInventoryRecordMapper.deleteByIds(ids);
    }
}