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;
|
|
/**
|
* <p>
|
* 入库记录表 服务实现类
|
* </p>
|
*
|
* @author chenhj
|
* @since 2025-06-14
|
*/
|
@Service
|
@RequiredArgsConstructor
|
public class InputInventoryRecordServiceImpl extends ServiceImpl<InputInventoryRecordMapper, InputInventoryRecord> 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<Long> ids) {
|
if (CollectionUtils.isNotEmpty(ids)) {
|
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();
|
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 : 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);
|
}
|
}
|