@@ -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);
+ }
@@ -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)
+ '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(),
+ ];
+}
@@ -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');
@@ -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',
class Project extends Model
"name","code","const","available_days","status","begin","end","latitude","longitude","type","acl","whitelist","description"
@@ -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");