gongchunyi
2026-04-29 0e0307ae97edf2e4934ff3396be0deed6e4c1734
fix: 生产订单手动新增修改
已修改1个文件
63 ■■■■■ 文件已修改
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -48,6 +48,9 @@
    private ProductWorkOrderMapper productWorkOrderMapper;
    @Autowired
    private ProductProcessMapper productProcessMapper;
    @Autowired
    private ProductionProductMainMapper productionProductMainMapper;
    @Autowired
@@ -140,10 +143,70 @@
        this.save(productOrder);
        if (ObjectUtils.isNotEmpty(productOrder.getRouteId())) {
            this.bindingRoute(productOrder);
        } else {
            // 无旧工艺路线时,按产品型号拉取 product_process 自动生成工序和工单
            createRouteAndWorkOrdersByProductProcess(productOrder);
        }
        return true;
    }
    /**
     * 按 product_process 自动生成生产订单工序与工单
     */
    private void createRouteAndWorkOrdersByProductProcess(ProductOrder productOrder) {
        List<ProductProcess> productProcesses = productProcessMapper.selectList(new QueryWrapper<ProductProcess>().lambda()
                .eq(ProductProcess::getProductModelId, productOrder.getProductModelId())
                .orderByAsc(ProductProcess::getId));
        if (ObjectUtils.isEmpty(productProcesses)) {
            return;
        }
        ProductProcessRoute productProcessRoute = new ProductProcessRoute();
        productProcessRoute.setProductModelId(productOrder.getProductModelId());
        productProcessRoute.setProductOrderId(productOrder.getId());
        productProcessRouteMapper.insert(productProcessRoute);
        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
        int sequenceNumber = 1;
        if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
            String lastNo = lastWorkOrder.getWorkOrderNo().toString();
            if (lastNo.startsWith(datePrefix)) {
                String seqStr = lastNo.substring(datePrefix.length());
                try {
                    sequenceNumber = Integer.parseInt(seqStr) + 1;
                } catch (NumberFormatException e) {
                    sequenceNumber = 1;
                }
            }
        }
        for (int i = 0; i < productProcesses.size(); i++) {
            ProductProcess process = productProcesses.get(i);
            ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
            productProcessRouteItem.setProductModelId(productOrder.getProductModelId());
            productProcessRouteItem.setProcessId(process.getId());
            productProcessRouteItem.setProductOrderId(productOrder.getId());
            productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
            productProcessRouteItem.setDragSort(i + 1);
            productProcessRouteItem.setIsQuality(process.getIsQuality());
            int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
            if (insert > 0) {
                String workOrderNoStr = "GD" + String.format("%s%03d", datePrefix, sequenceNumber);
                sequenceNumber++;
                ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                productWorkOrder.setProductOrderId(productOrder.getId());
                productWorkOrder.setPlanQuantity(productOrder.getQuantity());
                productWorkOrder.setWorkOrderNo(workOrderNoStr);
                productWorkOrder.setStatus(1);
                productWorkOrderMapper.insert(productWorkOrder);
            }
        }
    }
    @Override
    public Boolean delete(Long[] ids) {
        //如果已经开始生产,不能删除