记录一下,物料安全数量接口2

记录安全数量接口2,查询逻辑

1.需求

根据物料表中的物料安全数量,和物料总数量,最后生成这样的数据

image

2.对应代码

  /**
   * 安全数量 接口2
   * 查询库存总数是否小于安全数量的物料信息
   * @param pageHelper 分页
   * @return 物料名称、物料总数、安全值、所在门+门内数量
   */
  @Override
  public IPage<Map<String,Object>> getSafetyDetails(PageHelper<Map<String, Object>> pageHelper) {
    // 查询未删除的物料集合
    List<Material> materialList = materialMapper.selectList(new LambdaQueryWrapper<Material>().eq(Material::getDelFlag, "0"));
    // 查询未删除的物料总库存集合
    List<MaterialTotalCount> materialTotalCountList
            = materialTotalCountMapper.selectList(
                    new LambdaQueryWrapper<MaterialTotalCount>().eq(MaterialTotalCount::getDelFlag, "0"));

    // 如果物料总数 < 安全数 ,则将安全数 存入 MaterialTotalCount 中的 safetyCount 字段
    List<MaterialTotalCount> totalList = materialTotalCountList.stream()
            .map(totalCount -> materialList.stream()
                    .filter(materials -> totalCount.getMaterialId().equals(materials.getId()))
                    .filter(material -> totalCount.getTotalCount() < material.getSafetyCount())
                    .map(material -> { totalCount.setSafetyCount(material.getSafetyCount());
                    return totalCount;
    }).collect(Collectors.toList())).flatMap(List::stream).distinct().collect(Collectors.toList());

    // 创建返回结果集
    List<Map<String, Object>> results = new ArrayList<>();
    // 构造分页返回数据
    IPage<Map<String, Object>> pagePlus = pageHelper.getPagePlus();

    // 遍历 物料总数集合
    for (MaterialTotalCount t : totalList) {

      Map<String, Object> map = new HashMap<>(16);

      String materialId = t.getMaterialId();
      // 根据物料id查询物料名称
      String materialName = iMaterialService.getOne(Wrappers.<Material>lambdaQuery().eq(Material::getId, materialId)).getMaterialName();

      // 根据物料id获取对应 门内物料集合
      List<MaterialCount> materialCounts = materialCountMapper.selectList(new LambdaQueryWrapper<MaterialCount>().eq(MaterialCount::getMaterialId, materialId));
      // 拼接 门名称+门内数量
      StringBuilder str = new StringBuilder();
      for (MaterialCount m : materialCounts) {
        CabinetDoor cabinetDoor = iCabinetDoorService.getOne(Wrappers.<CabinetDoor>lambdaQuery().eq(CabinetDoor::getId, m.getDoorId()));
        if (cabinetDoor != null) {
          String doorName = cabinetDoor.getDoorName();
          int materialCount = m.getMaterialCount();
          str.append(doorName).append(":").append(materialCount).append(";");
        }

      }
      if (str.length() > 0) {
        str.replace(str.length() - 1, str.length(), "");
      }

      map.put("doorDetails", str.toString());
      map.put("materialName", materialName);
      map.put("safetyCount", t.getSafetyCount());
      map.put("totalCount", t.getTotalCount());
      results.add(map);
    }
    pagePlus.setRecords(results);
    return pagePlus;
  }
posted @ 2022-02-17 10:34  Charles博客  阅读(49)  评论(0编辑  收藏  举报