全部
This commit is contained in:
@ -88,14 +88,12 @@ public class MatterController {
|
||||
@Parameter(description = "物资名称") @RequestParam(value = "name", required = false) String name) {
|
||||
|
||||
Map<String, Integer> goodsTotalMap = getGoodCountMap();
|
||||
|
||||
// 分页查询物资表的数据
|
||||
LambdaQueryWrapper<Matter> matterWrapper = new LambdaQueryWrapper<>();
|
||||
if (StringUtils.isNotBlank(name)) {
|
||||
matterWrapper.like(Matter::getName, name);
|
||||
}
|
||||
Page<Matter> matterPage = matterService.page(new Page<>(pageNum, pageSize), matterWrapper);
|
||||
|
||||
// 用统计出的数量替换分页结果中的数量
|
||||
if (!CollectionUtils.isEmpty(matterPage.getRecords())) {
|
||||
matterPage.getRecords().forEach(matter -> {
|
||||
@ -117,6 +115,7 @@ public class MatterController {
|
||||
LambdaQueryWrapper<Source> sourceWrapper = new LambdaQueryWrapper<>();
|
||||
sourceWrapper.in(Source::getId, pointIdList);
|
||||
List<Source> sourceList = sourceService.list(sourceWrapper);
|
||||
// 初始化物资统计Map: 用于存储 "物资ID -> 总数量" 的映射关系
|
||||
Map<String, Integer> goodsTotalMap = new HashMap<>();
|
||||
if (!CollectionUtils.isEmpty(sourceList)) {
|
||||
for (Source source : sourceList) {
|
||||
@ -129,9 +128,13 @@ public class MatterController {
|
||||
.ifPresent(contentList -> {
|
||||
for (Point.Attribute.Goods.GoodsContent goodsContent : contentList) {
|
||||
if (goodsContent == null) continue;
|
||||
String goodsName = Optional.ofNullable(goodsContent.getName()).orElse("未知物资");
|
||||
int count = Optional.ofNullable(goodsContent.getCnt()).map(Integer::valueOf).orElse(0);
|
||||
goodsTotalMap.merge(goodsName, count, Integer::sum);
|
||||
String goodsId = Optional.ofNullable(goodsContent.getId())
|
||||
.orElse("未知物资ID");
|
||||
int count = Optional.ofNullable(goodsContent.getCnt())
|
||||
.map(Integer::valueOf)
|
||||
.orElse(0);
|
||||
// 累加数量
|
||||
goodsTotalMap.merge(goodsId, count, Integer::sum);
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
@ -142,16 +145,21 @@ public class MatterController {
|
||||
// 查询物资列表
|
||||
List<Matter> matterList = matterService.list();
|
||||
|
||||
// 以数据库为准、过滤并构建结果
|
||||
Map<String, Integer> resultMap = matterList.stream()
|
||||
.map(Matter::getName) // 提取所有标准物资名称
|
||||
.filter(goodsTotalMap::containsKey) // 只保留在统计结果中存在的物资
|
||||
.collect(Collectors.toMap(
|
||||
Function.identity(), // Key 为物资名称
|
||||
goodsTotalMap::get // Value 为对应的数量
|
||||
));
|
||||
// 先将 matterList 转换为 ID -> Name 的映射Map、以提高查询效率
|
||||
Map<String, String> matterIdToNameMap = matterList.stream()
|
||||
.collect(Collectors.toMap(Matter::getId, Matter::getName));
|
||||
|
||||
// 返回与标准物资匹配的统计结果
|
||||
// 高效地将 goodsTotalMap 转换为 resultMap
|
||||
Map<String, Integer> resultMap = new HashMap<>();
|
||||
goodsTotalMap.forEach((goodsId, count) -> {
|
||||
// 从映射Map中直接根据ID获取名称、时间复杂度为 O(1)
|
||||
String goodsName = matterIdToNameMap.get(goodsId);
|
||||
if (goodsName != null) {
|
||||
resultMap.put(goodsName, count);
|
||||
}
|
||||
});
|
||||
|
||||
// 返回结果
|
||||
return ApiResponse.success(resultMap);
|
||||
}
|
||||
|
||||
|
||||
@ -174,8 +174,8 @@ public class ModelLibraryController {
|
||||
|
||||
@Operation(summary = "模型类型列表")
|
||||
@GetMapping("/modelTypeList")
|
||||
public ApiResponse modelTypeTree() throws SQLException, IllegalAccessException, InstantiationException {
|
||||
return ApiResponse.success(modelTypeList());
|
||||
public ApiResponse modelTypeTree(@Parameter(description = "模型名称") @RequestParam("modelName") String modelName) throws SQLException, IllegalAccessException, InstantiationException {
|
||||
return ApiResponse.success(modelTypeList(modelName));
|
||||
}
|
||||
|
||||
@Operation(summary = "添加模型文件")
|
||||
@ -440,25 +440,40 @@ public class ModelLibraryController {
|
||||
SQLiteUtil.executeUpdate(modelPath, "UPDATE model_type SET parent_id = ?, tree_index = ? WHERE id = ?", params);
|
||||
}
|
||||
// 返回树列表
|
||||
return ApiResponse.success(modelTypeList());
|
||||
return ApiResponse.success(modelTypeList(null));
|
||||
}
|
||||
|
||||
private List<ModelTypeVo> modelTypeList() throws SQLException, IllegalAccessException, InstantiationException {
|
||||
private List<ModelTypeVo> modelTypeList(String modelName) throws SQLException, IllegalAccessException, InstantiationException {
|
||||
String modelPath = getModelLibrary();
|
||||
if (modelPath == null) {
|
||||
return null;
|
||||
}
|
||||
String sql = """
|
||||
SELECT id, name, parent_id as parentId,
|
||||
tree_index as treeIndex, created_at as createdAt,
|
||||
updated_at as updatedAt FROM model_type ORDER BY tree_index ASC
|
||||
""";
|
||||
// 查询所有模型的类型
|
||||
List<ModelType> modelTypes = SQLiteUtil.queryForList(modelPath, sql, null, ModelType.class);
|
||||
|
||||
StringBuilder sqlBuilder = new StringBuilder("""
|
||||
SELECT id, name, parent_id as parentId,
|
||||
tree_index as treeIndex, created_at as createdAt,
|
||||
updated_at as updatedAt
|
||||
FROM model_type
|
||||
""");
|
||||
|
||||
if (modelName != null && !modelName.trim().isEmpty()) {
|
||||
sqlBuilder.append("WHERE name LIKE '%").append(modelName.trim()).append("%' ");
|
||||
}
|
||||
|
||||
// 为所有查询都加上统一的排序条件
|
||||
sqlBuilder.append("ORDER BY tree_index ASC");
|
||||
|
||||
// 执行查询
|
||||
List<ModelType> modelTypes = SQLiteUtil.queryForList(
|
||||
modelPath,
|
||||
sqlBuilder.toString(),
|
||||
null,
|
||||
ModelType.class
|
||||
);
|
||||
|
||||
// 转换为树形结构
|
||||
return buildModelTypeTree(modelTypes);
|
||||
}
|
||||
|
||||
private List<ModelTypeVo> buildModelTypeTree(List<ModelType> modelTypes) {
|
||||
List<ModelTypeVo> treeNodes = modelTypes.stream()
|
||||
.map(modelType -> new ModelTypeVo(modelType))
|
||||
|
||||
Reference in New Issue
Block a user