buhuazhen
2 天以前 a27bcd2f9cba539ba9ffb7cfa949dc102d7446ff
fix(production): 修复单位数量为零时的计算错误

- 导入并使用RoundingMode.HALF_UP替代过时的BigDecimal舍入模式常量
- 修改单位数量为零时的判断逻辑,避免除以零产生异常
- 仅当单位数量不为零时进行除法计算,保证计算安全性
- 保持原有最后和第一道工序的数量乘法逻辑不变
已修改1个文件
9 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -44,6 +44,7 @@
import oshi.driver.mac.net.NetStat;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
@@ -199,12 +200,14 @@
            Product product = productMapper.selectById(productModel1.getProductId());
            // 判断是否为最后一道工序 或者为第一道工序
            BigDecimal needQuantity = dto.getQuantity().divide(productStructureDto.getUnitQuantity(), 2, BigDecimal.ROUND_HALF_UP);
            BigDecimal needQuantity = BigDecimal.ZERO;
            if(BigDecimal.ZERO.equals(productStructureDto.getUnitQuantity())){
                needQuantity = dto.getQuantity().divide(productStructureDto.getUnitQuantity(), 2, RoundingMode.HALF_UP);
            }
            if (lastProcessIds.contains(productStructureDto.getId()) || firstProcessIds.contains(productStructureDto.getId())) {
                needQuantity = dto.getQuantity().multiply(productStructureDto.getUnitQuantity());
            }
            // 查询产品库存
            BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity");
            if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) {