Files
OMS/app/ticket/docs/usage_example.md
chenping 61783b7d01 1. 【新增】售后单售后原因类型支持搜索
2. 【新增】手工创建订单折扣可输入正数

3. 【优化】盘点申请单确认

4. 【修复】采购退货单模拟出库失败问题

5. 【新增】订单金额客户实付与结算金额

6. 【优化】仓库发货统计报表物料名称显示

7. 【优化】自有仓储虚拟发货逻辑

8. 【修复】基础物料分类管理问题
2026-04-01 11:59:17 +08:00

9.3 KiB

订单赠品审批流程使用示例

概述

本文档展示了如何在订单编辑添加赠品后触发审批流程的完整实现。

数据库表结构

核心表关系

  1. 订单相关表

    • ome_orders - 订单主表
    • ome_order_objects - 订单子单表(包含赠品)
    • ome_order_items - 订单行明细表
  2. 审批流程表

    • ticket_workflow_template - 审批流模板表
    • ticket_workflow_node - 审批流节点表
    • ticket_workflow_case - 审批流实例表
    • ticket_workflow_record - 审批记录表

使用流程

1. 配置审批模板

首先需要创建赠品审批模板:

// 创建审批模板
$templateData = [
    'template_bn' => 'GIFT_APPROVAL_001',
    'template_name' => '赠品审批模板',
    'scene_type' => 'add_gift',
    'description' => '用于订单添加赠品的审批流程',
    'is_enabled' => 'true'
];

$templateMdl = app::get('ticket')->model('workflow_template');
$template_id = $templateMdl->insert($templateData);

// 创建审批节点
$nodeData = [
    'node_name' => '部门经理审批',
    'node_type' => 'approval',
    'template_id' => $template_id,
    'step_order' => 1,
    'assignee_type' => 'user',
    'assignee_id' => 1001, // 部门经理用户ID
    'assignee_name' => '张经理'
];

$nodeMdl = app::get('ticket')->model('workflow_node');
$nodeMdl->insert($nodeData);

2. 订单编辑时触发审批

在订单编辑页面添加赠品时:

// 订单编辑控制器
class ome_ctl_admin_orders extends desktop_controller {
    
    public function add_gift() {
        $order_id = $_POST['order_id'];
        $gift_items = $_POST['gift_items'];
        
        // 1. 保存赠品到订单
        $this->saveGiftToOrder($order_id, $gift_items);
        
        // 2. 触发审批流程
        $giftApprovalService = kernel::single('ticket_service_order_gift_approval');
        $result = $giftApprovalService->triggerGiftApproval($order_id, $gift_items);
        
        if($result['rsp'] == 'succ') {
            $this->end(true, '赠品添加成功,审批流程已启动');
        } else {
            $this->end(false, $result['error_msg']);
        }
    }
    
    private function saveGiftToOrder($order_id, $gift_items) {
        // 保存赠品到订单明细表
        $orderObjectMdl = app::get('ome')->model('order_objects');
        
        foreach($gift_items as $gift) {
            $objectData = [
                'order_id' => $order_id,
                'obj_type' => 'gift',
                'name' => $gift['name'],
                'price' => $gift['price'],
                'quantity' => $gift['quantity'],
                // ... 其他字段
            ];
            
            $orderObjectMdl->insert($objectData);
        }
    }
}

3. 审批人处理审批

审批人可以在审批页面查看和处理:

// 审批页面
public function audit($case_id) {
    $caseMdl = app::get('ticket')->model('workflow_case');
    $caseInfo = $caseMdl->dump($case_id);
    
    // 获取订单和赠品信息
    $workflowCaseLib = kernel::single('ticket_workflow_case');
    $orderResult = $workflowCaseLib->getOrderDetails($caseInfo);
    
    $this->pagedata['caseInfo'] = $caseInfo;
    $this->pagedata['orderInfo'] = $orderResult['data'];
    $this->page('admin/workflow/case/audit.html');
}

// 处理审批
public function do_audit() {
    $data = $_POST;
    
    $workflowCaseLib = kernel::single('ticket_workflow_case');
    $result = $workflowCaseLib->processAudit($data, $error_msg);
    
    if($result['rsp'] == 'succ') {
        $this->end(true, '审批处理成功');
    } else {
        $this->end(false, $error_msg);
    }
}

4. 查看审批状态

订单编辑页面可以显示审批状态:

// 在订单编辑页面显示审批状态
public function edit($order_id) {
    $orderMdl = app::get('ome')->model('orders');
    $orderInfo = $orderMdl->dump($order_id);
    
    // 检查审批状态
    $giftApprovalService = kernel::single('ticket_service_order_gift_approval');
    $approvalResult = $giftApprovalService->getOrderApprovalStatus($order_id);
    
    $this->pagedata['orderInfo'] = $orderInfo;
    $this->pagedata['approvalStatus'] = $approvalResult['data'];
    $this->page('admin/orders/edit.html');
}

