buhuazhen
17 小时以前 754431328c667fc5bfecb3220a27c6afbaf6f5ea
fix(production): 修复首末工序数量计算逻辑

- 在生产主服务实现中新增首道工序ID列表
- 支持首道工序数量与末道工序数量相同的处理逻辑
- 修改单位数量计算方式,首末工序均采用乘积计算
- 在销售台账产品服务实现中启用首道工序处理的注释代码
- 修正首道工序数量计算的结果映射逻辑
已修改2个文件
20 ■■■■ 文件已修改
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -164,15 +164,23 @@
        List<ProductStructureDto> productStructureDtos = productStructureMapper.listBybomAndProcess(productProcessRoute.getBomId(), productProcess.getId());
        List<Long> lastProcessIds = new ArrayList<>();
        List<Long> firstProcessIds = new ArrayList<>();
        if (!allProcess.isEmpty()) {
            String lastProcessName = allProcess.get(allProcess.size() - 1).getProcessName();
            String firstProcessName = allProcess.get(0).getProcessName();
            for (int i = allProcess.size() - 1; i >= 0; i--) {
                ProductStructureDto d = allProcess.get(i);
                if (lastProcessName.equals(d.getProcessName())) {
                    lastProcessIds.add(d.getId());
                } else {
                    break;
                }
            }
            for (ProductStructureDto d : allProcess) {
                if (firstProcessName.equals(d.getProcessName())) {
                    firstProcessIds.add(d.getId());
                } else {
                    break;
                }
@@ -190,9 +198,9 @@
            ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId());
            Product product = productMapper.selectById(productModel1.getProductId());
            // 判断是否为最后一道工序
            // 判断是否为最后一道工序 或者为第一道工序
            BigDecimal needQuantity = dto.getQuantity().divide(productStructureDto.getUnitQuantity(), 2, BigDecimal.ROUND_HALF_UP);
            if (lastProcessIds.contains(productStructureDto.getId())) {
            if (lastProcessIds.contains(productStructureDto.getId()) || firstProcessIds.contains(productStructureDto.getId())) {
                needQuantity = dto.getQuantity().multiply(productStructureDto.getUnitQuantity());
            }
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -368,9 +368,9 @@
                quantity = quantity.multiply(productStructureDto.getUnitQuantity());
                // 第一道工序
                BigDecimal result = quantity;
//                if(i == 0){
//                     result = quantity.divide(productStructureDto.getUnitQuantity(), 2, RoundingMode.HALF_UP);
//                }
                if(i == 0){
                     result = quantity.divide(productStructureDto.getUnitQuantity(), 2, RoundingMode.HALF_UP);
                }
                resultMap.put(productStructureDto.getProcessId(),result );
            } else {
                if(Optional.ofNullable(productStructureDto.getProcessName()).orElse("").contains("包装")){