Browse Source

获取资产父级下的计划,需求

kely 1 year ago
parent
commit
0127e3bd2e

+ 4 - 0
app/Http/Controllers/API/PlanController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\API;
 use App\Http\Controllers\Controller;
 use App\Http\Requests\API\Plan\CreateOrUpdateRequest;
 use App\Http\Resources\API\PlanResource;
+use App\Models\Asset;
 use App\Models\Plan;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
@@ -19,8 +20,11 @@ class PlanController extends Controller
         $plans = Plan::filter($request->all())->where("parent_id", 0)->with(['children'])->simplePaginate();
 
         return PlanResource::collection($plans);
+
     }
 
+
+
     /**
      * Store a newly created resource in storage.
      */

+ 4 - 2
app/Http/Controllers/API/RequirementController.php

@@ -22,9 +22,11 @@ class RequirementController extends Controller
     /**
      * Display a listing of the resource.
      */
-    public function index()
+    public function index(Request $request)
     {
-        //
+        $requirements=Requirement::filter($request->all())->with(['createdBy', 'plan','group']) ->simplePaginate();
+
+        return AssetRequirementResource::collection($requirements);
     }
 
     public function byAsset(Request $request,string $assetId)

+ 29 - 1
app/ModelFilters/PlanFilter.php

@@ -2,6 +2,7 @@
 
 namespace App\ModelFilters;
 
+use App\Models\Asset;
 use Carbon\Carbon;
 use EloquentFilter\ModelFilter;
 
@@ -21,7 +22,34 @@ class PlanFilter extends ModelFilter
 
     public function assetId($assetId)
     {
-        return $this->where('asset_id', $assetId);
+        $asset = Asset::find($assetId);
+        if (!$asset || !$asset->children()->first()) {
+            // 如果没有子级,只返回该分组的需求
+            return $this->where('asset_id', $assetId);
+        }
+        $allRelatedIds = $this->getAllRelatedIds($assetId);
+        array_push($allRelatedIds, $asset->id);
+        //把父级id去重
+        $unIds=array_unique($allRelatedIds);
+        return $this->whereIn('asset_id',$unIds);
+    }
+
+    private function getAllRelatedIds($assetId)
+    {
+        $asset = Asset::find($assetId);
+        //$group = RequirementGroup::find($groupId);
+        if (!$asset) {
+            return [];
+        }
+
+        // 获取所有子级ID
+        $childIds = $asset->children()->pluck('id')->toArray();
+        // 递归获取所有子级的子级ID
+        foreach ($childIds as $childId) {
+            $childIds = array_merge($childIds, $this->getAllRelatedIds($childId));
+        }
+
+        return $childIds;
     }
 
     public function expired($expired): PlanFilter

+ 33 - 7
app/ModelFilters/RequirementFilter.php

@@ -2,6 +2,7 @@
 
 namespace App\ModelFilters;
 
+use App\Models\Asset;
 use App\Models\Requirement;
 use App\Models\RequirementGroup;
 use EloquentFilter\ModelFilter;
@@ -26,7 +27,34 @@ class RequirementFilter extends ModelFilter
     }
 
     public function assetId($assetId){
-        return $this->where('asset_id',$assetId);
+        $asset = Asset::find($assetId);
+        if (!$asset || !$asset->children()->first()) {
+            // 如果没有子级,只返回该分组的需求
+            return $this->where('asset_id', $assetId);
+        }
+        $allRelatedIds = $this->getAllRelatedIds($assetId);
+        array_push($allRelatedIds, $asset->id);
+        //把父级id去重
+        $unIds=array_unique($allRelatedIds);
+        return $this->whereIn('asset_id',$unIds);
+    }
+    //递归获取资产
+    private function getAllRelatedIds($assetId)
+    {
+        $asset = Asset::find($assetId);
+
+        if (!$asset) {
+            return [];
+        }
+
+        // 获取所有子级ID
+        $childIds = $asset->children()->pluck('id')->toArray();
+        // 递归获取所有子级的子级ID
+        foreach ($childIds as $childId) {
+            $childIds = array_merge($childIds, $this->getAllRelatedIds($childId));
+        }
+
+        return $childIds;
     }
 
     public function groupId($groupId){
@@ -36,17 +64,15 @@ class RequirementFilter extends ModelFilter
             // 如果没有子级,只返回该分组的需求
             return $this->where('requirement_group_id', $groupId);
         }
-
-        $allRelatedGroupIds = $this->getAllRelatedGroupIds($groupId);
+        $allRelatedGroupIds = $this->getAllGroupRelatedIds($groupId);
         //把父级id去重
         $unIds=array_unique($allRelatedGroupIds);
         return $this->whereIn('requirement_group_id',$unIds);
     }
-
-    private function getAllRelatedGroupIds($groupId)
+    //递归获取需求分组
+    private function getAllGroupRelatedIds($groupId)
     {
         $group = RequirementGroup::find($groupId);
-
         if (!$group) {
             return [];
         }
@@ -56,7 +82,7 @@ class RequirementFilter extends ModelFilter
 
         // 递归获取所有子级的子级ID
         foreach ($childIds as $childId) {
-            $childIds = array_merge($childIds, $this->getAllRelatedGroupIds($childId));
+            $childIds = array_merge($childIds, $this->getAllGroupRelatedIds($childId));
         }
 
         // 添加父级ID(如果需要的话)