Java 代码优化:将生产订单投料合计中的克转换为公斤
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 quantity, String entryUnit) {
BigDecimal quantityInKG = new BigDecimal(quantity);
if (entryUnit.equalsIgnoreCase('G')) {
quantityInKG = quantityInKG.divide(new BigDecimal(1000));
}
return quantityInKG;
}
在上面的代码中,添加了convertToKG方法,用于将克(G)转换为公斤(KG),如果entryUnit为“G”。convertToKG方法在groupingBy和reducing收集器中收集数量时被调用。
这个代码优化可以帮助你更准确地计算生产订单的投料合计,避免由于单位不一致造成的误差。
原文地址: https://www.cveoy.top/t/topic/oipP 著作权归作者所有。请勿转载和采集!