<?php namespace App\Http\Controllers\Api; use App\Command\Log; use App\Models\UserCollect; use App\Models\Good as GoodModel; use App\Models\GoodSku; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class UserCollectController extends BaseController { public function collectOpt(Request $request) { $gid = $request->goods_id ?? 0; $userid = $request->user()->id; if (!GoodModel::find($gid)) { return $this->JsonResponse('', '参数错误', 201); } DB::beginTransaction(); try { $userAppreciate = UserCollect::where(['goods_id' => $gid, 'uid' => $userid])->first(); if ($userAppreciate) { $userAppreciate->delete(); } else { $userAppreciate = UserCollect::withTrashed()->where(['goods_id' => $gid, 'uid' => $userid])->first(); if ($userAppreciate) { $userAppreciate->deleted_at = null; $userAppreciate->save(); } else { $model = new UserCollect(); $model->goods_id = $gid; $model->uid = $userid; $model->save(); } } DB::commit(); } catch (\Exception $e) { Log::add('用户收藏失败', $e->getMessage()); DB::rollBack(); } return $this->JsonResponse(''); } public function collectList(Request $request) { $user_id = $request->user()->id; $page = $request->page ?? 1; $limit = $request->limit ?? 10; $sql = UserCollect::where(['uid' => $user_id, 'deleted_at' => null]); $data = [ 'total' => $sql->count(), 'total_page' => ceil($sql->count() / $limit), 'list' => [] ]; $listData = $sql->offset(($page - 1) * $limit)->limit($limit)->orderBy('created_at', 'DESC')->get(); if ($listData->toArray()) { foreach ($listData as $datum) { $goods_id = $datum->goods_id; $goodObj = GoodModel::select(['goods_name', 'cover_img'])->find($goods_id); $is_jd = (int)$goodObj->is_jd; $attrRowObj = GoodSku::where("goods_id", $goods_id)->first(); $attrcon = $attrRowObj ? json_decode($attrRowObj->content, true) : []; $jd_price = isset($attrcon['jd_price']) ? (float)$attrcon['jd_price'] : 0; $market_price = isset($attrcon['market_price']) ? (float)$attrcon['market_price'] : 0; $data['list'][] = [ 'goods_id' => $goods_id, 'goods_name' => $goodObj->goods_name ?? '', 'attr' => $attrRowObj ? $attrRowObj->attr_val : '', 'goods_price' => $is_jd ? sprintf("%.2f", $jd_price) : sprintf("%.2f", $market_price), 'cover_img' => ($goodObj->cover_img ? env('IMAGE_URL') . $goodObj->cover_img : ''), 'addtime' => date('Y-m-d H:i:s', strtotime($datum->created_at)) ]; } } return $this->JsonResponse($data); } }