123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- <?php
- /**
- * Created by PhpStorm.
- * User: Administrator
- * Date: 22/05/04
- * Time: 22:00
- */
- namespace App\Services\Api;
- use App\Models\Goods;
- use App\Models\GoodsAttr;
- use App\Models\GoodsCat;
- use App\Models\GoodsComment;
- use App\Models\GoodsLook;
- use App\Models\Order;
- use App\Models\OrderComment;
- use App\Models\User;
- use App\Models\UserCollect;
- use App\Models\UserMessage;
- use App\Models\UserSearchLog;
- use Illuminate\Support\Carbon;
- use Illuminate\Support\Facades\App;
- use Illuminate\Support\Facades\DB;
- class GoodsService
- {
- //获取商品属性 1产地,2所在地,3容量,4桶型,5级别,6批次,7风味,8品牌
- public static function getCatList()
- {
- $list = GoodsAttr::query()
- ->whereNull('deleted_at')
- ->select('id', 'type', 'name')
- ->orderBy('type')
- ->get();
- $list = $list->isNotEmpty() ? $list->toArray() : [];
- $catList = [];
- $catList['cat_list'] = GoodsCat::query()->where('status', 1)->whereNull('deleted_at')->select('id', 'name', 'pic_url')->get();
- foreach ($list as $key => $val) {
- switch ($val['type']) {
- case 1: //原产地
- $catList['origin_list'][] = $val;
- break;
- case 2: //所在地
- $catList['region_list'][] = $val;
- break;
- case 3: //容量
- $catList['capacity_list'][] = $val;
- break;
- case 4: //桶型
- $catList['barrel_list'][] = $val;
- break;
- case 5: //级别
- $catList['level_list'][] = $val;
- break;
- case 6: //批次
- $catList['batch_list'][] = $val;
- break;
- case 7: //风味
- $catList['flavor_list'][] = $val;
- break;
- case 8: //品牌
- $catList['brand_list'][] = $val;
- break;
- }
- }
- return $catList;
- }
- //添加发布商品
- public static function add($request, $userId)
- {
- $goods = App::make('getGoodsInstance');
- $goods->user_id = $userId;
- $goods->name = $request->name; //名称
- $goods->is_old = $request->is_old; //新旧
- $goods->cat_id = $request->cat_id; //类别
- $goods->brand_id = $request->brand_id; //品牌
- $goods->barrel_id = $request->barrel_id; //桶型
- $goods->capacity_id = $request->capacity_id; //容量
- $goods->origin_place_id = $request->origin_place_id; //原产地
- $goods->region_id = $request->region_id; //所在地
- $goods->level_id = $request->level_id; //等级
- $goods->batch_id = $request->batch_id; //批次
- $goods->flavor_id = $request->flavor_id; //风味
- $goods->alcohol_id = $request->alcohol_id; //酒精度
- $goods->tag = $request->tag; //标签
- $goods->notice = $request->notice; //提示
- $goods->introduce = $request->introduce; //介绍
- $goods->price = $request->price; //价格
- $goods->img = $request->img; //图片
- $goods->cover_imgs = $request->cover_imgs; //封面图
- $goods->product_year = $request->product_year; //产品年份
- $goods->distill_year = $request->distill_year; //蒸馏年份
- $goods->bottling_year = $request->bottling_year; //装瓶年份
- $goods->pre_seller = $request->pre_seller ?: 0; //上一卖家(新品上架不填,售卖仓库商品必填)
- $goods->trace_code = $request->trace_code ?: self::createTraceCode($userId); //溯源码 (新品上架自动生成,售卖仓库商品填商品的)
- if (!$goods->save()) {
- return false;
- }
- return true;
- }
- //生成溯源码
- public static function createTraceCode()
- {
- return md5(date('YmdHis') . rand(1000, 9999));
- }
- //获取商品列表
- public static function getGoodsList($map = [], $page = 1, $limit = null, $ids = [])
- {
- $limit = $limit ?: 20;
- $offset = ($page - 1) * $limit;
- $list = Goods::query()
- ->when($map, function ($query, $map) {
- $query->where($map);
- })
- ->when($ids, function ($query, $ids) {
- $query->whereIn('id', $ids);
- })
- ->select('id', 'name', 'img', 'integral')
- ->offset($offset)
- ->limit($limit)
- ->get();
- if($list->isEmpty()){
- return [];
- }
- $list->makeHidden(['created_at', 'updated_at', 'deleted_at']);
- return $list->toArray();
- }
- //获取详情
- public static function getDetail($goodsId)
- {
- $goods = Goods::query()
- ->where('id', $goodsId)
- ->whereNull('deleted_at')
- ->first();
- $goods->makeHidden(['created_at', 'updated_at', 'deleted_at']);
- $goods = $goods->toArray();
- $goods['cover_imgs'] = json_decode($goods['cover_imgs'], true);
- $goods['specific_list'] = json_decode($goods['specific_list'], true);
- return $goods;
- }
- //获取历史购买者信息
- public static function getHistoryBuyers($goodsId)
- {
- $list = Order::query()
- ->with('users:id,username,avatar')
- ->where('goods_id', $goodsId)
- ->whereNull('deleted_at')
- ->select('user_id', 'unit_price', 'created_at')
- ->get();
- foreach ($list as $key => $val) {
- $val['date'] = date('Y-m-d', strtotime($val['created_at']));
- unset($val['created_at']);
- $list[$key] = $val;
- }
- return $list;
- }
- //获取历史价格纪录(需要修改)
- public static function getHistoryPrices($goodsId)
- {
- $list = Order::query()->where('goods_id', $goodsId)->whereNull('deleted_at')->select('unit_price', 'created_at')->get();
- foreach ($list as $key => $val) {
- $val['date'] = date('Y-m-d', strtotime($val['created_at']));
- unset($val['created_at']);
- $list[$key] = $val;
- }
- return $list;
- }
- //获取商品收藏记录
- public static function getGoodsCollects($goodsId)
- {
- $date = Carbon::parse()->subDays(7)->toDateTimeString();
- $list = UserCollect::query()
- ->with('users:id,username,avatar')
- ->where('goods_id', $goodsId)
- ->where('status', 1)
- ->where('created_at', '>', $date)
- ->select('user_id', 'created_at')
- ->get();
- foreach ($list as $key => $val) {
- $val['date'] = date('Y-m-d', strtotime($val['created_at']));
- unset($val['created_at']);
- $list[$key] = $val;
- }
- $totalCount = UserCollect::query()->where('goods_id', $goodsId)->where('status', 1)->count('id');
- $result = [
- 'list' => $list,
- 'seven_count' => count($list),
- 'total_count' => $totalCount
- ];
- return $result;
- }
- //获取用户浏览记录(七日)
- public static function getGoodsLooks($goods_id)
- {
- $date = Carbon::parse()->subDays(7)->toDateTimeString();
- $list = GoodsLook::query()
- ->where('goods_id', $goods_id)
- ->select(DB::raw('DATE(created_at) as date'), DB::raw('COUNT(id) as amount'))
- ->groupBy('date')
- ->having('date', '>', $date)
- ->orderBy('date', 'ASC')
- ->get();
- $list = $list->isNotEmpty() ? $list->toArray() : [];
- $sevenCount = array_sum(array_column($list, 'amount'));
- for ($i = 0; $i < 7; $i++) {
- $day = Carbon::parse('-' . $i . ' days')->toDateString();
- $arr = ['date' => $day, 'amount' => 0];
- foreach ($list as $key => $val) {
- if ($day == $val['date']) {
- $arr['amount'] = $val['amount'];
- }
- }
- $arr['date'] = date('d', strtotime($day));
- $res[] = $arr;
- }
- $result = [
- 'list' => $res,
- 'seven_count' => $sevenCount
- ];
- return $result;
- }
- //商品 收藏/取消
- public static function collectGoods($goodsId, $userId)
- {
- DB::beginTransaction();
- try {
- $collect = UserCollect::query()->where(['user_id' => $userId, 'goods_id' => $goodsId])->first();
- if ($collect) {
- $status = $collect->status;
- $collect->status = $status ? 0 : 1;
- $collect->save();
- if ($status) {
- self::collectNumDec($goodsId);
- UserService::collectNumDec($userId);
- } else {
- self::collectNumInc($goodsId);
- UserService::collectNumInc($userId);
- }
- } else {
- $collect = App::make('getUserCollectInstance');
- $collect->user_id = $userId;
- $collect->goods_id = $goodsId;
- $collect->status = 1;
- $collect->save();
- self::collectNumInc($goodsId); //商品被收藏数 +1
- UserService::collectNumInc($userId); //用户收藏商品数 +1
- }
- DB::commit();
- return true;
- } catch (\Exception $exception) {
- DB::rollBack();
- ErrorMsgServive::write($exception, request()->fullUrl());
- return false;
- }
- }
- //收藏数+1
- public static function collectNumInc($goodsId)
- {
- Goods::query()->where('id', $goodsId)->increment('collect_num');
- }
- //收藏数-1
- public static function collectNumDec($goodsId)
- {
- Goods::query()->where('id', $goodsId)->decrement('collect_num');
- }
- //增加曝光量
- public static function addOpenNum($goodsId)
- {
- Goods::query()->where('id', $goodsId)->increment('open_num');
- }
- //增加浏览记录
- public static function addGoodsLook($userId, $goodsId)
- {
- $goodsLook = App::make('getGoodsLookInstance');
- $goodsLook->user_id = $userId;
- $goodsLook->goods_id = $goodsId;
- $goodsLook->save();
- }
- //商品是否可买
- public static function isGoodsCanBuy($goodsId)
- {
- $info = Goods::query()->where('id', $goodsId)->where('status', 1)->whereNull('deleted_at')->first();
- return empty($info) ? false : $info;
- }
- //通过商品名 模糊搜索商品id
- public static function getGoodsIds($keyword)
- {
- $ids = Goods::query()
- ->where('name', 'like', '%' . $keyword . '%')
- ->pluck('id');
- return $ids->isNotEmpty() ? array_unique($ids->toArray()) : [];
- }
- //我售卖的商品id
- public static function mySellGoodsIds($userId)
- {
- $ids = Goods::query()
- ->where('user_id', $userId)
- ->pluck('id');
- return $ids->isNotEmpty() ? array_unique($ids->toArray()) : [];
- }
- //添加评论
- public static function addComment($request, $userId)
- {
- $goods = Goods::find($request->goods_id);
- $comment = App::make('getGoodsCommentInstance');
- $comment->user_id = $userId;
- $comment->goods_id = $request->goods_id;
- $comment->goods_user_id = $goods->user_id; //售卖商品的人
- $comment->score = $request->score;
- $comment->content = $request->content;
- $comment->pic_url = $request->pic_url;
- if (!$comment->save()) {
- return false;
- }
- //商品被评价进行消息通知
- $type = 'comment';
- $user = User::find($userId);
- $content = $user->username.'评价了您的商品';
- MessageService::sendNotice($goods->user_id, $userId, $type, UserMessage::TYPE[$type], $content);
- return true;
- }
- //获取评论列表 $type: 1全部,2买家评论,卖家评论
- public static function getCommentList($userId, $type = null, $page = 1)
- {
- $limit = 20;
- $offset = ($page - 1) * $limit;
- $list = GoodsComment::query()
- ->with('users:id,username,name,avatar')
- ->with('goods:id,name,img,price')
- ->where('user_id', $userId)
- ->where('is_show', 1)
- ->offset($offset)
- ->limit($limit)
- ->orderByDesc('is_top')
- ->get();
- foreach ($list as $key => $val) {
- $format = CommonService::formatTime($val['created_at']);
- $val['date_format_1'] = $format['date_format_1'];
- $val['date_format_2'] = $format['date_format_2'];
- $val['date_format_3'] = $format['date_format_3'];
- $list[$key] = $val;
- }
- return $list;
- }
- }
|