Sfoglia il codice sorgente

[AI旅游] 景点点赞点踩功能

tangyuanwang 1 mese fa
parent
commit
ae2e458060

+ 180 - 3
app/Http/Controllers/Api/Museum/Spot.php

@@ -2,16 +2,25 @@
 
 namespace App\Http\Controllers\Api\Museum;
 
-use App\Http\Controllers\Controller;
-use Illuminate\Http\Request;
+use App\Http\Controllers\Api\Api;
 use Illuminate\Support\Facades\DB;
 use App\Servers\Wenlv\MuseumServer;
 use App\Models\Api\Museum\Spot as SpotModel;
 use App\Models\Api\Museum\SpotTmp as SpotTmpModel;
 use App\Models\Manager\Citys as CitysModel;
 use App\Servers\Tenxunyun\TextTranslate;
+use App\Models\Api\Museum\SpotLikes as SpotLikesModel;
+use App\Models\Api\Museum\SpotHates as SpotHatesModel;
+use  App\Http\Requests\Api\Museum\Spot as Request;
+use League\CommonMark\Extension\Embed\EmbedParser;
 
-class Spot extends Controller
+/**
+ * 博物馆数据接口
+ * @author    唐远望
+ * @version   1.0
+ * @date      2026-04-02
+ */
+class Spot extends Api
 {
     /**
      * 采集博物馆列表数据
@@ -188,4 +197,172 @@ class Spot extends Controller
             return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $result]);
         }
     }
+
+
+    /**
+     * 博物馆点赞
+     * @author    唐远望
+     * @version   1.0
+     * @date      2026-04-09
+     */
+    public function set_like(Request $request, SpotModel $SpotModel, SpotLikesModel $SpotLikesModel)
+    {
+        // 验证参数
+        $request->scene('set_like')->validate();
+        $user_info    = $this->checkLogin();
+        $uid = $user_info['uid'];
+        // 接收数据
+        $id = request('id', 0);
+        $museum_spot = $SpotModel->where('id', $id)->first();
+        if (!$museum_spot) {
+            return     json_send(['code' => 'error', 'msg' => '记录不存在']);
+        }
+        //查询点赞记录
+        $like_log = $SpotLikesModel->where('museum_spot_id', $id)->where('userid', $uid)->first();
+        if (!empty($like_log)) {
+            return     json_send(['code' => 'success', 'msg' => '操作成功']);
+        }
+        DB::beginTransaction();
+        try {
+            //添加点赞记录
+            $insert_data = [
+                'museum_spot_id' => $id,
+                'userid' => $uid,
+                'insert_time' => time(),
+            ];
+            $like_id = $SpotLikesModel->insertGetId($insert_data);
+            //更新博物馆点赞数量
+            $SpotModel->where('id', $id)->increment('like_count');
+            DB::commit();
+            return     json_send(['code' => 'success', 'msg' => '操作成功']);
+            // 成功处理...
+        } catch (\Exception $e) {
+            DB::rollBack();
+            // 错误处理...
+            return json_send(['code' => 'error', 'msg' => '操作失败', 'data' => $e->getMessage()]);
+        }
+    }
+    /**
+     * 博物馆取消点赞
+     * @author    唐远望
+     * @version   1.0
+     * @date      2026-04-09
+     */
+    public function cancel_like(Request $request, SpotModel $SpotModel, SpotLikesModel $SpotLikesModel)
+    {
+        // 验证参数
+        $request->scene('cancel_like')->validate();
+        $user_info    = $this->checkLogin();
+        $uid = $user_info['uid'];
+        // 接收数据
+        $id = request('id', 0);
+        // 执行修改
+        $museum_spot = $SpotModel->where('id', $id)->first();
+        if (!$museum_spot) {
+            return     json_send(['code' => 'error', 'msg' => '记录不存在']);
+        }
+        //查询点赞记录
+        $like_log = $SpotLikesModel->where('museum_spot_id', $id)->where('userid', $uid)->first();
+        if (empty($like_log)) {
+            return     json_send(['code' => 'success', 'msg' => '操作成功']);
+        }
+        DB::beginTransaction();
+        try {
+            //删除点赞记录
+            $SpotLikesModel->where('museum_spot_id', $museum_spot->id)->where('userid', $uid)->delete();
+            //更新博物馆点赞数量
+            $SpotModel->where('id', $id)->decrement('like_count');
+            DB::commit();
+            return     json_send(['code' => 'success', 'msg' => '操作成功2']);
+            // 成功处理...
+        } catch (\Exception $e) {
+            DB::rollBack();
+            // 错误处理...
+            return json_send(['code' => 'error', 'msg' => '操作失败']);
+        }
+    }
+
+    /**
+     * 博物馆踩
+     * @author    唐远望
+     * @version   1.0
+     * @date      2026-04-09
+     */
+    public function set_hate(Request $request, SpotModel $SpotModel, SpotHatesModel $SpotHatesModel)
+    {
+        // 验证参数
+        $request->scene('set_hate')->validate();
+        $user_info    = $this->checkLogin();
+        $uid = $user_info['uid'];
+        // 接收数据
+        $id = request('id', 0);
+        $museum_spot = $SpotModel->where('id', $id)->first();
+        if (!$museum_spot) {
+            return     json_send(['code' => 'error', 'msg' => '记录不存在']);
+        }
+        //查询点赞记录
+        $hate_log = $SpotHatesModel->where('museum_spot_id', $id)->where('userid', $uid)->first();
+        if (!empty($hate_log)) {
+            return     json_send(['code' => 'success', 'msg' => '操作成功']);
+        }
+        DB::beginTransaction();
+        try {
+            //添加踩记录
+            $insert_data = [
+                'museum_spot_id' => $id,
+                'userid' => $uid,
+                'insert_time' => time(),
+            ];
+            $like_id = $SpotHatesModel->insertGetId($insert_data);
+            //更新博物馆踩数量
+            $SpotModel->where('id', $id)->increment('hate_count');
+            DB::commit();
+            return     json_send(['code' => 'success', 'msg' => '操作成功']);
+            // 成功处理...
+        } catch (\Exception $e) {
+            DB::rollBack();
+            // 错误处理...
+            return json_send(['code' => 'error', 'msg' => '操作失败']);
+        }
+    }
+
+    /**
+     * 博物馆取消踩
+     * @author    唐远望
+     * @version   1.0
+     * @date      2026-04-09
+     */
+    public function cancel_hate(Request $request, SpotModel $SpotModel, SpotHatesModel $SpotHatesModel)
+    {
+        // 验证参数
+        $request->scene('cancel_hate')->validate();
+        $user_info    = $this->checkLogin();
+        $uid = $user_info['uid'];
+        // 接收数据
+        $id = request('id', 0);
+        // 执行修改
+        $museum_spot = $SpotModel->where('id', $id)->first();
+        if (!$museum_spot) {
+            return     json_send(['code' => 'error', 'msg' => '记录不存在']);
+        }
+        //查询踩记录
+        $hate_log = $SpotHatesModel->where('museum_spot_id', $id)->where('userid', $uid)->first();
+        if (empty($hate_log)) {
+            return     json_send(['code' => 'success', 'msg' => '操作成功']);
+        }
+        DB::beginTransaction();
+        try {
+            //删除踩记录
+            $SpotHatesModel->where('id', $hate_log->id)->delete();
+            //更新博物馆踩数量
+            $SpotModel->where('id', $id)->decrement('hate_count');
+            DB::commit();
+            return     json_send(['code' => 'success', 'msg' => '操作成功']);
+            // 成功处理...
+        } catch (\Exception $e) {
+            DB::rollBack();
+            // 错误处理...
+            return json_send(['code' => 'error', 'msg' => '操作失败']);
+        }
+    }
 }

