以下是对代码的优化建议:

  1. 将一些常量或重复使用的变量定义为常量或静态变量,避免重复创建和赋值,提高性能。

  2. 在lambda表达式中使用方法引用或静态导入,使代码更加简洁。

  3. 将长的if-else语句和嵌套的for循环拆分成小的方法,使代码更加可读和易于维护。

  4. 使用Java 8的Stream API进行集合操作,使代码更加简洁和易于阅读。

以下是优化后的代码:

@PostMapping("/BOM/referenceDataTest") public Map<String, Object> referenceDataTest(@RequestBody String requestBody) { JSONObject params = JSON.parseObject(requestBody); List materialList = materialService.list(Wrappers.lambdaQuery() .eq(Material::getProcessId, params.getString("processId")) .orderByAsc(Material::getSerialNumber));

List<Material> oldMaterialList = materialList;
int count = params.getIntValue("count");
String country = params.getString("country");
String supplier = params.getString("supplier");

String batch = "GDZB2A38SA";
Integer version = 1;
List<NPallet> palletList = nPalletService.list(Wrappers.<NPallet>lambdaQuery()
        .select(NPallet::get托架型号)
        .eq(NPallet::get批次号, batch)
        .eq(NPallet::get关联版本, version)
        .likeRight(NPallet::get包装物料, "屏")
        .orderByAsc(NPallet::get序号));
List<String> collect = palletList.stream().map(NPallet::get托架型号).collect(Collectors.toList());
int y = NumberUtil.parseInt(StrUtil.subAfter(collect.get(0), "×", true));

List<Material> newMaterialList = oldMaterialList.stream()
        .filter(i -> checkMaterial(i, count, country, supplier))
        .collect(Collectors.toList());

Map<String, Object> result = new HashMap<>();
result.put("code", 0);
result.put("message", "操作成功");
result.put("bom", newMaterialList);
return result;

}

private boolean checkMaterial(Material material, int count, String country, String supplier) { JSONArray limit = JSON.parseArray(material.getLimit()); if (limit == null) { return true; } List resultList = new ArrayList<>(); for (int j = 0; j < limit.size(); j++) { JSONArray limitArray = limit.getJSONArray(j); if (limitArray.size() == 1) { boolean selected = checkLimitItem(limitArray.getJSONObject(0), count, country, supplier); if (!selected) { return false; } } else { boolean result = false; for (int k = 0; k < limitArray.size(); k++) { JSONObject limitItem = limitArray.getJSONObject(k); result = checkLimitItem(limitItem, count, country, supplier); if (result) { break; } } resultList.add(result); } } if (resultList.size() != 0 && resultList.stream().allMatch(j -> j)) { return false; } return true; }

private boolean checkLimitItem(JSONObject limitItem, int count, String country, String supplier) { switch (limitItem.getString("key")) { case "woodenCase": return true; case "count": if (limitItem.getIntValue("value") > count) { return true; } else { return false; } case "country": if (limitItem.getString("operator").equals("不为")) { if (!limitItem.getString("value").equals(country)) { return true; } else { return false; } } else { if (limitItem.getString("value").equals(country)) { return true; } else { return false; } } case "supplier": if (limitItem.getString("operator").equals("不为")) { if (!limitItem.getString("value").equals(supplier)) { return true; } else { return false; } } else { if (limitItem.getString("value").equals(supplier)) { return true; } else { return false; } } default: return true; }

PostMappingBOMreferenceDataTest public MapString Object referenceDataTestRequestBody String requestBody JSONObject params = JSONparseObjectrequestBody; ListMaterial materialList = ma

原文地址: https://www.cveoy.top/t/topic/e3bD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录