فهرست منبع

资产总览,返回资产总数,资产下计划总数,资产下项目总数

kely 1 سال پیش
والد
کامیت
a97f985a6a

+ 7 - 17
app/Http/Controllers/API/AssetController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\API;
 
 use App\Http\Controllers\Controller;
 use App\Http\Requests\API\Asset\CreateOrUpdateRequest;
+use App\Http\Resources\API\AssetReportResource;
 use App\Http\Resources\API\AssetResource;
 use App\Models\Asset;
 use Illuminate\Http\Request;
@@ -21,23 +22,6 @@ class AssetController extends Controller
         return AssetResource::collection($assets);
     }
 
-    public function getAllAssetsWithChildren($assets, $level = 0)
-    {
-        $results = [];
-
-        foreach ($assets as $asset) {
-            $asset->level = $level; // 添加层级信息
-            $results[] = $asset;
-
-            // 如果有子级,递归调用此方法
-            if ($asset->children->count() > 0) {
-                $children = $this->getAllAssetsWithChildren($asset->children, $level + 1);
-                $results = array_merge($results, $children);
-            }
-        }
-
-        return $results;
-    }
     /**
      * Store a newly created resource in storage.
      */
@@ -89,4 +73,10 @@ class AssetController extends Controller
 
         return $this->noContent();
     }
+
+    public function report(string $id){
+        $asset = Asset::allowed()->with(['requirements','plans','projects'])->findOrFail($id);
+
+        return new AssetReportResource($asset);
+    }
 }

+ 39 - 0
app/Http/Resources/API/AssetReportResource.php

@@ -0,0 +1,39 @@
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: kelyliang
+ * Date: 2024/3/4
+ * Time: 下午 03:09
+ */
+
+namespace App\Http\Resources\API;
+
+use App\Models\Asset;
+use App\Models\AssetGroup;
+use Carbon\Carbon;
+use Illuminate\Http\Request;
+use Illuminate\Http\Resources\Json\JsonResource;
+use Illuminate\Support\Facades\Auth;
+
+class AssetReportResource  extends JsonResource
+{
+    public function toArray(Request $request): array
+    {
+        $now = Carbon::now();
+        return[
+            'requirement_total' => $this->requirements()->count(),
+            'plan_total' => $this->plans()->count(),
+            'prject_total' => $this->projects()->count(),
+            'plan_unexpired_total' => $planTotalCount = $this->plans()->where('begin', '<=', $now)
+                ->where('end', '>=', $now)
+                ->get()
+                ->count(),
+            'project_unexpired_total' => $planTotalCount = $this->projects()->where('begin', '<=', $now)
+                ->where('end', '>=', $now)
+                ->get()
+                ->count(),
+            'asset_total'=>Asset::query()->where('company_id',Auth::user()->company_id)->where('parent_id',0)->count(),
+            'asset_closed_total'=>Asset::query()->where('company_id',Auth::user()->company_id)->where('parent_id',0)->where('status','closed')->count(),
+        ];
+    }
+}

+ 13 - 0
app/Models/Asset.php

@@ -40,4 +40,17 @@ class Asset extends Model
     public function children(){
         return $this->hasMany(Asset::class ,'parent_id');
     }
+
+    public function requirements(){
+        return $this->hasMany(Requirement::class ,'asset_id');
+    }
+
+    public function plans(){
+        return $this->hasMany(Plan::class ,'asset_id');
+    }
+
+    public function projects(){
+        return $this->belongsToMany(Project::class,'project_asset');
+    }
+
 }

+ 2 - 1
app/Models/Plan.php

@@ -6,10 +6,11 @@ use App\Models\Scopes\CompanyScope;
 use EloquentFilter\Filterable;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
 
 class Plan extends Model
 {
-    use HasFactory, Filterable;
+    use HasFactory, Filterable,SoftDeletes;
 
     protected $fillable = [
         'title',

+ 2 - 1
app/Models/Project.php

@@ -6,10 +6,11 @@ use App\Models\Scopes\CompanyScope;
 use EloquentFilter\Filterable;
 use Illuminate\Database\Eloquent\Factories\HasFactory;
 use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\SoftDeletes;
 
 class Project extends Model
 {
-    use HasFactory, Filterable;
+    use HasFactory, Filterable,SoftDeletes;
 
     protected $fillable = [
         "name","code","const","available_days","status","begin","end","latitude","longitude","type","acl","whitelist","description"

+ 1 - 0
routes/api.php

@@ -37,6 +37,7 @@ Route::middleware(['auth:sanctum'])->group(function () {
             'library' => API\LibraryController::class,
             'department' => API\DepartmentController::class,
         ]);
+        Route::get("asset/{asset_id}/report",[API\AssetController::class, 'report'])->name('asset.report');
 
         Route::patch("requirement/{requirement_id}/close",[API\RequirementController::class, 'close'])->name('requirement.close');
         Route::get("requirement/{asset_id}/asset", [API\RequirementController::class, "byAsset"])->name("requirement.byAsset");