gaoluyang
5 天以前 eee03bbfea8b15d1a56ab63bd09a35c6c861c4cb
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
@@ -415,7 +415,24 @@
            throw exception(SALE_ORDER_SUBMIT_FAIL_ITEM_EMPTY, saleOrder.getNo());
        }
        // 4. 创建 BPM 流程实例(审批在协同办公完成)
        // 4. 合同转来的销售订单(contractId 非空)无需再走审批:
        //    合同在 CRM 已审批通过,订单内容由合同带入,提交即生效。
        //    生效后:需要生产的明细自动创建 MPS 流转生产模块;无需生产的明细可直接在仓储生成发货通知单。
        //    历史合同生成的订单明细可能未维护“是否需要生产”,按系统默认(需要生产)补齐后再生效。
        if (saleOrder.getContractId() != null) {
            items.stream()
                    .filter(item -> item.getNeedProduction() == null)
                    .forEach(item -> saleOrderItemMapper.updateById(
                            new ErpSaleOrderItemDO().setId(item.getId()).setNeedProduction(1)));
            saleOrderMapper.updateById(new ErpSaleOrderDO()
                    .setId(id)
                    .setStatus(ErpAuditStatus.APPROVING.getStatus())
                    .setProcessInstanceId(""));
            updateSaleOrderAuditStatus(id, cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum.APPROVE.getStatus());
            return;
        }
        // 5. 创建 BPM 流程实例(审批在协同办公完成)
        // 全局免审批:业务校验通过后直接执行审批通过逻辑,无需流程模型。
        if (processInstanceApi.isGlobalAutoApprove()) {
            saleOrderMapper.updateById(new ErpSaleOrderDO()
@@ -431,7 +448,7 @@
                        .setProcessDefinitionKey(processDefinitionKey)
                        .setBusinessKey(String.valueOf(id)));
        // 5. 更新销售订单状态为审批中,记录流程实例编号
        // 6. 更新销售订单状态为审批中,记录流程实例编号
        saleOrderMapper.updateById(new ErpSaleOrderDO()
                .setId(id)
                .setStatus(ErpAuditStatus.APPROVING.getStatus())