前端页面示例

审批页面模板

<!-- admin/workflow/case/audit.html -->
<div class="audit-container">
    <h3>订单赠品审批</h3>
    
    <div class="order-info">
        <p><strong>订单号:</strong>{$orderInfo.order_bn}</p>
        <p><strong>客户:</strong>{$orderInfo.ship_name}</p>
        <p><strong>订单金额:</strong>{$orderInfo.total_amount}</p>
    </div>
    
    <div class="gift-list">
        <h4>申请添加的赠品:</h4>
        <table class="table">
            <thead>
                <tr>
                    <th>赠品名称</th>
                    <th>数量</th>
                    <th>单价</th>
                    <th>小计</th>
                </tr>
            </thead>
            <tbody>
                {foreach from=$giftList item=gift}
                <tr>
                    <td>{$gift.name}</td>
                    <td>{$gift.quantity}</td>
                    <td>{$gift.price}</td>
                    <td>{$gift.amount}</td>
                </tr>
                {/foreach}
            </tbody>
        </table>
    </div>
    
    <form method="post" action="index.php?app=ticket&ctl=admin_workflow_case&act=do_audit">
        <input type="hidden" name="case_id" value="{$data.id}">
        
        <div class="audit-action">
            <label>审批意见:</label>
            <textarea name="remark" rows="4" cols="50"></textarea>
        </div>
        
        <div class="audit-buttons">
            <button type="submit" name="action" value="approve" class="btn btn-success">同意</button>
            <button type="submit" name="action" value="reject" class="btn btn-danger">拒绝</button>
            <button type="submit" name="action" value="return" class="btn btn-warning">退回</button>
        </div>
    </form>
</div>

订单编辑页面集成

<!-- 在订单编辑页面添加审批状态显示 -->
<div class="approval-status">
    {if $approvalStatus}
        <h4>赠品审批状态</h4>
        {foreach from=$approvalStatus item=approval}
        <div class="approval-item">
            <p><strong>审批号:</strong>{$approval.case_bn}</p>
            <p><strong>状态:</strong>{$approval.status}</p>
            <p><strong>提交人:</strong>{$approval.submitter_name}</p>
            <p><strong>当前审批人:</strong>{$approval.assignee_name}</p>
            
            {if $approval.records}
            <div class="approval-records">
                <h5>审批记录:</h5>
                {foreach from=$approval.records item=record}
                <div class="record-item">
                    <span>{$record.assignee_name}</span>
                    <span>{$record.action}</span>
                    <span>{$record.remark}</span>
                    <span>{$record.process_time|date_format:'%Y-%m-%d %H:%M:%S'}</span>
                </div>
                {/foreach}
            </div>
            {/if}
        </div>
        {/foreach}
    {/if}
</div>

API接口示例

创建审批实例

// POST /api/ticket/workflow/create_gift_approval
{
    "order_id": 12345,
    "gift_items": [
        {
            "name": "赠品A",
            "quantity": 1,
            "price": 10.00,
            "amount": 10.00
        },
        {
            "name": "赠品B", 
            "quantity": 2,
            "price": 5.00,
            "amount": 10.00
        }
    ]
}

// 响应
{
    "rsp": "succ",
    "msg": "赠品审批流程已启动",
    "data": {
        "case_id": 1001,
        "case_bn": "WF202507100001"
    }
}

处理审批

// POST /api/ticket/workflow/process_audit
{
    "case_id": 1001,
    "action": "approve",
    "remark": "同意添加赠品"
}

// 响应
{
    "rsp": "succ",
    "msg": "审批处理成功"
}

查询审批状态

// GET /api/ticket/workflow/approval_status?order_id=12345

// 响应
{
    "rsp": "succ",
    "data": [
        {
            "case_id": 1001,
            "case_bn": "WF202507100001",
            "status": "approved",
            "submitter_name": "张三",
            "assignee_name": "李四",
            "start_time": 1640995200,
            "end_time": 1640998800,
            "records": [
                {
                    "assignee_name": "李四",
                    "action": "approve",
                    "remark": "同意添加赠品",
                    "process_time": 1640998800
                }
            ]
        }
    ]
}

注意事项

  1. 权限控制:确保只有有权限的用户才能进行审批操作
  2. 状态同步:审批通过后要及时更新订单状态
  3. 日志记录:所有审批操作都要记录详细日志
  4. 异常处理:处理审批流程中的各种异常情况
  5. 性能优化:大量数据时的查询和统计性能优化

扩展功能

  1. 多级审批:支持多级审批流程
  2. 条件审批:根据订单金额等条件自动选择审批人
  3. 审批委托:支持审批人委托他人审批
  4. 审批提醒:邮件、短信等提醒功能
  5. 审批统计:详细的审批数据统计和分析