diff --git a/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java b/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java index 3a0f255..b016c70 100644 --- a/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java +++ b/src/main/java/com/huaheng/pc/config/material/service/MaterialService.java @@ -8,8 +8,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.huaheng.pc.config.material.domain.bo.MaterialComputeVariableBO; import com.huaheng.pc.inventory.inventoryTransaction.domain.InventoryTransaction; +import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; public interface MaterialService extends IService<Material> { diff --git a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java index b109e91..bfd5032 100644 --- a/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java +++ b/src/main/java/com/huaheng/pc/inventory/inventoryDetail/service/InventoryDetailServiceImpl.java @@ -34,11 +34,14 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.huaheng.pc.inventory.inventoryDetail.mapper.InventoryDetailMapper; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; @Service public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMapper, InventoryDetail> implements InventoryDetailService { @@ -279,59 +282,66 @@ public class InventoryDetailServiceImpl extends ServiceImpl<InventoryDetailMappe public List<InventoryDetail> expiringInventoryHandle(List<InventoryDetail> inventoryDetails, String expiring) { // 获取库存呆滞时间配置 int days = Integer.parseInt(configService.getKey(QuantityConstant.DEAD_TIME)); - int days_batch = Integer.parseInt(configService.getKey(QuantityConstant.DEAD_TIME_BATCH)); - int days_flammable = Integer.parseInt(configService.getKey(QuantityConstant.DEAD_TIME_FLAMMABLE)); + int daysBatch = Integer.parseInt(configService.getKey(QuantityConstant.DEAD_TIME_BATCH)); + int daysFlammable = Integer.parseInt(configService.getKey(QuantityConstant.DEAD_TIME_FLAMMABLE)); + // 如果 inventoryDetails 为空,直接返回空列表 - if (inventoryDetails == null || inventoryDetails.isEmpty()) { + if (CollectionUtils.isEmpty(inventoryDetails)) { return Collections.emptyList(); } - // 初始化返回的库存列表 - List<InventoryDetail> returnInventory = new ArrayList<>(); - // 初始化呆滞库存和非呆滞库存列表 - List<InventoryDetail> expiringInventory = new ArrayList<>(); - List<InventoryDetail> noExpiringInventory = new ArrayList<>(); - - // 遍历库存明细 - for (InventoryDetail inventoryDetail : inventoryDetails) { + + // 获取所有物料编码 + Set<String> materialCodes = inventoryDetails.stream() + .map(InventoryDetail::getMaterialCode) + .collect(Collectors.toSet()); + + // 批量查询物料信息 + List<Material> materials = getMaterialsByCodes(materialCodes); + + // 创建物料编码和物料对象的映射关系 + Map<String, Material> materialMap = new HashMap<>(); + for (Material material : materials) { + materialMap.put(material.getCode(), material); + } + + return inventoryDetails.stream().collect(Collectors.partitioningBy(inventoryDetail -> { // 计算库存的更新时间和当前时间之间的差距 long difference = DateUtils.difference(DateUtils.getNowDate(), inventoryDetail.getLastUpdated()); - Material material = materialService.getMaterialByCode(inventoryDetail.getMaterialCode()); + + // 从 Map 中获取物料信息 + Material material = materialMap.get(inventoryDetail.getMaterialCode()); + if (material == null) { + return false; + } int materialDays = days; - if (StringUtils.isNotEmpty(material.getIsFlammable()) && material.getIsFlammable().equals("是")) { - materialDays = Math.min(materialDays, days_flammable); - } else if (StringUtils.isNotEmpty(material.getIsBatch()) && material.getIsBatch().equals("是")) { - materialDays = Math.min(materialDays, days_batch); + if (Objects.equals(material.getIsFlammable(), "是")) { + materialDays = Math.min(materialDays, daysFlammable); + } else if (Objects.equals(material.getIsBatch(), "是")) { + materialDays = Math.min(materialDays, daysBatch); } + // 计算呆滞时长 int differenceDay = DateUtils.secondToDays(difference); int num = differenceDay - materialDays; - // 根据呆滞时长将库存明细添加到相应列表 + + // 判断是否为呆滞库存 if (num > 0) { inventoryDetail.setDeadTime(num + "天"); - expiringInventory.add(inventoryDetail); - } else { - noExpiringInventory.add(inventoryDetail); + return true; } - } - + return false; + })).getOrDefault(expiring.equals("1"), Collections.emptyList()); + } - switch (expiring) { - //呆滞库存 - case "1": - returnInventory.addAll(expiringInventory); - break; - case "2": - //未呆滞库存 - returnInventory.addAll(noExpiringInventory); - break; - default: - //全部库存 - returnInventory.addAll(expiringInventory); - returnInventory.addAll(noExpiringInventory); - break; + public List<Material> getMaterialsByCodes(Set<String> materialCodes) { + if (CollectionUtils.isEmpty(materialCodes)) { + return Collections.emptyList(); } - return returnInventory; + //in 方法进行批量查询 + LambdaQueryWrapper<Material> queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(Material::getCode, materialCodes); + return materialService.list(queryWrapper); } @Override