Java 代码优化:将物料数量单位从 G 转换为 KG
private Map<String, BigDecimal> getReleaseTotal(String manufacturingOrder){
Map map = new HashMap<String,String>();
map.put('manufacturingOrder',manufacturingOrder);
map.put('goodsMovementType','261');
List<OdsMaterialDocumentItem> odsMaterialDocumentItems261 = odsMaterialDocumentMapper.selectItemsByMap(map);
map.put('goodsMovementType','262');
List<OdsMaterialDocumentItem> odsMaterialDocumentItems262 = odsMaterialDocumentMapper.selectItemsByMap(map);
Map<String, BigDecimal> quantityByMaterial261 = odsMaterialDocumentItems261.stream()
.collect(Collectors.groupingBy(OdsMaterialDocumentItem::getMaterial,
Collectors.reducing(BigDecimal.ZERO,
item -> convertToKG(item.getQuantityInEntryUnit(), item.getEntryUnit()),
BigDecimal::add)));
Map<String, BigDecimal> quantityByMaterial262 = null;
if (oConvertUtils.listIsNotEmpty(odsMaterialDocumentItems262)){
quantityByMaterial262 = odsMaterialDocumentItems262.stream()
.collect(Collectors.groupingBy(OdsMaterialDocumentItem::getMaterial,
Collectors.reducing(BigDecimal.ZERO,
item -> convertToKG(item.getQuantityInEntryUnit(), item.getEntryUnit()),
BigDecimal::add)));
}
Map<String, BigDecimal> quantityByMaterial = new HashMap<>(); //生产订单投料合计
final Map<String, BigDecimal> finalQuantityByMaterial262 = quantityByMaterial262;
quantityByMaterial261.forEach((material, quantity1) -> {
BigDecimal quantity2 = BigDecimal.ZERO;
if(oConvertUtils.isNotEmpty(finalQuantityByMaterial262)){
quantity2 = finalQuantityByMaterial262.getOrDefault(material, BigDecimal.ZERO);
}
quantityByMaterial.merge(material, quantity1.subtract(quantity2), BigDecimal::subtract);
});
return quantityByMaterial;
}
private BigDecimal convertToKG(String quantityInEntryUnit, String entryUnit) {
BigDecimal quantityInKG = new BigDecimal(quantityInEntryUnit);
if (entryUnit.equals('G')) {
quantityInKG = quantityInKG.divide(new BigDecimal(1000));
}
return quantityInKG;
}
该代码片段展示了如何将 Java 代码中的物料数量单位从 G 转换为 KG,并使用该转换后的值进行计算。
首先,代码定义了一个名为 convertToKG 的方法,该方法接收两个参数:
quantityInEntryUnit:物料数量,以字符串形式表示entryUnit:物料数量的单位
该方法首先将 quantityInEntryUnit 转换为 BigDecimal 类型。然后,它检查 entryUnit 是否等于 'G'。如果是,则将 quantityInKG 除以 1000,将其转换为 KG。
接下来,代码定义了一个名为 getReleaseTotal 的方法,该方法接收一个参数:
manufacturingOrder:生产订单号
该方法首先从数据库中查询出生产订单的所有物料信息,并将其存储在两个 List 中:odsMaterialDocumentItems261 和 odsMaterialDocumentItems262。
然后,代码使用 stream 和 groupingBy 方法将 odsMaterialDocumentItems261 和 odsMaterialDocumentItems262 中的物料信息分组,并使用 reducing 方法计算每个物料的总数量。在计算总数量时,代码调用 convertToKG 方法将物料数量单位从 G 转换为 KG。
最后,代码使用 forEach 方法遍历 quantityByMaterial261 中的每个物料,并计算每个物料的最终数量。最终数量的计算结果存储在 quantityByMaterial 中。
该代码片段展示了如何使用 Java 代码将物料数量单位从 G 转换为 KG,并使用该转换后的值进行计算。该代码片段简洁易懂,易于理解和维护。
**注意:**该代码片段使用了 oConvertUtils 和 odsMaterialDocumentMapper 两个外部类。请根据实际情况修改代码,确保代码能够正常运行。
原文地址: https://www.cveoy.top/t/topic/oisH 著作权归作者所有。请勿转载和采集!