|
@@ -8,6 +8,7 @@ use App\Http\Requests\API\Folder\UpdateRequest;
|
|
|
use App\Http\Resources\API\FileByObjectResource;
|
|
|
use App\Http\Resources\API\FileVersioTreeByObjectResource;
|
|
|
use App\Http\Resources\API\FolderDetailResource;
|
|
|
+use App\Http\Resources\API\UserProfileResource;
|
|
|
use App\Models\Enums\FolderObjectType;
|
|
|
use App\Models\Enums\ObjectApprovalStatus;
|
|
|
use App\Models\File;
|
|
@@ -21,6 +22,7 @@ use Illuminate\Database\Eloquent\Collection;
|
|
|
use Illuminate\Http\Request;
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
+use function Symfony\Component\String\s;
|
|
|
|
|
|
class FolderController extends Controller
|
|
|
{
|
|
@@ -128,6 +130,7 @@ class FolderController extends Controller
|
|
|
|
|
|
if ($isUpdate) {
|
|
|
$folder = $updateFolders[$item['id']];
|
|
|
+ $data['updated_by'] = Auth::user()->id;
|
|
|
$folder->fill($data);
|
|
|
$folder->save();
|
|
|
} else {
|
|
@@ -135,7 +138,8 @@ class FolderController extends Controller
|
|
|
'company_id' => Auth::user()->company_id,
|
|
|
...$objectWhere,
|
|
|
'parent_id' => $request->parent_id,
|
|
|
- ...$data
|
|
|
+ ...$data,
|
|
|
+ 'created_by' => Auth::user()->id,
|
|
|
]);
|
|
|
|
|
|
$folder->path = $parentFolder ? $parentFolder?->path . $folder->id . "," : sprintf(",%s,", $folder->id);
|
|
@@ -247,8 +251,19 @@ class FolderController extends Controller
|
|
|
$pageSize = $request->get('page_size') ?? 10;
|
|
|
$page = $request->get('page') ?? 1;
|
|
|
|
|
|
+ $docStages = $request->get('doc_stage', []); // 支持多选
|
|
|
+ $docTypes = $request->get('doc_type', []); // 支持多选
|
|
|
+ $type = $request->get('type', []); // 支持多选
|
|
|
+ $namingRuleId = $request->get('naming_rule_id');
|
|
|
+ $statusCode = $request->get('RevisionCodes');
|
|
|
+ $revisionCodes = $request->get('RevisionCodes');
|
|
|
+ $name = $request->get('name');
|
|
|
+ $approvalStatus = $request->get('approval_status', []); // 支持多选
|
|
|
+
|
|
|
$folderId = $request->get("id", 0);
|
|
|
- $orderBy=$request->get('order_by','desc');
|
|
|
+ $orderByFiled = $request->get('order_by_column','updated_at');// 设置默认字段
|
|
|
+ $orderByType = $request->get('order_by_direction','desc'); // 设置默认排序方式
|
|
|
+
|
|
|
if ($folderId > 0) {
|
|
|
$folder = Folder::query()->findOrFail($folderId);
|
|
|
$objectType = $folder->object_type;
|
|
@@ -267,61 +282,46 @@ class FolderController extends Controller
|
|
|
$folders = Folder::with(["namingRule" => function ($query) {
|
|
|
$query->select(['id', 'name', 'combination_rules']);
|
|
|
}])
|
|
|
- ->select(['id', 'name', 'naming_rule_id'])
|
|
|
->where($objectWhere)
|
|
|
+ ->when($name, fn($query) => $query->where("name", "like", "%$name%"))
|
|
|
->when($folderId, fn($query) => $query->where("parent_id", $folderId))
|
|
|
->when(! $folderId, fn($query) => $query->where("parent_id", 0))
|
|
|
- ->orderBy('updated_at', $orderBy)
|
|
|
+ ->when($namingRuleId, fn($query) => $query->where("naming_rule_id", $namingRuleId))
|
|
|
+ ->when($type, fn($query) => $query->whereRaw("1=?", in_array('folder', $type) ? 1 : 0))
|
|
|
+ ->orderBy(in_array($orderByFiled, Folder::getColumns()) ? $orderByFiled : 'updated_at', $orderByType)
|
|
|
->paginate($pageSize);
|
|
|
$folders_total = $folders->total();
|
|
|
- $sonFolderCount=Folder::query()
|
|
|
- ->where($objectWhere)
|
|
|
- ->whereIn('parent_id',$folders->pluck('id'))
|
|
|
- ->selectRaw("count(*) as cut, parent_id")
|
|
|
- ->groupBy("parent_id")
|
|
|
- ->pluck("cut", "parent_id");
|
|
|
-
|
|
|
- $sonFileCount=File::query()
|
|
|
- ->where($objectWhere)
|
|
|
- ->whereIn('folder_id',$folders->pluck('id'))
|
|
|
- ->where("is_latest_version", 1)
|
|
|
- ->selectRaw("count(*) as cut, folder_id")
|
|
|
- ->groupBy("folder_id")
|
|
|
- ->pluck("cut", "folder_id");
|
|
|
-
|
|
|
|
|
|
$index=1;
|
|
|
- $folders = $folders->map(function (Folder $folder) use ($sonFolderCount,$sonFileCount,&$index) {
|
|
|
- $folder->itemCount =$sonFolderCount->get($folder->id, 0)+$sonFileCount->get($folder->id, 0);
|
|
|
- $folder->type = 'folder';
|
|
|
- $folder->uniId = $folder->type . '_' . $folder->id;
|
|
|
+ $folders = $folders->map(function (Folder $folder) use (&$index) {
|
|
|
$folder->display_id=(string)$index++;
|
|
|
return $folder;
|
|
|
});
|
|
|
|
|
|
- $files = File::query()->where($objectWhere)
|
|
|
+ $fileQuery = File::query()->where($objectWhere)
|
|
|
->with('bimFile')
|
|
|
->where("folder_id", $folderId)
|
|
|
->where("is_latest_version", 1)
|
|
|
- ->orderBy('updated_at', $orderBy)
|
|
|
- ->get();
|
|
|
+ ->when($name, fn($query) => $query->where("title", "like", "%$name%"))
|
|
|
+ ->when($docStages, fn($query) => $query->whereIn('doc_stage', $docStages))
|
|
|
+ ->when($docTypes, fn($query) => $query->whereIn('doc_type', $docTypes))
|
|
|
+ ->when($namingRuleId, fn($query) => $query->where('naming_rule_id', $namingRuleId))
|
|
|
+ ->when($type, fn($query) => $query->whereIn("extension", $type))
|
|
|
+ ->when($statusCode, fn($query) => $query->whereRaw('naming_rules->>"$.StatusCode"=?', $statusCode))
|
|
|
+ ->when($revisionCodes, fn($query) => $query->whereRaw('naming_rules->>"$.RevisionCodes"=?', $revisionCodes))
|
|
|
+ ->when($approvalStatus, fn($query) => $query->whereIn('approval_status', $approvalStatus))
|
|
|
+ ->orderBy(in_array($orderByFiled, File::getColumns()) ? $orderByFiled : 'updated_at', $orderByType);
|
|
|
+
|
|
|
+ $files = $fileQuery->get();
|
|
|
|
|
|
$files_total = $files->count();
|
|
|
|
|
|
- $total = $files_total + $folders_total;
|
|
|
//分页
|
|
|
if ($folders_total < $pageSize * $page){
|
|
|
$offset = $pageSize * $page - $folders_total <= $pageSize ? 0 : $pageSize * $page - $pageSize * ($page - 1) - $folders_total ; // 查看当前页面是否有包含文件夹
|
|
|
- $limit = $pageSize * $page - $folders_total > $pageSize ? $pageSize : $pageSize * $page - $folders_total;
|
|
|
-
|
|
|
- $files = File::query()->where($objectWhere)
|
|
|
- ->with('bimFile')
|
|
|
- ->where("folder_id", $folderId)
|
|
|
- ->where("is_latest_version", 1)
|
|
|
- ->orderBy('updated_at', $orderBy)
|
|
|
- ->offset($offset)
|
|
|
- ->limit($limit)
|
|
|
- ->get();
|
|
|
+ $limit = min($pageSize * $page - $folders_total, $pageSize);
|
|
|
+
|
|
|
+ $files = $fileQuery->offset($offset)->limit($limit)->get();
|
|
|
//因为要接着文件夹进行文件id递增
|
|
|
$folderCount=$folders->count()+1;
|
|
|
$files->map(function (File $file) use (&$folderCount) {
|
|
@@ -358,7 +358,7 @@ class FolderController extends Controller
|
|
|
return $this->success([
|
|
|
'object'=>$container,
|
|
|
'data' => [
|
|
|
- 'folders' => $folders,
|
|
|
+ 'folders' => FolderDetailResource::collection($folders),
|
|
|
'total' => $folders_total + $files_total,
|
|
|
'files' => FileByObjectResource::collection($files),
|
|
|
'folder_parent_id'=>$folderId>0?$folder->parent_id:$folderId,
|
|
@@ -430,7 +430,7 @@ class FolderController extends Controller
|
|
|
->where($objectWhere)
|
|
|
->where('title','like',"%$name%")
|
|
|
->where("is_latest_version", 1);
|
|
|
-
|
|
|
+
|
|
|
// 添加doc_stage多选过滤
|
|
|
if (!empty($docStages)) {
|
|
|
$fileQuery->whereIn('doc_stage', $docStages);
|