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 中:odsMaterialDocumentItems261odsMaterialDocumentItems262

然后,代码使用 streamgroupingBy 方法将 odsMaterialDocumentItems261odsMaterialDocumentItems262 中的物料信息分组,并使用 reducing 方法计算每个物料的总数量。在计算总数量时,代码调用 convertToKG 方法将物料数量单位从 G 转换为 KG。

最后,代码使用 forEach 方法遍历 quantityByMaterial261 中的每个物料,并计算每个物料的最终数量。最终数量的计算结果存储在 quantityByMaterial 中。

该代码片段展示了如何使用 Java 代码将物料数量单位从 G 转换为 KG,并使用该转换后的值进行计算。该代码片段简洁易懂,易于理解和维护。

**注意:**该代码片段使用了 oConvertUtilsodsMaterialDocumentMapper 两个外部类。请根据实际情况修改代码,确保代码能够正常运行。

Java 代码优化:将物料数量单位从 G 转换为 KG

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

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