mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-27 11:15:43 +08:00
1. 【新增】售后单售后原因类型支持搜索
2. 【新增】手工创建订单折扣可输入正数 3. 【优化】盘点申请单确认 4. 【修复】采购退货单模拟出库失败问题 5. 【新增】订单金额客户实付与结算金额 6. 【优化】仓库发货统计报表物料名称显示 7. 【优化】自有仓储虚拟发货逻辑 8. 【修复】基础物料分类管理问题
This commit is contained in:
341
app/ticket/docs/usage_example.md
Normal file
341
app/ticket/docs/usage_example.md
Normal file
@@ -0,0 +1,341 @@
|
||||
# 订单赠品审批流程使用示例
|
||||
|
||||
## 概述
|
||||
|
||||
本文档展示了如何在订单编辑添加赠品后触发审批流程的完整实现。
|
||||
|
||||
## 数据库表结构
|
||||
|
||||
### 核心表关系
|
||||
|
||||
1. **订单相关表**
|
||||
- `ome_orders` - 订单主表
|
||||
- `ome_order_objects` - 订单子单表(包含赠品)
|
||||
- `ome_order_items` - 订单行明细表
|
||||
|
||||
2. **审批流程表**
|
||||
- `ticket_workflow_template` - 审批流模板表
|
||||
- `ticket_workflow_node` - 审批流节点表
|
||||
- `ticket_workflow_case` - 审批流实例表
|
||||
- `ticket_workflow_record` - 审批记录表
|
||||
|
||||
## 使用流程
|
||||
|
||||
### 1. 配置审批模板
|
||||
|
||||
首先需要创建赠品审批模板:
|
||||
|
||||
```php
|
||||
// 创建审批模板
|
||||
$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. 订单编辑时触发审批
|
||||
|
||||
在订单编辑页面添加赠品时:
|
||||
|
||||
```php
|
||||
// 订单编辑控制器
|
||||
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. 审批人处理审批
|
||||
|
||||
审批人可以在审批页面查看和处理:
|
||||
|
||||
```php
|
||||
// 审批页面
|
||||
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. 查看审批状态
|
||||
|
||||
订单编辑页面可以显示审批状态:
|
||||
|
||||
```php
|
||||
// 在订单编辑页面显示审批状态
|
||||
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');
|
||||
}
|
||||
```
|
||||
|
||||
## 前端页面示例
|
||||
|
||||
### 审批页面模板
|
||||
|
||||
```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>
|
||||
```
|
||||
|
||||
### 订单编辑页面集成
|
||||
|
||||
```html
|
||||
<!-- 在订单编辑页面添加审批状态显示 -->
|
||||
<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接口示例
|
||||
|
||||
### 创建审批实例
|
||||
|
||||
```php
|
||||
// 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"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 处理审批
|
||||
|
||||
```php
|
||||
// POST /api/ticket/workflow/process_audit
|
||||
{
|
||||
"case_id": 1001,
|
||||
"action": "approve",
|
||||
"remark": "同意添加赠品"
|
||||
}
|
||||
|
||||
// 响应
|
||||
{
|
||||
"rsp": "succ",
|
||||
"msg": "审批处理成功"
|
||||
}
|
||||
```
|
||||
|
||||
### 查询审批状态
|
||||
|
||||
```php
|
||||
// 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. **审批统计**:详细的审批数据统计和分析
|
||||
242
app/ticket/docs/workflow_summary.md
Normal file
242
app/ticket/docs/workflow_summary.md
Normal file
@@ -0,0 +1,242 @@
|
||||
# 订单赠品审批流程实现总结
|
||||
|
||||
## 实现概述
|
||||
|
||||
本次开发完成了订单编辑添加赠品后的审批流程业务逻辑,包括完整的审批流程管理、状态跟踪、记录管理等功能。
|
||||
|
||||
## 核心功能模块
|
||||
|
||||
### 1. 审批流实例控制器 (`ticket_ctl_admin_workflow_case`)
|
||||
|
||||
**主要功能:**
|
||||
- 审批实例列表管理
|
||||
- 审批页面展示
|
||||
- 审批处理逻辑
|
||||
- 审批流程详情查看
|
||||
- 取消和重新提交审批
|
||||
- 导出审批记录
|
||||
|
||||
**关键方法:**
|
||||
- `audit($id)` - 审批页面
|
||||
- `do_audit()` - 处理审批
|
||||
- `create_gift_approval()` - 创建赠品审批实例
|
||||
- `detail($id)` - 审批详情
|
||||
- `cancel_approval()` - 取消审批
|
||||
- `resubmit_approval()` - 重新提交审批
|
||||
|
||||
### 2. 审批流业务逻辑类 (`ticket_workflow_case`)
|
||||
|
||||
**主要功能:**
|
||||
- 数据验证和保存
|
||||
- 审批流程处理
|
||||
- 节点流转管理
|
||||
- 审批记录管理
|
||||
- 订单状态更新
|
||||
|
||||
**关键方法:**
|
||||
- `checkAuditParams()` - 验证审批参数
|
||||
- `processAudit()` - 处理审批流程
|
||||
- `createGiftApprovalCase()` - 创建赠品审批实例
|
||||
- `getNextNode()` - 获取下一个审批节点
|
||||
- `getApprovalRecords()` - 获取审批记录
|
||||
|
||||
### 3. 订单赠品审批服务类 (`ticket_service_order_gift_approval`)
|
||||
|
||||
**主要功能:**
|
||||
- 触发审批流程
|
||||
- 检查审批状态
|
||||
- 批量处理
|
||||
- 统计分析
|
||||
- 自动审批
|
||||
|
||||
**关键方法:**
|
||||
- `triggerGiftApproval()` - 触发赠品审批
|
||||
- `checkOrderApprovalRequired()` - 检查订单是否需要审批
|
||||
- `getOrderApprovalStatus()` - 获取订单审批状态
|
||||
- `getUserPendingApprovals()` - 获取用户待审批列表
|
||||
- `getApprovalStatistics()` - 获取审批统计
|
||||
|
||||
### 4. 订单赠品管理控制器 (`ticket_ctl_admin_order_gift`)
|
||||
|
||||
**主要功能:**
|
||||
- 赠品添加页面
|
||||
- 审批状态查看
|
||||
- 待审批列表
|
||||
- 统计分析
|
||||
- 批量操作
|
||||
|
||||
## 数据库表关系
|
||||
|
||||
### 核心表结构
|
||||
|
||||
1. **`ticket_workflow_template`** - 审批流模板表
|
||||
- 定义审批流程模板
|
||||
- 支持不同场景类型
|
||||
- 版本管理
|
||||
|
||||
2. **`ticket_workflow_node`** - 审批流节点表
|
||||
- 定义审批流程节点
|
||||
- 节点顺序和审批人配置
|
||||
- 支持多种审批人类型
|
||||
|
||||
3. **`ticket_workflow_case`** - 审批流实例表
|
||||
- 具体的审批实例
|
||||
- 关联业务单据
|
||||
- 状态跟踪
|
||||
|
||||
4. **`ticket_workflow_record`** - 审批记录表
|
||||
- 记录每个节点的审批结果
|
||||
- 审批意见和操作时间
|
||||
- 完整的审批轨迹
|
||||
|
||||
### 与订单系统的集成
|
||||
|
||||
- **`ome_orders`** - 订单主表
|
||||
- 通过 `is_not_combine` 字段控制订单是否可审核
|
||||
- 审批通过后恢复订单可审核状态
|
||||
|
||||
- **`ome_order_objects`** - 订单子单表
|
||||
- 存储赠品信息 (`obj_type = 'gift'`)
|
||||
- 关联到具体订单
|
||||
|
||||
- **`ome_order_items`** - 订单行明细表
|
||||
- 存储赠品的详细明细信息
|
||||
|
||||
## 审批流程逻辑
|
||||
|
||||
### 1. 创建审批实例流程
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[订单编辑添加赠品] --> B[检查订单是否存在]
|
||||
B --> C[检查是否已有待审批实例]
|
||||
C --> D[检查审批模板]
|
||||
D --> E[创建审批实例]
|
||||
E --> F[设置订单不可审核状态]
|
||||
F --> G[分配第一个审批人]
|
||||
G --> H[审批流程启动]
|
||||
```
|
||||
|
||||
### 2. 审批处理流程
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[审批人查看审批] --> B[验证审批权限]
|
||||
B --> C[记录审批操作]
|
||||
C --> D{审批动作}
|
||||
D -->|同意| E[检查是否有下一节点]
|
||||
D -->|拒绝| F[结束审批流程]
|
||||
D -->|退回| G[取消审批流程]
|
||||
E -->|有| H[流转到下一节点]
|
||||
E -->|无| I[审批完成]
|
||||
I --> J[更新订单状态]
|
||||
H --> K[分配新审批人]
|
||||
```
|
||||
|
||||
### 3. 状态流转图
|
||||
|
||||
```
|
||||
pending → processing → approved
|
||||
↓ ↓ ↓
|
||||
cancelled ← ← ← ← ← ← ← ←
|
||||
```
|
||||
|
||||
## 关键业务规则
|
||||
|
||||
### 1. 审批权限控制
|
||||
- 只有指定的审批人才能处理审批
|
||||
- 提交人可以取消或重新提交审批
|
||||
- 审批人不能审批自己提交的申请
|
||||
|
||||
### 2. 订单状态管理
|
||||
- 有待审批时,订单设置为不可审核状态
|
||||
- 审批通过后,恢复订单可审核状态
|
||||
- 审批取消后,恢复订单可审核状态
|
||||
|
||||
### 3. 审批流程控制
|
||||
- 支持多级审批流程
|
||||
- 每个节点必须审批完成后才能进入下一节点
|
||||
- 支持审批退回和取消操作
|
||||
|
||||
### 4. 数据完整性
|
||||
- 所有审批操作都有详细记录
|
||||
- 支持审批轨迹追溯
|
||||
- 防止重复审批
|
||||
|
||||
## 扩展功能
|
||||
|
||||
### 1. 多级审批支持
|
||||
- 支持配置多个审批节点
|
||||
- 支持不同审批人类型(用户、角色、部门)
|
||||
- 支持条件审批(根据订单金额等条件)
|
||||
|
||||
### 2. 审批统计功能
|
||||
- 审批通过率统计
|
||||
- 审批时效分析
|
||||
- 审批人工作量统计
|
||||
|
||||
### 3. 审批提醒功能
|
||||
- 待审批提醒
|
||||
- 审批超时提醒
|
||||
- 审批结果通知
|
||||
|
||||
### 4. 批量操作功能
|
||||
- 批量检查审批状态
|
||||
- 批量导出审批记录
|
||||
- 批量清理过期记录
|
||||
|
||||
## 技术特点
|
||||
|
||||
### 1. 模块化设计
|
||||
- 清晰的模块划分
|
||||
- 松耦合的架构设计
|
||||
- 易于扩展和维护
|
||||
|
||||
### 2. 数据安全
|
||||
- 完整的权限控制
|
||||
- 数据验证和校验
|
||||
- 操作日志记录
|
||||
|
||||
### 3. 性能优化
|
||||
- 合理的数据库索引
|
||||
- 分页查询支持
|
||||
- 缓存机制
|
||||
|
||||
### 4. 用户体验
|
||||
- 友好的界面设计
|
||||
- 清晰的状态提示
|
||||
- 便捷的操作流程
|
||||
|
||||
## 部署和使用
|
||||
|
||||
### 1. 数据库配置
|
||||
- 确保相关表已创建
|
||||
- 配置正确的数据库连接
|
||||
- 设置适当的权限
|
||||
|
||||
### 2. 审批模板配置
|
||||
- 创建赠品审批模板
|
||||
- 配置审批节点和审批人
|
||||
- 设置审批流程规则
|
||||
|
||||
### 3. 权限配置
|
||||
- 配置审批相关权限
|
||||
- 设置审批人角色
|
||||
- 配置操作权限
|
||||
|
||||
### 4. 集成测试
|
||||
- 测试审批流程完整性
|
||||
- 验证数据一致性
|
||||
- 检查性能表现
|
||||
|
||||
## 总结
|
||||
|
||||
本次开发实现了完整的订单赠品审批流程系统,包括:
|
||||
|
||||
1. **完整的审批流程管理** - 从创建到完成的完整流程
|
||||
2. **灵活的状态管理** - 支持多种审批状态和操作
|
||||
3. **详细的记录跟踪** - 完整的审批轨迹和操作日志
|
||||
4. **友好的用户界面** - 清晰的操作界面和状态显示
|
||||
5. **强大的扩展能力** - 支持多种扩展功能和定制需求
|
||||
|
||||
该系统为订单管理提供了完善的审批控制机制,确保了业务操作的规范性和可追溯性。
|
||||
Reference in New Issue
Block a user