+ 69 - 0
app/Http/Requests/Api/Museum/Spot.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace App\Http\Requests\Api\Museum;
+
+use App\Http\Requests\BaseRequest;
+
+/**
+ * 博物馆-请求类
+ * @author 唐远望
+ * @version 1.0
+ * @date 2025-12-10
+ * 
+ */
+class Spot extends BaseRequest
+{
+    /**
+     * 获取应用于请求的规则
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        // 返回结果
+        return      [
+            'name'                 => 'required',
+            'id'                => 'required|integer|gt:0',
+            'status'            => 'required|integer|in:0,1',
+            'page'              => 'integer|min:1',
+            'limit'             => 'integer|min:1',
+        ];
+    }
+
+
+    // 场景列表
+    protected   $scenes         = [
+        'detail'             => ['id'],
+        'list'               => ['page', 'limit'],
+        'add'                      => [''],
+        'edit'                  => [''],
+        'set_status'              => [''],
+        'delete'                  => ['id'],
+        'set_like'           => ['id'],
+        'cancel_like'           => ['id'],
+        'set_hate'           => ['id'],
+        'cancel_hate'           => ['id'],
+    ];
+
+    /**
+     * 获取已定义验证规则的错误消息
+     *
+     * @return array
+     */
+    public function messages()
+    {
+        return [
+            'name.required'     => '姓名必填',
+            'id.required'       => 'ID未知',
+            'id.integer'        => 'ID格式错误',
+            'id.gt'               => 'ID格式错误',
+            'status.required'   => '状态未知',
+            'status.integer'    => '状态格式错误',
+            'status.in'         => '状态格式错误',
+            'page.integer'      => '页码格式错误',
+            'page.min'          => '页码格式错误',
+            'limit.integer'     => '每页数量格式错误',
+            'limit.min'         => '每页数量格式错误',
+        ];
+    }
+}

