diff --git a/app/Http/Controllers/Admin/BookController.php b/app/Http/Controllers/Admin/BookController.php index 7999ce8..2adef60 100644 --- a/app/Http/Controllers/Admin/BookController.php +++ b/app/Http/Controllers/Admin/BookController.php @@ -25,6 +25,34 @@ class BookController extends BaseController parent::__construct(new Book()); } + /** + * @OA\Get( + * path="/api/admin/book/other", + * tags={"图书管理"}, + * summary="统计和分类", + * description="", + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Response( + * response="200", + * description="暂无" + * ) + * ) + */ + public function other() + { + $all = \request()->all(); + $chart['total'] = Book::count(); + // 可借阅 + $chart['borrowable'] = Book::where('status', 0)->count(); + // 已借阅 + $chart['borrowed'] = Book::where('status', 1)->count(); + // 维护中 + $chart['maintaining'] = Book::where('status', 2)->count(); + // 分类数据 + $category = Book::pluck('category')->collapse()->unique()->values(); + return $this->success(compact('chart', 'category')); + } + /** * @OA\Get( * path="/api/admin/book/index", @@ -161,6 +189,7 @@ class BookController extends BaseController * @OA\Parameter(name="category", in="query", @OA\Schema(type="string"), required=false, description="分类"), * @OA\Parameter(name="description", in="query", @OA\Schema(type="string"), required=false, description="图书简介"), * @OA\Parameter(name="cover_id", in="query", @OA\Schema(type="integer"), required=false, description="图书封面ID"), + * @OA\Parameter(name="status", in="query", @OA\Schema(type="integer"), required=false, description="状态0可借阅1已借出2维护中"), * @OA\Response( * response="200", * description="操作成功" diff --git a/app/Http/Controllers/Mobile/SupplyDemandController.php b/app/Http/Controllers/Mobile/SupplyDemandController.php index d0fc90a..8e15b1f 100755 --- a/app/Http/Controllers/Mobile/SupplyDemandController.php +++ b/app/Http/Controllers/Mobile/SupplyDemandController.php @@ -10,6 +10,7 @@ use App\Models\AppointmentConfig; use App\Models\AppointmentType; use App\Models\Banner; use App\Models\Config; +use App\Models\Dialogue; use App\Models\Message; use App\Models\SupplyDemand; use App\Models\SupplyDemandKeep; @@ -252,6 +253,10 @@ class SupplyDemandController extends CommonController // 增加view_count $model->increment('contact_count'); $model->save(); + // 创建会话 + $where = []; + $data = []; + Dialogue::updateOrCreate([]); return $this->success('删除成功'); } @@ -262,7 +267,8 @@ class SupplyDemandController extends CommonController * tags={"小程序-供需"}, * summary="消息列表", * description="", - * @OA\Parameter(name="supply_demand_id", in="query", @OA\Schema(type="string"), required=true, description="供需信息id"), + * @OA\Parameter(name="dialogue_id", in="query", @OA\Schema(type="string"), required=true, description="会话id(二选一)"), + * @OA\Parameter(name="supply_demand_id", in="query", @OA\Schema(type="string"), required=true, description="供需信息id(二选一)"), * @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"), * @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"), * @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"), @@ -277,19 +283,6 @@ class SupplyDemandController extends CommonController public function messageList() { $all = \request()->all(); - $messages = [ - 'supply_demand_id.required' => '供需信息id必填' - ]; - $validator = Validator::make($all, [ - 'supply_demand_id' => 'required', - ], $messages); - if ($validator->fails()) { - return $this->fail([ResponseCode::ERROR_PARAMETER, implode(',', $validator->errors()->all())]); - } - $model = SupplyDemand::find($all['id']); - if (empty($model)) { - return $this->fail([ResponseCode::ERROR_BUSINESS, '供需数据不存在']); - } $message = Message::with([ 'user' => function ($query) { $query->select('id', 'nickname', 'name', 'headimgurl'); @@ -298,13 +291,54 @@ class SupplyDemandController extends CommonController $query->select('id', 'nickname', 'name', 'headimgurl'); } ])->where(function ($query) use ($all) { - - })->where('supply_demand_id', $all['supply_demand_id']) - ->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc') + if (isset($all['dialogue_id'])) { + $query->where('dialogue_id', $all['dialogue_id']); + } + if (isset($all['supply_demand_id'])) { + $query->whereHas('dialogue', function ($query) use ($all) { + $query->where('supply_demand_id', $all['supply_demand_id']); + }); + } + })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc') ->paginate($all['page_size'] ?? 20); return $this->success(compact('message')); } + /** + * @OA\Get( + * path="/api/mobile/supply-demand/dialogues", + * tags={"小程序-供需"}, + * summary="会话列表", + * description="", + * @OA\Parameter(name="page_size", in="query", @OA\Schema(type="string"), required=false, description="每页显示的条数"), + * @OA\Parameter(name="page", in="query", @OA\Schema(type="string"), required=false, description="页码"), + * @OA\Parameter(name="sort_name", in="query", @OA\Schema(type="string"), required=false, description="排序字段名字"), + * @OA\Parameter(name="sort_type", in="query", @OA\Schema(type="string"), required=false, description="排序类型"), + * @OA\Parameter(name="token", in="query", @OA\Schema(type="string"), required=true, description="token"), + * @OA\Response( + * response="200", + * description="暂无" + * ) + * ) + */ + public function dialogues() + { + $all = \request()->all(); + $dialogue = Dialogue::with(['supplyDemand', + 'user' => function ($query) { + $query->select('id', 'nickname', 'name', 'headimgurl'); + }, + 'toUser' => function ($query) { + $query->select('id', 'nickname', 'name', 'headimgurl'); + } + ])->where(function ($query) use ($all) { + + })->orderBy($all['sort_name'] ?? 'id', $all['sort_type'] ?? 'desc') + ->paginate($all['page_size'] ?? 20); + return $this->success(compact('dialogue')); + } + + /** * @OA\Get( * path="/api/mobile/supply-demand/keep-index", diff --git a/app/Models/Message.php b/app/Models/Message.php index 46564f8..caf46cd 100755 --- a/app/Models/Message.php +++ b/app/Models/Message.php @@ -19,9 +19,15 @@ class Message extends SoftDeletesModel return $this->hasOne(User::class, 'id', 'to_user_id'); } - public function supplyDemand(){ + public function supplyDemand() + { return $this->hasOne(SupplyDemand::class, 'id', 'supply_demand_id'); } + public function dialogue() + { + return $this->hasOne(Dialogue::class, 'id', 'dialogue_id'); + } + } diff --git a/database/migrations/2025_06_23_170000_create_books_table.php b/database/migrations/2025_06_23_170000_create_books_table.php index 89132c1..41d2cab 100644 --- a/database/migrations/2025_06_23_170000_create_books_table.php +++ b/database/migrations/2025_06_23_170000_create_books_table.php @@ -23,6 +23,7 @@ return new class extends Migration { $table->string('category')->nullable()->comment('分类'); $table->mediumText('description')->nullable()->comment('图书简介'); $table->integer('cover_id')->nullable()->comment('图书封面'); + $table->tinyInteger('status')->default(0)->comment('状态0可借阅1已借出2维护中'); $table->timestamps(); $table->softDeletes(); }); diff --git a/database/migrations/2025_06_25_132911_create_dialogues_table.php b/database/migrations/2025_06_25_132911_create_dialogues_table.php index 55a161c..81e1f74 100644 --- a/database/migrations/2025_06_25_132911_create_dialogues_table.php +++ b/database/migrations/2025_06_25_132911_create_dialogues_table.php @@ -23,6 +23,7 @@ return new class extends Migration { $table->integer('supply_demand_id')->nullable()->comment('需求id'); // 消息内容 $table->text('last_content')->nullable()->comment('最后一条消息消息内容'); + $table->text('last_datetime')->nullable()->comment('最后一条消息消息内容时间'); $table->timestamps(); $table->softDeletes(); }); diff --git a/routes/api.php b/routes/api.php index 87cce0b..5b30be6 100755 --- a/routes/api.php +++ b/routes/api.php @@ -175,6 +175,7 @@ Route::group(["namespace" => "Admin", "prefix" => "admin"], function () { // 图书管理 + Route::get('book/other', [\App\Http\Controllers\Admin\BookController::class, "other"]); Route::get('book/index', [\App\Http\Controllers\Admin\BookController::class, "index"]); Route::get('book/show', [\App\Http\Controllers\Admin\BookController::class, "show"]); Route::post('book/save', [\App\Http\Controllers\Admin\BookController::class, "save"]); @@ -254,7 +255,7 @@ Route::group(["namespace" => "Mobile", "prefix" => "mobile"], function () { // 供需信息留言 Route::get('supply-demand/send-message', [\App\Http\Controllers\Mobile\SupplyDemandController::class, "sendMessage"]); Route::get('supply-demand/message-list', [\App\Http\Controllers\Mobile\SupplyDemandController::class, "messageList"]); - Route::get('supply-demand/message-list', [\App\Http\Controllers\Mobile\SupplyDemandController::class, "messageList"]); + Route::get('supply-demand/dialogues', [\App\Http\Controllers\Mobile\SupplyDemandController::class, "dialogues"]); // 供需信息收藏