liding
2 天以前 181b6290310424dfbf873a1177ad25d08417d4b3
fix(production): 修复生产订单状态更新逻辑

- 领料记录中实际用量归零时才标记退料完成,否则允许继续退料
- 生产订单状态由最后一道工序的合格产出推动,避免中间工序提前完工
- 只有订单未完工时才设置为进行中状态,防止已完成订单被错误重置
已修改2个文件
8 ■■■■ 文件已修改
src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionOrderPickServiceImpl.java
@@ -444,7 +444,8 @@
        updatePick.setId(oldPick.getId());
        updatePick.setReturnQty(totalReturnQty);
        updatePick.setActualQty(actualQty);
        updatePick.setReturned(totalReturnQty.compareTo(BigDecimal.ZERO) > 0);
        // 实际用量归零时才标记退料完成,否则允许继续退料。
        updatePick.setReturned(actualQty.compareTo(BigDecimal.ZERO) == 0);
        int affected = baseMapper.updateById(updatePick);
        if (affected <= 0) {
            throw new ServiceException("第" + rowNo + "行退料失败:更新领料主记录失败");
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -379,7 +379,6 @@
                productionOrder.setStartTime(LocalDateTime.now());
            }
            // 订单状态由最后一道工序的合格产出推动,避免中间工序提前完工。
            productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode());
            if (isLastOperation) {
                productionOrder.setCompleteQuantity(defaultDecimal(productionOrder.getCompleteQuantity()).add(productQty));
                if (productionOrder.getQuantity() != null
@@ -388,6 +387,10 @@
                    productionOrder.setStatus(ProductOrderStatusEnum.FINISHED.getCode());
                }
            }
            // 只有订单未完工时才设置为进行中
            if (!ProductOrderStatusEnum.FINISHED.getCode().equals(productionOrder.getStatus())) {
                productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode());
            }
            productionOrderMapper.updateById(productionOrder);
            BigDecimal workHours = BigDecimal.ZERO;