cqp 1 dienu atpakaļ
vecāks
revīzija
7b386e3dac
1 mainītis faili ar 80 papildinājumiem un 11 dzēšanām
  1. 80 11
      app/Service/ItemService.php

+ 80 - 11
app/Service/ItemService.php

@@ -3057,7 +3057,7 @@ class ItemService extends Service
         $itemNode = $this->getItemNodeMap2(array_unique(array_column($list['data'],'item_node_id')));
         $mission_id = array_unique(array_column($list['data'],'item_node_mission_id'));
         $itemNodeMission = $this->getItemNodeMissionMap($mission_id);
-        $mission_man = $this->getMissionMembersMap($mission_id, $user['id']);
+        $mission_man = $this->getMissionMembersMap($mission_id, $user);
         foreach ($list['data'] as $key => $value){
             $list['data'][$key]['order_time'] = $value['order_time'] ? date('Y-m-d',$value['order_time']) : '';
             $list['data'][$key]['start_time'] = $value['start_time_hour'] . ':' . $value['start_time_min'];
@@ -3438,7 +3438,7 @@ class ItemService extends Service
         $tag = (new TagService())->getTagMap(array_unique(array_merge_recursive(array_column($data['data'],'priority_id'),array_column($data['data'],'mission_id'))));
         $mission_id = array_column($data['data'],'id');
         $item_node_map = $this->getItemNodeMap($mission_id);
-        if(isset($ergs['get_item_node_mission_man'])) $mission_man = $this->getMissionMembersMap($mission_id, $user['id']);
+        if(isset($ergs['get_item_node_mission_man'])) $mission_man = $this->getMissionMembersMap($mission_id, $user);
         foreach ($data['data'] as $key => $value){
             $data['data'][$key]['crt_time'] = $value['crt_time'] ? date('Y-m-d H:i:s',$value['crt_time']) : '';
             $data['data'][$key]['start_time'] = $value['start_time'] ? date('Y-m-d',$value['start_time']) : '';
@@ -3462,20 +3462,14 @@ class ItemService extends Service
         return $data;
     }
 
-    /**
-     * 根据任务 ID 数组获取当前登录人可见的任务成员 Map 结构(传统数组对象结构)
-     * * @param array $missionIds 任务 ID 数组 [1, 2, 3...]
-     * @param int $userId 当前登录人 ID
-     * @return array [mission_id => [ ["id" => 1, "title" => "张三"], ... ]]
-     */
-    public function getMissionMembersMap(array $missionIds, int $userId)
+    public function getMissionMembersMap1(array $missionIds, int $userId)
     {
         if (empty($missionIds)) {
             return [];
         }
 
         // 1. 批量查出当前用户在这些任务里哪些是【负责人】身份
-        $chargeMissionIds = \DB::table('item_node_mission_employee')
+        $chargeMissionIds = DB::table('item_node_mission_employee')
             ->whereIn('item_node_mission_id', $missionIds)
             ->where('data_id', $userId)
             ->where('del_time', 0)
@@ -3483,7 +3477,7 @@ class ItemService extends Service
             ->toArray();
 
         // 2. 准备查询成员表的 Query,并连表关联 employee
-        $query = \DB::table('item_node_mission_details as d')
+        $query = DB::table('item_node_mission_details as d')
             ->join('employee as e', 'd.data_id', '=', 'e.id')
             ->whereIn('d.item_node_mission_id', $missionIds)
             ->where('d.type', 1)
@@ -3527,6 +3521,81 @@ class ItemService extends Service
         return $resultMap;
     }
 
+    /**
+     * 根据任务 ID 数组获取当前登录人可见的任务成员 Map 结构(包含超管特权)
+     * @param array $missionIds 任务 ID 数组
+     * @param array $user 当前登录人完整用户信息数组(包含 id 和 is_admin)
+     * @return array
+     */
+    public function getMissionMembersMap(array $missionIds, array $user)
+    {
+        if (empty($missionIds)) {
+            return [];
+        }
+
+        $userId = $user['id'] ?? 0;
+
+        // 1. 批量查出当前用户在这些任务里哪些是【负责人】身份
+        $chargeMissionIds = \DB::table('item_node_mission_employee')
+            ->whereIn('item_node_mission_id', $missionIds)
+            ->where('data_id', $userId)
+            ->where('del_time', 0)
+            ->pluck('item_node_mission_id')
+            ->toArray();
+
+        // 2. 准备查询成员表的 Query,并连表关联 employee
+        $query = \DB::table('item_node_mission_details as d')
+            ->join('employee as e', 'd.data_id', '=', 'e.id')
+            ->whereIn('d.item_node_mission_id', $missionIds)
+            ->where('d.type', 1)
+            ->where('d.del_time', 0)
+            ->where('e.del_time', 0)
+            ->select('d.item_node_mission_id', 'd.data_id as id', 'e.title');
+
+        // ==============================================================
+        // 【核心新增:超级管理员特权判定】
+        // ==============================================================
+        $isAdmin = ($user['is_admin'] ?? 0) == Employee::IS_ADMIN_TWO;
+
+        if (!$isAdmin) {
+            // 如果【不是】超级管理员,才执行原本严格的“负责人/普通成员”分流限制
+            $notChargeMissionIds = array_diff($missionIds, $chargeMissionIds);
+
+            if (!empty($notChargeMissionIds)) {
+                $query->where(function ($q) use ($chargeMissionIds, $userId) {
+                    if (!empty($chargeMissionIds)) {
+                        $q->whereIn('d.item_node_mission_id', $chargeMissionIds)
+                            ->orWhere(function ($subQ) use ($userId) {
+                                $subQ->where('d.data_id', $userId);
+                            });
+                    } else {
+                        $q->where('d.data_id', $userId);
+                    }
+                });
+            }
+        }
+        // 如果是超级管理员,直接不进上面的 if,SQL 保持原样,天然查出 $missionIds 下的所有成员!
+
+        // 4. 查出过滤后的所有成员数据
+        $details = $query->get();
+
+        // 5. 初始化 Map 壳子
+        $resultMap = [];
+        foreach ($missionIds as $id) {
+            $resultMap[$id] = [];
+        }
+
+        // 6. 组装成你需要的规范二维结构
+        foreach ($details as $detail) {
+            $resultMap[$detail->item_node_mission_id][] = [
+                'id'    => $detail->id,
+                'title' => $detail->title
+            ];
+        }
+
+        return $resultMap;
+    }
+
     public function getItemNodeMap($item_node_mission_id){
         if(! is_array($item_node_mission_id)) $item_node_mission_id = [$item_node_mission_id];
         return ItemNodeMission::from('item_node_mission as a')