2025.2.9(仓储管理系统WarehouseStaffService WarehouseStaffServiceImpl代码以及关系)
package com.example.warehouse.service;
import com.example.warehouse.entity.MaterialLedgerDetail;
import java.util.List;
public interface WarehouseStaffService {
// 入库操作
MaterialLedgerDetail inboundOperation(MaterialLedgerDetail ledgerDetail);
// 出库操作
MaterialLedgerDetail outboundOperation(MaterialLedgerDetail ledgerDetail);
// 统计查询
List<MaterialLedgerDetail> queryInventoryByMaterialCode(String materialCode);
List<MaterialLedgerDetail> queryInboundDetailsByMaterialCode(String materialCode);
List<MaterialLedgerDetail> queryOutboundDetailsByMaterialCode(String materialCode);
}
package com.example.warehouse.service.impl;
import com.example.warehouse.entity.MaterialLedgerDetail;
import com.example.warehouse.repository.MaterialLedgerDetailRepository;
import com.example.warehouse.service.WarehouseStaffService;
import com.example.warehouse.util.CodeGenerator;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class WarehouseStaffServiceImpl implements WarehouseStaffService {
@Autowired
private MaterialLedgerDetailRepository materialLedgerDetailRepository;
@Override
public MaterialLedgerDetail inboundOperation(MaterialLedgerDetail ledgerDetail) {
ledgerDetail.setLedgerNumber(CodeGenerator.generateLedgerNumber());
ledgerDetail.setOperationType("入库");
return materialLedgerDetailRepository.save(ledgerDetail);
}
@Override
public MaterialLedgerDetail outboundOperation(MaterialLedgerDetail ledgerDetail) {
List<MaterialLedgerDetail> existingDetails = materialLedgerDetailRepository.findByMaterialCode(ledgerDetail.getMaterialCode());
int totalQuantity = existingDetails.stream()
.filter(detail -> "入库".equals(detail.getOperationType()))
.mapToInt(MaterialLedgerDetail::getQuantity)
.sum() - existingDetails.stream()
.filter(detail -> "出库".equals(detail.getOperationType()))
.mapToInt(MaterialLedgerDetail::getQuantity)
.sum();
if (ledgerDetail.getQuantity() > totalQuantity) {
throw new RuntimeException("出库数量大于库存余额,无法进行出库!");
}
ledgerDetail.setLedgerNumber(CodeGenerator.generateLedgerNumber());
ledgerDetail.setOperationType("出库");
return materialLedgerDetailRepository.save(ledgerDetail);
}
@Override
public List<MaterialLedgerDetail> queryInventoryByMaterialCode(String materialCode) {
List<MaterialLedgerDetail> details = materialLedgerDetailRepository.findByMaterialCode(materialCode);
int totalQuantity = details.stream()
.filter(detail -> "入库".equals(detail.getOperationType()))
.mapToInt(MaterialLedgerDetail::getQuantity)
.sum() - details.stream()
.filter(detail -> "出库".equals(detail.getOperationType()))
.mapToInt(MaterialLedgerDetail::getQuantity)
.sum();
MaterialLedgerDetail summary = details.stream().findFirst().orElse(new MaterialLedgerDetail());
summary.setQuantity(totalQuantity);
return List.of(summary);
}
@Override
public List<MaterialLedgerDetail> queryInboundDetailsByMaterialCode(String materialCode) {
return materialLedgerDetailRepository.findByMaterialCode(materialCode).stream()
.filter(detail -> "入库".equals(detail.getOperationType()))
.collect(Collectors.toList());
}
@Override
public List<MaterialLedgerDetail> queryOutboundDetailsByMaterialCode(String materialCode) {
return materialLedgerDetailRepository.findByMaterialCode(materialCode).stream()
.filter(detail -> "出库".equals(detail.getOperationType()))
.collect(Collectors.toList());
}
}

浙公网安备 33010602011771号