__handlePropertyHandler(__CLASS__); } /** * 商品列表 * * @return mixed|OriginalGoodsListsResponse */ public function goodsLists() { $userCode = $this->getUserId(); $inputData = $this->getJsonData(); $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'class_uid' => 'nullable|string', 'name' => 'nullable|string', 'shops_uid' => 'nullable|string', 'is_reco' => 'nullable|in:1']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } if (isset($inputData['is_reco']) && $inputData['is_reco'] == 1) { $orders = [['steer_level', 'DESC']]; } else { $orders = [['sort', 'DESC']]; } $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE; if ($pageSize > 100) { $pageSize = CommentConstant::PAGE_SIZE; } $page = format_page($inputData['page']); $pageSize = intval($pageSize); if ($pageSize <= 0) { $pageSize = CommonConstant::PAGE_SIZE; } $inputData['status'] = 2; $field = ['cover', 'coins', 'original_cions', 'member_coins', 'title', 'number_orders', 'shops_uid', 'uid', 'stock']; $originalRepository = make(OriginalRepository::class); $res = $originalRepository->pushCriteria(new OriginalGoodsListsCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page); $adList = make(VideoService::class)->getAdList(AdConstrant::SMELL_HOME); $ad = []; if (!empty($adList[0])) { foreach ($adList as $k => $adVal) { $link = M3u8CacheRepository::getLinkUrl($adVal['link'], ['user_code' => $userCode]); $ad[$k]['cover'] = M3u8CacheRepository::getImageUrl($adVal['cover']); $ad[$k]['link'] = $link; $ad[$k]['scheme'] = $adVal['scheme']; } } return new OriginalGoodsListsResponse($res, $ad); } /** * 商品详情接口 * * @return mixed */ public function goodsInfo() { $inputData = $this->getJsonData(); $rules = ['uid' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $originalRepo = make(OriginalRepository::class); $info = $originalRepo->findWhereBy(['uid' => $inputData['uid'], 'status' => 2]); if (empty($info)) { return json_fail('该商品不存在'); } $res = []; if (!empty($info->photo_address)) { $photoAddress = json_decode($info->photo_address, true); foreach ($photoAddress as $photoVal) { $res['photo_address'][] = M3u8CacheRepository::getImageUrl($photoVal); } } $res['category_name'] = $info->originalCategory->name; // 分类名字 $res['title'] = $info->title; // 商品名字 $res['coins'] = $info->coins; // 售价 $res['content'] = $info->introduce; // 商品介绍 $res['likes'] = $info->likes; // 点赞数 $res['number_orders'] = $info->number_orders + 1; // 想要 $res['browse'] = $info->browse; // 浏览数 $res['cover'] = M3u8CacheRepository::getImageUrl($info->cover); // 商品封面 $res['cover_tow'] = $info->cover; // 商品封面 $res['member_coins'] = $info->member_coins; $res['stock'] = $info->stock; // 库存 $res['uid'] = $info->uid; $res['video_address'] = M3u8CacheRepository::getVideoInnerUrl($info->video_address, $this->getUserId(), $info->uid, 'goods'); $res['is_goods'] = make(OriginalLikeLogRepository::class)->judgeIsLike($this->getUserId(), $inputData['uid']); //是否点赞 // 店铺信息 $res['shop']['cover'] = M3u8CacheRepository::getImageUrl($info->shops->cover); $res['shop']['name'] = $info->shops->title; $res['shop']['province'] = $info->shops->province; $res['shop']['city'] = $info->shops->city; $res['shop']['region'] = $info->shops->region; $res['shop']['credit_value'] = $info->shops->credit_value; $res['shop']['uid'] = $info->shops->uid; $res['shop']['video_address'] = M3u8CacheRepository::getVideoInnerUrl($info->shops->video_address, $this->getUserId(), $info->shops->uid, 'shop'); $res['shop']['settled_date'] = diffDate((string) $info->shops->created_at, date('Y-m-d H:i:s')); // 想要加1 $originalRepo->numberOrdersAdd($inputData['uid']); return json_success($res); } public function goodsAssessList() { $inputData = $this->getJsonData(); $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'uid' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orders = [['created_at', 'DESC']]; $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE; if ($pageSize > 100) { $pageSize = CommentConstant::PAGE_SIZE; } $page = format_page($inputData['page']); $pageSize = intval($pageSize); if ($pageSize <= 0) { $pageSize = CommonConstant::PAGE_SIZE; } $goodsAssessRepo = make(GoodsAssessRepository::class); $field = ['comment', 'buy_uid', 'comment_fraction']; $res = $goodsAssessRepo->pushCriteria(new OriginalGoodsAssessListCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page); return new OriginalGoodsAssessListResponse($res); } /** * 分类列表 * * @return mixed */ public function category() { $res = make(OriginalClassRepository::class)->list(['status' => 1, 'type' => 1], ['uid', 'name'], ['sort', 'desc']); return json_success($res); } /** * 点赞 * * @return mixed */ public function goodsLike() { $inputData = $this->getJsonData(); $rules = ['goods_uid' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $count = make(OriginalLikeLogRepository::class)->judgeIsLike($this->getUserId(), $inputData['goods_uid']); if ($count) { return json_fail('请勿重复点赞'); } $goodsInfo = make(OriginalRepository::class)->findBy('uid', $inputData['goods_uid'], ['id']); if (!$goodsInfo) { return json_fail('商品点赞异常'); } $userInfo = make(UserRepository::class)->getUserInfoData($this->getUserId()); if (!$userInfo) { return json_fail('用户账号异常'); } $res = make(OriginalLikeLogRepository::class)->create(['user_uid' => $this->getUserId(), 'goods_uid' => $inputData['goods_uid']]); if ($res) { make(OriginalRepository::class)->addLike($inputData['goods_uid']); return json_success([], '点赞成功'); } else { return json_fail('点赞失败'); } } /** * 添加收货地址 * * @return mixed */ public function addShippingAddress() { $inputData = $this->getJsonData(); $rules = ['name' => 'required|string|between:2,16', 'phone' => 'required|integer|regex:/^1[3456789]\\d{9}$/', 'province' => 'required|integer', 'city' => 'required|integer', 'region' => 'nullable|integer', 'address' => 'required|string|between:4,36', 'default_address' => 'required|in:1,2']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $addressRepo = make(UserShippingAddressRepository::class); $addressCount = $addressRepo->getAddressCount($this->getUserId()); if ($addressCount > 5) { return json_fail('最多只可添加6个收货地址,请删除后再添加新的收货地址'); } if ($inputData['default_address'] == 1) { make(UserShippingAddressRepository::class)->update(['is_default' => 2], $this->getUserId(), 'user_uid'); } $insterData = ['user_uid' => $this->getUserId(), 'name' => $inputData['name'], 'phone' => $inputData['phone'], 'address' => $inputData['address'], 'is_default' => $inputData['default_address'], 'province' => $inputData['province'], 'city' => $inputData['city'], 'region' => $inputData['region']]; $res = make(UserShippingAddressRepository::class)->create($insterData); if ($res) { return json_success([], '添加成功'); } else { return json_fail('添加收货地址失败'); } } /** * 收货地址列表 * * @return mixed */ public function addressLists() { $res = make(UserShippingAddressRepository::class)->findAllBy('user_uid', $this->getUserId(), ['name', 'phone', 'address', 'is_default', 'province', 'city', 'region', 'uid']); return json_success($res); } /** * 收货地址详情 * * @return mixed */ public function addressInfo() { $inputData = $this->getJsonData(); $rules = ['uid' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $info = make(UserShippingAddressRepository::class)->findWhereBy(['user_uid' => $this->getUserId(), 'uid' => $inputData['uid']], ['name', 'phone', 'address', 'is_default', 'province', 'city', 'region']); if (empty($info)) { return json_fail('收货地址不存在'); } return json_success($info); } /** * 修改收货地址 * * @return mixed */ public function upAddress() { $inputData = $this->getJsonData(); $rules = ['uid' => 'required|string', 'name' => 'nullable|string|between:2,16', 'phone' => 'nullable|integer|regex:/^1[34578]\\d{9}$/', 'province' => 'nullable|integer', 'city' => 'nullable|integer', 'region' => 'nullable|integer', 'address' => 'nullable|string|between:4,36', 'default_address' => 'nullable|in:1,2']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $addressRepo = make(UserShippingAddressRepository::class); $info = $addressRepo->findWhereBy(['uid' => $inputData['uid'], 'user_uid' => $this->getUserId()]); if (empty($info)) { return json_fail('修改异常,请联系客服'); } $res = $addressRepo->updateAddress($inputData, $this->getUserId()); if ($res) { return json_success([], '修改成功'); } else { return json_fail('修改失败'); } } /** * 删除收货地址 * * @return mixed */ public function delAddress() { $inputData = $this->getJsonData(); $rules = ['uid' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $addressRepo = make(UserShippingAddressRepository::class); $info = $addressRepo->findWhereBy(['uid' => $inputData['uid'], 'user_uid' => $this->getUserId()], ['id']); if (empty($info)) { return json_fail('异常操作,收货地址不存在'); } $res = make(UserShippingAddressRepository::class)->delete($info->id); if ($res) { return json_success([], '删除成功'); } else { return json_fail('删除失败'); } } /** * 购买商品详情接口 * * @return mixed */ public function goodsBuyInfo() { $inputData = $this->getJsonData(); $rules = ['uid' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $goodsInfo = make(OriginalRepository::class)->findWhereBy(['uid' => $inputData['uid'], 'status' => 2], ['title', 'shops_uid', 'cover', 'coins', 'original_cions', 'member_coins']); if (empty($goodsInfo)) { return json_fail('商品已下架,请重新选择新商品'); } // 获取默认收货地址 $res['address'] = make(UserShippingAddressRepository::class)->getUserAddress($this->getUserId()); $res['title'] = $goodsInfo->title; $res['coins'] = $goodsInfo->coins; $res['original_cions'] = $goodsInfo->original_cions; $res['member_coins'] = $goodsInfo->member_coins; $res['shop_name'] = $goodsInfo->shops->title; $res['cover'] = M3u8CacheRepository::getImageUrl($goodsInfo->title); return json_success($res); } /** * 购买商品 * * @return mixed */ public function goodsBuy() { $inputData = $this->getJsonData(); $rules = ['uid' => 'required|string', 'address_uid' => 'required|string', 'number' => 'required|integer', 'price' => 'required|integer', 'message' => 'nullable|string|between:2,16']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orderRepo = make(OriginalOrderRepository::class); // 生成订单 $orderSn = $orderRepo->createOrder($inputData, $this->getUserId()); if ($orderSn === false) { return json_fail('购买失败,请联系客服', 30002); } $userInfo = make(UserRepository::class)->getUserInfoFromCache($this->getUserId()); if ($userInfo['coins'] < $inputData['price']) { return json_fail('金币不足,请充值后再购买', 30001); } // 购买付钱 $res = $orderRepo->buyGoods($orderSn, $this->getUserId()); if ($res) { return json_success([], '购买成功'); } else { return json_fail('付款失败', 30003); } } /** * 确认购买订单 * * @return mixed */ public function verifyBuy() { $inputData = $this->getJsonData(); $rules = ['order_sn' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $res = make(OriginalOrderRepository::class)->buyGoods($inputData['order_sn'], $this->getUserId()); if ($res) { return json_success([], '购买成功'); } else { return json_fail('购买失败', 30004); } } /** * 用户订单列表 * * @return mixed|OriginalUserOrderListsResponse */ public function userOrderLists() { $inputData = $this->getJsonData(); $rules = ['page' => 'required|integer', 'page_size' => 'required|integer', 'order_status' => 'nullable|integer']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orders = [['created_at', 'DESC']]; $pageSize = $inputData['page_size'] ?? CommentConstant::PAGE_SIZE; if ($pageSize > 100) { $pageSize = CommentConstant::PAGE_SIZE; } $page = format_page($inputData['page']); $pageSize = intval($pageSize); if ($pageSize <= 0) { $pageSize = CommonConstant::PAGE_SIZE; } $inputData['buy_uid'] = $this->getUserId(); $field = ['goods_cover', 'goods_name', 'clinch_amount', 'sell_uid', 'order_status', 'pay_status', 'redund_status', 'order_sn', 'goods_amount']; $res = make(OriginalOrderRepository::class)->pushCriteria(new OriginalOrderCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, $field, $page); return new OriginalUserOrderListsResponse($res); } /** * 用户订单详情 * * @return mixed */ public function userOrderInfo() { $inputData = $this->getJsonData(); $rules = ['order_sn' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()]); if (empty($info)) { return json_fail('订单异常'); } $res = ['name' => $info->goods_name, 'order_sn' => $info->order_sn, 'cover' => M3u8CacheRepository::getImageUrl($info->goods_cover), 'order_status' => $info->order_status, 'clinch_amount' => $info->clinch_amount, 'goods_amount' => $info->goods_amount, 'address' => json_decode($info->address, true), 'order_info' => ['order_sn' => $info->order_sn, 'pay_time' => $info->pay_time, 'message' => $info->message], 'logistics_info' => ['courier_firm' => $info->courier_firm ?: '', 'courier_number' => $info->courier_number ?: '', 'logistics_info' => $info->logistics_info ?: ''], 'pay_time' => $info->pay_time, 'receipt_time' => $info->receipt_time, 'refund_apply_time' => $info->refund_apply_time, 'refund_end_time' => $info->refund_end_time, 'assess_time' => $info->assess_time]; $res['assess_info'] = null; if ($info->order_status == 4) { $assessInfo = make(GoodsAssessRepository::class)->findWhereBy(['order_sn' => $info->order_sn, 'buy_uid' => $this->getUserId()]); if (!empty($assessInfo)) { $res['assess_info'] = ['fraction' => $assessInfo->comment_fraction ?: '', 'comment' => $assessInfo->comment ?: '']; } } return json_success($res); } /** * 用户订单删除 * * @return mixed * @throws \Exception */ public function userOrderDelete() { $inputData = $this->getJsonData(); $rules = ['order_sn' => 'required|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId(), 'order_status' => 1]); if (empty($info)) { return json_fail('该订单不可被删除'); } $res = $info->delete(); if ($res) { return json_success([], '订单删除成功'); } else { return json_fail('操作失败'); } } /** * 确认收货 * * @return mixed */ public function confirmReceipt() { $inputData = $this->getJsonData(); $rules = ['order_sn' => 'required|string', 'fraction' => 'required|integer|in:1,2,3', 'comment' => 'nullable|string|max:255', 'img_json' => 'nullable|string']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $info = make(OriginalOrderRepository::class)->findWhereBy(['order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()]); if (empty($info)) { return json_fail('确认收货异常,请联系管理员'); } $data = ['goods_uid' => $info->goods_uid, 'buy_uid' => $this->getUserId(), 'goods_name' => $info->goods_name, 'order_sn' => $info->order_sn, 'evaluation_map' => $inputData['img_json'], 'comment' => $inputData['comment'], 'comment_fraction' => $inputData['fraction'], 'reward_coins' => 5]; $res = make(OriginalOrderRepository::class)->confirmReceipt($data, 5); if ($res) { return json_success([], '操作成功'); } else { return json_fail('操作失败'); } } /** * 申请退款 * * @return mixed */ public function applyRefund() { $inputData = $this->getJsonData(); $rules = ['order_sn' => 'required|string', 'content' => 'required|max:255']; $validator = make(ValidatorFactoryInterface::class)->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $where = ['redund_status' => 1, 'order_sn' => $inputData['order_sn'], 'buy_uid' => $this->getUserId()]; $orderInfo = make(OriginalOrderRepository::class)->findWhereBy($where); if (empty($orderInfo)) { return json_fail('当前订单不可被退款'); } $orderInfo->redund_status = 2; $orderInfo->order_status = 5; $orderInfo->apply_reason = $inputData['content']; $orderInfo->refund_apply_time = date('Y-m-d H:i:s'); if ($orderInfo->save()) { return json_success([], '申请成功,在三个工作日内将会处理您的订单'); } else { return json_fail('申请失败!'); } } /** * 店铺详情 * * @param ValidatorFactoryInterface $validatorFactory * @return mixed * @throws \Exception */ public function shopsInfo(ValidatorFactoryInterface $validatorFactory) { $inputData = $this->getJsonData(); $rules = ['shops_uid' => 'required|string']; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $shopInfo = make(ShopsRepository::class)->findBy('uid', $inputData['shops_uid'], ['cover', 'title', 'credit_value', 'video_address', 'created_at']); if (empty($shopInfo)) { return json_fail('该店铺不存在'); } $res = ['cover' => M3u8CacheRepository::getImageUrl($shopInfo->cover), 'name' => $shopInfo->title, 'credit_value' => $shopInfo->credit_value, 'video_address' => M3u8CacheRepository::getVideoInnerUrl($shopInfo->video_address, $this->getUserId(), $inputData['shops_uid'], 'shop'), 'created_at' => diffDate((string) $shopInfo->created_at, date('Y-m-d H:i:s'))]; return json_success($res); } public function msgCount() { $msgInfo = make(MessageRepository::class)->firstSys($this->getUserId(), 'shops'); $msgInfo['shops_info'] = null; if ($msgInfo['count_unread'] > 0 && isset($msgInfo['first_msg']['from_uid'])) { $shopsInfo = make(ShopsRepository::class)->findBy('uid', $msgInfo['first_msg']['from_uid'], ['title', 'cover', 'uid']); if ($shopsInfo) { $msgInfo['shops_info']['title'] = $shopsInfo->title; $msgInfo['shops_info']['cover'] = M3u8CacheRepository::getImageUrl($shopsInfo->cover); $msgInfo['shops_info']['uid'] = $shopsInfo['uid']; } } unset($msgInfo['first_msg']); return json_success($msgInfo); } }