|
|
@@ -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')
|