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方法在groupingByreducing收集器中收集数量时被调用。

这个代码优化可以帮助你更准确地计算生产订单的投料合计,避免由于单位不一致造成的误差。

Java 代码优化:将生产订单投料合计中的克转换为公斤

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

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