|
|
@@ -254,40 +254,70 @@ class WorkFlowService extends Service
|
|
|
$topDepartId = $user['top_depart_id'];
|
|
|
|
|
|
// 1. 构造查询对象
|
|
|
- $model = WorkFlowInstancesNodes::where('del_time',0)
|
|
|
+ $model = WorkFlowInstancesNodes::where('del_time', 0)
|
|
|
->where('top_depart_id', $topDepartId)
|
|
|
- ->where('status', 1) // 1 = 审批中
|
|
|
- ->whereRaw('JSON_CONTAINS(assignees, JSON_OBJECT("id", ?))', [(int)$userId])
|
|
|
- // 如果我是“或签”,只要我还没审,节点状态就是1,我能看到;
|
|
|
- // 如果我是“会签”,我审过了但别人没审,节点状态还是1,但通过这个排除条件,我看不到了。
|
|
|
+ ->where('status', 1)
|
|
|
+ ->whereRaw('JSON_CONTAINS(assignees, JSON_OBJECT("id", ?))', [$userId])
|
|
|
->whereRaw('NOT JSON_CONTAINS(assignees, JSON_OBJECT("id", ?, "is_pass", 1))', [$userId])
|
|
|
+ ->select('*')
|
|
|
->orderBy('id', 'desc');
|
|
|
+
|
|
|
$pageData = $this->limit($model, '', $data);
|
|
|
|
|
|
if (empty($pageData['data'])) return [true, $pageData];
|
|
|
|
|
|
- // 3. 提取当前页的所有 instance_id
|
|
|
+ // 2. 提取当前页的所有流程实例 ID
|
|
|
$instanceIds = array_unique(array_column($pageData['data'], 'instance_id'));
|
|
|
|
|
|
- // 4. 获取关联信息
|
|
|
+ // 3. 获取流程实例及其关联的模板
|
|
|
$instances = WorkFlowInstances::with(['template'])
|
|
|
->whereIn('id', $instanceIds)
|
|
|
->get()
|
|
|
->keyBy('id');
|
|
|
|
|
|
- // 5. 组装返回数据 (遍历当前页的数据进行填充)
|
|
|
+ // --- 处理动态业务单据数据 ---
|
|
|
+ // 4. 按业务类型分组,批量查出单据的 code 和 title
|
|
|
+ $documentGroups = [];
|
|
|
+ foreach ($instances as $ins) {
|
|
|
+ $documentGroups[$ins->document_type][] = $ins->document_id;
|
|
|
+ }
|
|
|
+
|
|
|
+ $documentDataMap = []; // 存储结构: [type][id] => ['code' => ..., 'title' => ...]
|
|
|
+ foreach ($documentGroups as $type => $ids) {
|
|
|
+ // 这里根据你的 document_type (如 'item') 动态查询
|
|
|
+ // 假设你的业务表都有 code 和 title 字段
|
|
|
+ $docs = DB::table($type)
|
|
|
+ ->whereIn('id', array_unique($ids))
|
|
|
+ ->select('id', 'code', 'title')
|
|
|
+ ->get()
|
|
|
+ ->keyBy('id')
|
|
|
+ ->toArray();
|
|
|
+ $documentDataMap[$type] = $docs;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 组装最终返回数据
|
|
|
foreach ($pageData['data'] as $key => $node) {
|
|
|
$instance = $instances[$node['instance_id']] ?? null;
|
|
|
|
|
|
+ // 获取关联业务表的具体数据
|
|
|
+ $docDetail = null;
|
|
|
+ if ($instance) {
|
|
|
+ $docDetail = $documentDataMap[$instance->document_type][$instance->document_id] ?? null;
|
|
|
+ }
|
|
|
+
|
|
|
$pageData['data'][$key] = [
|
|
|
'node_instance_id' => $node['id'],
|
|
|
'instance_id' => $node['instance_id'],
|
|
|
'node_label' => $node['label'],
|
|
|
- 'document_id' => $instance->document_id ?? 0, //业务单据id
|
|
|
- 'document_type' => $instance->document_type ?? '', //业务单据类型
|
|
|
- 'flow_title' => $instance->template->title ?? '未知流程',
|
|
|
- 'apply_time_fmt' => isset($instance->crt_time->timestamp) ? date('Y-m-d H:i:s', $instance->crt_time->timestamp) : '',
|
|
|
+ 'document_id' => $instance->document_id ?? 0,
|
|
|
+ 'document_type' => $instance->document_type ?? '',
|
|
|
+ // --- 新增字段 ---
|
|
|
+ 'document_code' => $docDetail->code ?? '', // 业务单据编号
|
|
|
+ 'document_title' => $docDetail->title ?? '', // 业务单据标题
|
|
|
+ 'workflow_title' => $instance->template->title ?? '', // 审批模板名
|
|
|
+ 'crt_time' => !empty($instance->crt_time->timestamp) ? date('Y-m-d H:i:s', $instance->crt_time->timestamp) : '',
|
|
|
'approval_type' => $node['approval_type'],
|
|
|
+ 'approval_type_title' => WorkFlowInstancesNodes::approval_type[$node['approval_type']] ?? '',
|
|
|
];
|
|
|
}
|
|
|
|