Disease::getListByPid(0, ['pid', 'name', 'id', 'sort']), 'doctor_roles' => AccountRole::findAccountRolesByGroupName(AccountRole::ROLE_GROUP_DOCTOR), 'activity' => SpuModel::activity(), ]; return $this->json(0, 'success', $list); } /** * 获取已发布的商品列表 * * @return Json * @throws RepositoryException * @throws Exception */ public function list(): Json { $repo = SpuRepository::getInstance(); $fields = SpuModel::spuListFields(); $params = input(); $params['fields'] = $fields; $params['is_score'] = SpuModel::COMMON_OFF;//排除积分商品 $list = $repo->listForFront($params, function ($q) { return $q->with([ 'activity_info' => function ($query) { $query->withoutField('content'); } ]); }); return $this->json(0, 'success', $list); } /** * 获取已发布的积分商品列表 * * @return Json * @throws RepositoryException * @throws Exception */ public function score(): Json { $repo = SpuRepository::getInstance(); $type = input('type/s', SpuModel::TYPE_NORMAL);//normal=综合 newest=最新 $sortField = input('sort_field/s', '');// score=积分 num=兑换量 $sortValue = input('sort_value/s', '');//desc=降序 asc=升序 $rules = [ 'page|页数' => 'integer|gt:0', 'size|每页数量' => 'integer|gt:0', 'type|类型' => 'in:newest,'.SpuModel::TYPE_NORMAL, 'sort_field|排序字段' => 'in:score,amount', 'sort_value|排序值' => 'in:asc,desc', ]; $message = [ 'type.in' => '类型错误', '$sortField.in' => '排序字段错误', 'sort_value.in' => '排序值错误', ]; $params = input(); $validate = $this->validateByApi($params, $rules, $message); if ($validate !== true) { return $validate; } $order = [];//排序 // 综合排序 if ($type === SpuModel::TYPE_NORMAL) { $order = [ 'sort' => 'desc', 'id' => 'desc', ]; } // 最新排序 if ($type === 'newest') { $order = ['published_at' => 'desc']; } // 兑换量排序 if (!empty($sortField)) { if (empty($sortValue)) { return $this->json(4003, '排序参数错误'); } $order = [ $sortField => $sortValue ]; } $params['is_score'] = SpuModel::COMMON_ON; $params['fields'] = SpuModel::scoreListFields(); $list = $repo->listForFront($params, function ($q) { return $q->with([ 'activity_info' => function ($query) { $query->withoutField('content'); } ]); }, $order); return $this->json(0, 'success', $list); } /** * 收藏列表 * * @return Json * @throws Exception */ public function collection(): Json { $rules = [ 'page|页数' => 'integer', 'size|每页数量' => 'integer', ]; $params = input(); $page = $params['page'] ?? 1; $size = $params['size'] ?? 10; $accountId = $this->request->user['user_id'] ?? 0; $params['page'] = 1; $params['size'] = 0; $validate = $this->validateByApi($params, $rules); if ($validate !== true) { return $validate; } //获取收藏相关 $collection = AccountRecord::where('type', AccountRecord::TYPE_SPU) ->where('action', AccountRecord::ACTION_COLLECT) ->where('account_id', $accountId) ->where('is_record', AccountRecord::COMMON_ON) ->order('recorded_at', 'desc'); $total = $collection->count(); if ($total <= 0) { return $this->json(0, 'success', [ 'total' => 0, 'current' => $page, 'size' => $size, 'list' => new Collection(), ]); } $recordList = $collection->page($page)->limit($size)->field('relation_id,recorded_at')->select(); $where = []; $where[] = ['id', 'in', $recordList->column('relation_id')]; $list = SpuRepository::getInstance()->listForFront($params, function ($q) { return $q->with([ 'activity_info' => function ($query) { $query->withoutField('content'); } ]); }, [], $where); $data = []; $spuList = $list['list']->toArray(); foreach ($recordList as $record) { foreach ($spuList as $key => $spu) { if ($record['relation_id'] == $spu['id']) { $data[] = $spu; unset($spuList[$key]); } } } $list['total'] = $total; $list['current'] = $page; $list['size'] = $size; $list['list'] = $data; return $this->json(0, 'success', $list); } /** * SPU 详情 */ public function detail(): Json { $repo = SpuRepository::getInstance(); $id = input('id/d', 0); $shareId = input('share_id/d', 0);//分享人ID $isActivity = input('is_activity/d', 0);//分享人ID $accountId = $this->request->user['user_id'] ?? 0; try { $data = $repo->detail($id, $accountId, $shareId, (bool) $isActivity); return $this->json(0, 'success', $data); } catch (RepositoryException $e) { return $this->json(4001, $e->getMessage()); } catch (Exception $e) { $repo->log($e->getMessage(), $e); return $this->json(5000, '获取详情失败'); } } /** * 获取指定活动商品的拼团列表 仅限拼团活动商品 */ public function groupList(): Json { $id = input('id/d', 0); try { $data = OrderRepository::getInstance()->getGroupList($id); return $this->json(0, 'success', $data); } catch (RepositoryException $e) { return $this->json(4001, $e->getMessage()); } catch (Exception $e) { SpuRepository::log($e->getMessage(), $e); return $this->json(5000, '获取拼团列表失败'); } } /** * 收藏 */ public function record(): Json { if (!$this->request->isPost()) { return $this->json(4000, '无效请求'); } $accountId = $this->request->user['user_id'] ?? 0; $id = $this->request->param('id/d', 0); $action = $this->request->param('action/s', ''); try { if ($accountId <= 0 || $id <= 0) { return $this->json(4001, '无效请求'); } if (!in_array($action, AccountRecord::allowActions())) { return $this->json(4001, '操作类型参数错误'); } if (!SpuModel::findById($id)) { return $this->json(4001, '商品不存在'); } AccountRecord::record($accountId, AccountRecord::TYPE_SPU, $action, $id); } catch (Exception $e) { Log::error('[商品记录失败]'.$e->getMessage()); return $this->json(5000, '操作失败'); } return $this->json(); } /** * 取消 收藏 */ public function unRecord(): Json { if (!$this->request->isPost()) { return $this->json(4000, '无效请求'); } $accountId = $this->request->user['user_id'] ?? 0; $id = $this->request->param('id/d', 0); $action = $this->request->param('action/s', ''); try { if ($accountId <= 0 || $id <= 0) { return $this->json(4001, '无效请求'); } if (!in_array($action, AccountRecord::allowActions())) { return $this->json(4001, '操作类型参数错误'); } if (!SpuModel::findById($id)) { return $this->json(4001, '商品不存在'); } AccountRecord::unRecord($accountId, $id, AccountRecord::TYPE_SPU, $action); } catch (Exception $e) { Log::error('[取消商品记录失败]'.$e->getMessage()); return $this->json(5000, '操作失败'); } return $this->json(); } }