记录一下,物料安全数量接口2
记录安全数量接口2,查询逻辑
1.需求
根据物料表中的物料安全数量,和物料总数量,最后生成这样的数据
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效