+ 25 - 0
app/Models/Api/Museum/SpotHates.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Models\Api\Museum;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+
+/**
+ * 博物馆踩数据模型
+ * @author 唐远望
+ * @version 1.0
+ * @date 2026-04-09
+ */
+class SpotHates extends Model
+{
+    use HasFactory;
+        // 与模型关联的表名
+    protected $table = 'museum_spot_hates';
+    // 是否主动维护时间戳
+    public $timestamps = false;
+    // 定义时间戳字段名
+    // const CREATED_AT = 'insert_time';
+    // const UPDATED_AT = 'update_time';
+}

+ 25 - 0
app/Models/Api/Museum/SpotLikes.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Models\Api\Museum;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+
+/**
+ * 博物馆点赞数据模型
+ * @author 唐远望
+ * @version 1.0
+ * @date 2026-04-09
+ */
+class SpotLikes extends Model
+{
+    use HasFactory;
+        // 与模型关联的表名
+    protected $table = 'museum_spot_likes';
+    // 是否主动维护时间戳
+    public $timestamps = false;
+    // 定义时间戳字段名
+    // const CREATED_AT = 'insert_time';
+    // const UPDATED_AT = 'update_time';
+}

+ 9 - 1
routes/api.php

@@ -38,4 +38,12 @@ Route::any('personnel/user_info', [App\Http\Controllers\Api\Personnel\User::clas
 //采集博物馆数据
 Route::any('museum/spot/collect_data', [App\Http\Controllers\Api\Museum\Spot::class, 'collect_data']);
 //附近博物馆列表(按经纬度匹配最近地区)
-Route::any('museum/spot/nearby_list', [App\Http\Controllers\Api\Museum\Spot::class, 'nearby_list']);
+Route::any('museum/spot/nearby_list', [App\Http\Controllers\Api\Museum\Spot::class, 'nearby_list']);
+//博物馆数据点赞
+Route::any('museum/spot/set_like', [App\Http\Controllers\Api\Museum\Spot::class, 'set_like']);
+//博物馆数据取消点赞
+Route::any('museum/spot/cancel_like', [App\Http\Controllers\Api\Museum\Spot::class, 'cancel_like']);
+//博物馆数据点踩
+Route::any('museum/spot/set_hate', [App\Http\Controllers\Api\Museum\Spot::class, 'set_hate']);
+//博物馆数据取消点踩
+Route::any('museum/spot/cancel_hate', [App\Http\Controllers\Api\Museum\Spot::class, 'cancel_hate']);